lambda S:`6793**164`[len(S)]
Çevrimiçi deneyin!
Maalesef , bugüne kadarki en iyi Python 2 cevabından daha uzun bir süre hala bir bayt; enklact
-acroach kullanarak olmasa da .
Şimdi kısa bir byte daha i cri everytim cevabı !
O nasıl çalışır?
Çok fazla kaba kuvvetten sonra, sadece doğru rakamlara sahip bir sayı ile sonuçlanan bir ifade buldum.
Verilen dize uzunluklarının sadece bir basamağına bakmanın 3 byte ( %10
) gerektirdiğini fark ettim . Bu yüzden giriş dizelerinin uzunluklarını haftanın gününe doğrudan eşleyen sayıları aramak için başka bir Python programı ( Pastebin bağlantısı ) yazdım .
Sihirli sayı şuna benzer: 6793**164 = 28714733692312345620167113260575862840674216760386883406587492336415023761043044176257567032312859371641211117824224067391750766520256112063756278010050204239810862527958109285342869876264808102743173594017101607983288521836082497514383184553444755034407847810524083812459571382103831904835921560285915349760536969265992879312869538914200854305957428078269094250817029486005437991820466986793657301214564264748923199288698278615871481529585816783654841131577178922192383679718074693535597651237893794976519274268917335387876260270630339777501802739852278932279775510324916969726203688466311848240746465178859847331248655567344801
(etkileyici 629 ondalık basamağı olan bir sayı)
Ve gördüğünüz gibi, sayı [28, 20, 13, 11, 4, 16, 17] ila [0, 1, 2, 3, 4, 5, 6] 'dan gerekli eşleşmeyi sağlar (Python dizeleri 0- endeksli):
2871 4 733692 3 1 2 34 5 6 20 1 6711326 0 5758628406742167603868834...
[4]^ [11]^ [13]^ [16]^ ^[17] ^[20] ^[28]
Benim programı da daha (29 yerine 28) temsil edecek bayt almak olsa da, gerekli özelliğiyle numaralarını verim diğer ifadeler bulundu: 19439**540
, 34052**726
, 39311**604
, 44873**182
, 67930**164
ve 78579**469
. (Bunlar bağlantılı program tarafından bulunan tüm ifadelerdir; yürütülmesi birkaç saat sürmüştür.)
28 bayt gerektiren lambda S:`7954<<850`[len(S)]
alternatif fonksiyon : 29 bayt lambda S:`9699<<2291`[len(S)]
gerektiren lambda S:`853<<4390`[len(S)+9]
alternatif fonksiyon : 30 bayt gerektiren alternatif fonksiyon: 31 bayt gerektiren alternatif fonksiyon:lambda S:`1052<<3330`[len(S)+8]
O nasıl çalışır? Bu numarayı nasıl ürettim? (30 baytlık cevap)
30 baytlık cevap oldu lambda S:`3879**41`[len(S)%10]
.
Giriş dizgisinin uzunluklarına bakıldığında, [28, 20, 13, 11, 4, 16, 17]
on tabanındaki tüm son basamakların farklılık gösterdiğini ve listede sonuçlandığını fark ettim [8, 0, 3, 1, 4, 6, 7]
. Bu yüzden sadece bu listeden haftanın yedi gününün listesine bir haritaya ihtiyacım vardı [0, 1, 2, 3, 4, 5, 6]
.
İlk yaklaşımım sadece eşleme yapmak için bir dize kullandı: lambda S:"13*24*560"[len(S)%10]
dize onbir bayt ( "13*24*560"
) gerektirse de.
Bu yüzden programın daha fazla golf oynamayı ümit ederek, eşleştirilen rakamlarla bir tamsayı ile sonuçlanan aritmetik ifadeleri test etmek için bir Python programı ( Pastebin bağlantısı ) yazdım . Şimdiye kadar bulduğum şey `3879**41`
(yalnızca on bayt, programımın bulduğu tek ve dolayısıyla en küçük ifade).
Tabii ki, bir insanın deneyebileceği birçok olası ifade vardır; Sadece a**b
ihtiyacım olan ufak bir sonucu olan formda bir tane olduğu için şanslıydım .
Sadece meraklı herkes için 3879**41 = 1372495608710279938309112732193682350992788476725725221643007306215781514348937145528919415861895033279220952836384201346579163035594383625990271079 = 1.372... * 10**147
.
Ne yazık ki 32 bayt gerektiren alternatif ifadeleri ararken buldum başka bir geçerli fonksiyon: lambda S:`7**416`[len(S)%10+290]