Python 3, 7306 1995 Bayt
Bu çözüm log (n) karmaşıklığı içinde çalışır (söyleyebileceğim kadarıyla).
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]
f(2**32 - 1)
Neredeyse anında çalıştığını test edebilirsiniz
Bu kağıdı hesaplamak için bir yöntem üzerinde kullandım . Bu yöntemle, n = 78'den 334'e n için önceden belirlenmiş değerler için 168'den sonraki çift sayılar olmadan büyük bir veri yığını vardır. Bu verileri küçük bir şeye dönüştürmek istedim ve herhangi bir iyi sıkıştırma algoritmasını bilmiyordum. kendim yaptım.
Sıkıştırma yöntemim dize değiştirme kurallarının bir listesini yapmaktı. Kural tanımını göz önünde bulundurarak tüm içeriği en çok azaltan string değiştirme kuralını bulan bir yöntem yarattım. Daha sonra daha fazla kural oluşturamayana kadar bunu tekrarlı bir şekilde uyguladım (gz ve AZ karakterlerini kullandım). Değiştirmek için yaptığım dize, sayıların her biri için onaltılık değerlerin virgülle ayrılmış listesidir. Geçmişe bakıldığında, bunları onaltılık değerlerine dönüştürmek en akıllıca tercih olmayabilir, onları bırakmak daha kısa olacaktır, çünkü hex olması yalnızca 3 basamaklı sayılar için tasarruf sağlar, ancak tek basamaklı sayılar için 0 ekler.
C ayarladığım satırda değiştirme kurallarının listesini ve üzerinde çalıştığı metni görebilirsiniz. Kuralların da tersten uygulanması gerekir, çünkü bazı kurallar diğer kurallardan oluşturulan karakterleri içerir.
Ayrıca, bu kodda, listelerin listesini tek bir listeye dönüştürmek ve ardından metni değiştirmek için kurallara erişmek için farklı bir yöntem kullanmak gibi, muhtemelen sözdizimini azaltabileceğim çok sayıda yer var.