Python 3, 7306 1995 Bytes
Diese Lösung läuft in log (n) Komplexität (soweit ich das beurteilen kann).
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]
Sie können testen, dass f(2**32 - 1)
fast sofort ausgeführt wird
Ich habe dieses Papier für eine Berechnungsmethode verwendet. Mit dieser Methode gibt es einen massiven Datenblock für die vorbestimmten Werte für n von 78 bis 334 ohne die geraden Zahlen nach 168. Ich wollte diese Daten in etwas Kleines verwandeln und kannte daher keine guten Komprimierungsalgorithmen machte meine eigene.
Ich habe es so komprimiert, dass eine Liste mit Regeln zum Ersetzen von Zeichenfolgen erstellt wurde. Ich habe eine Methode entwickelt, bei der die Zeichenfolge-Ersetzungsregel gefunden wurde, die den größten Teil des Inhalts unter Berücksichtigung der Definition der Regel reduziert. Ich habe dies dann rekursiv angewendet, bis ich keine Regeln mehr erstellen konnte (ich habe die Zeichen gz und AZ verwendet). Die Zeichenfolge, durch die ich ersetzen wollte, war eine durch Kommas getrennte Liste der Hexadezimalwerte für jede der Zahlen. Im Nachhinein mag es nicht die klügste Wahl gewesen sein, sie in ihre Hex-Werte umzuwandeln. Es wäre wahrscheinlich kürzer, sie in Dezimalzahlen zu belassen, da Hex nur für die 3-stelligen Zahlen speichern würde, aber eine 0 für einstellige Zahlen hinzufügen würde.
In der Zeile, in der ich c setze, sehen Sie die Liste der Ersetzungsregeln und den Text, in dem sie ausgeführt werden. Die Regeln müssen auch in umgekehrter Reihenfolge angewendet werden, da einige Regeln Zeichen enthalten, die aus anderen Regeln erstellt wurden.
Es gibt auch zahlreiche Stellen in diesem Code, an denen ich möglicherweise die Syntax einschränken könnte, z. B. die Liste der Listen in eine einzige Liste umzuwandeln und dann mit einer anderen Methode auf die Regeln zuzugreifen, durch die der Text ersetzt wird