# GoldPerm2-q6
# Exs for Section 47, Q.6, p.167, p.276-277

import math

N = 100

def examine(vals):
  for i in range(1,N+1):
    print(f"{vals[i]:4}", end='')
  print()
  print("Forward diffs:")
  for i in range(1,N):
    print((vals[i+1]-vals[i]), end='')
  print()
  print("Dist from i to i+1 :")
  i = 1
  while i <= N:
    j = 0; # checks c
    if vals[i] == N:
      print(" N")
    else:
      while True:
        j += 1
        if vals[j]-vals[i] == 1:
          break
      print((j-i), end ='')
    i += 1
  print()

u = [0]*(N+1)
x = [i for i in range(N+1)]
y = [0]*(N+1)
z = (math.sqrt(5)-1)/2
for i in range(1,N+1):
  y[i] = i*z - math.trunc(i*z)
for i in range(2, N+1):
  v = y[i]
  w = x[i]
  j = i
  # print(j-1, y[1])
  while y[j-1] == v:   # ??
    y[j] = y[j-1]
    x[j] = x[j-1]
    j -= 1
  y[j] = v
  x[j] = w
print("---------- Golden -------------")
examine(x)
for i in range(1,N+1):
  u[x[i]] = i
print("---------- Inverse -------------")
examine(u)
