Python 3, 7306 1995 Byte
Giải pháp này chạy trong độ phức tạp log (n) (theo như tôi có thể nói).
def i(s,t):
for n in s[::-1]:t=t.replace(*n)
return [[]]*78+[list(bytearray.fromhex(a))for a in t.split(",")]
def f(n):
g,h=lambda c,n:c+[[[2],[3,7,78,91]][n[len(c)]%2]+[i*2for i in c[-1]]],lambda n:[]if n<78 else h((n-[2,179][n%2])//2)+[n]
v=h(n);c=[i([['g',',03040'],['h',',,0306080'],['i',',020'],['j','b0c1'],['k','21'],['l','60'],['m','30'],['n','141'],['o','k24'],['p',',g'],['q','618'],['r','0c0'],['s','1e'],['t',',0ml'],['u','283c'],['v','e0f1'],['w','2a38'],['x','80'],['y','a0'],['z','01'],['A','50'],['B','24'],['C','i40'],['D','plb1'],['E','gl'],['F','48'],['G','bre1'],['H','28'],['I','6k'],['J','416s'],['K',',040Al'],['L','90'],['M','2a'],['N','54'],['O','k6o'],['P','3c'],['Q','il'],['R','18'],['S','px'],['T','im'],['U','70'],['V','b1'],['W','23'],['X','pj'],['Y','hj'],['Z','0n']],'020lxycHTaRHCyf1517CyfneC91k51cCLdneQU912MCyf0dBiALyf2dClfPEyfneT9s2dELdneEjIgmLydHg5rd14BKLardsE3n8sQ9rd1517Q9rdneplmdRBgUmcRMC5sPEyf102bgA6sPE91z2miAj41IQmc0dRBQUen7spl31z82bT9RFT3wE7neMgmyf0dRBgUmaHMELc1b36EUdBMQLyfs2d,C710M2bgLardRHT3BFQ9rf0dPQ7rdBMQm9Rs2d,0mAl9100d142bE710M2bQmc0fRPtxarfn8sEc1k4sBTfnePExcwtxarf1k8BExcuT3kkT91663C51964,0mAl71k4BMELe12NTcRwQjOT820ltmarf1z8mExeRNCqBFtmyjIHKLa100ds2bQU91bM36garf1k4sBTcRBFgxarfwE91keB2dtUxcn8sME9nbs36gm9rduC5R78,0mAUyf0d14BME91kbB36QLc12AB2dgyjqkHEUeMNT9157eQU9RMFT8s78C8neuixLc1zk4AtUxc1z8Mmt8re0fn8sWhLyc1bH36pl8neu,Kxycsw,iAxc1420l,K8ren8NS9n81bs36hc0vz8WmYzqkmhyv2WBHhyVOHXkJoSjIwSjIuSvz4WASVZIAXZ6skmSj6oFXzOmplvcsW46D61csk46plv8WBFDqoF,tarvk8WBH,tyjkqoHhGqkN,tmvZ8sWmhVZqskmpc0vZ8WAXZqkAplbnImASbn6skwSbn6skuSVOwSVOupGONSbn6soFpyVkJk5aSj6sk78YJkuDkIP5aYOuhvzk4WBAhVzk416oA,tyjkJ265a,,0mxyjk41q53sYzIHmPXkqowXkqouhyVqoHFYz6omFhb0e1zqkmNSyVIP78YJ20klpyVOHwYk620olpc0vz8WBmFXzqomFpG61ckH38PhyjIP78Yz620kmlDkImLDzINUhGIuNDzIA78hb0e1ZIANYkqk366chG6oFNXkJkP5ahVZ6somFSb0e1620kNlhVk41qomADzIFLXkqso78pGqoFNXzkImP5a,tyjk620oHlhG620kNlXzqskm78,tjZqskHmPYqouFD6sku78YzqkNU,tjZqsomF')[v[0]]]
for o in range(len(v)-1):c=g(c,v)
return c[-1]
Bạn có thể kiểm tra f(2**32 - 1)
chạy gần như ngay lập tức
Tôi đã sử dụng bài báo này về một phương pháp để tính toán nó. Với phương pháp này, có một khối dữ liệu khổng lồ cho các giá trị được xác định trước cho n từ 78 đến 334 mà không có số chẵn sau 168. Tôi muốn biến dữ liệu này thành một số nhỏ và tôi không biết bất kỳ thuật toán nén tốt nào nên tôi làm của riêng tôi.
Cách tôi nén nó là bằng cách có một danh sách các quy tắc thay thế chuỗi. Tôi đã tạo ra một phương thức tìm thấy quy tắc thay thế chuỗi sẽ cắt giảm hầu hết nội dung trên tất cả có tính đến việc xác định quy tắc. Sau đó tôi đã áp dụng đệ quy này cho đến khi tôi không thể tạo thêm quy tắc nào nữa (tôi đã sử dụng các ký tự gz và AZ). Chuỗi tôi tạo để thay thế là một danh sách các giá trị hex được phân tách bằng dấu phẩy cho mỗi số. Nhìn lại, chuyển đổi chúng thành các giá trị hex của chúng có thể không phải là lựa chọn khôn ngoan nhất, có lẽ sẽ ngắn hơn nếu để chúng ở dạng thập phân, vì có hex sẽ chỉ lưu cho các số có 3 chữ số nhưng sẽ thêm 0 cho các số có một chữ số.
Dòng nơi tôi đặt c bạn có thể thấy danh sách các quy tắc thay thế và văn bản mà nó chạy trên đó. Các quy tắc cũng cần được áp dụng ngược lại vì một số quy tắc bao gồm các ký tự được tạo từ các quy tắc khác.
Cũng có nhiều vị trí trong mã này, nơi tôi có thể cắt giảm cú pháp, chẳng hạn như biến danh sách danh sách thành một danh sách và sau đó sử dụng một phương pháp khác để truy cập các quy tắc để thay thế văn bản bằng