lambda S:`6793**164`[len(S)]
Cobalah online!
Sayangnya masih satu byte lebih lama dari jawaban Python 2 terbaik sejauh ini; meskipun tidak menggunakan enklact
pendekatan-.
Sekarang satu byte lebih pendek dari i cri jawaban everytim !
Bagaimana cara kerjanya?
Setelah banyak kekerasan, saya menemukan ekspresi yang menghasilkan angka yang memiliki angka yang tepat.
Saya perhatikan bahwa melihat hanya satu digit spesifik dari panjang string yang diberikan diperlukan 3 byte ( %10
). Jadi saya menulis program Python lain ( tautan Pastebin ) untuk mencari lebih lanjut nomor yang secara langsung memetakan panjang string input ke hari dalam seminggu.
Angka ajaib terlihat seperti ini: 6793**164 = 28714733692312345620167113260575862840674216760386883406587492336415023761043044176257567032312859371641211117824224067391750766520256112063756278010050204239810862527958109285342869876264808102743173594017101607983288521836082497514383184553444755034407847810524083812459571382103831904835921560285915349760536969265992879312869538914200854305957428078269094250817029486005437991820466986793657301214564264748923199288698278615871481529585816783654841131577178922192383679718074693535597651237893794976519274268917335387876260270630339777501802739852278932279775510324916969726203688466311848240746465178859847331248655567344801
(angka dengan angka desimal 629 mengesankan)
Dan seperti yang Anda lihat, angka tersebut menyediakan pemetaan yang diperlukan dari [28, 20, 13, 11, 4, 16, 17] hingga [0, 1, 2, 3, 4, 5, 6] (string Python adalah 0 diindeks):
2871 4 733692 3 1 2 34 5 6 20 1 6711326 0 5758628406742167603868834...
[4]^ [11]^ [13]^ [16]^ ^[17] ^[20] ^[28]
Program saya juga menemukan ekspresi lain yang menghasilkan angka dengan properti yang diperlukan, meskipun mereka mengambil lebih byte untuk mewakili (29 bukannya 28): 19439**540
, 34052**726
, 39311**604
, 44873**182
, 67930**164
dan 78579**469
. (Itu semua adalah ekspresi yang ditemukan oleh program tertaut; pelaksanaannya memakan waktu beberapa jam.)
Fungsi alternatif yang membutuhkan 28 byte: lambda S:`7954<<850`[len(S)]
Fungsi alternatif yang membutuhkan 29 byte: lambda S:`9699<<2291`[len(S)]
Fungsi alternatif yang membutuhkan 30 byte: lambda S:`853<<4390`[len(S)+9]
Fungsi alternatif yang membutuhkan 31 byte:lambda S:`1052<<3330`[len(S)+8]
Bagaimana cara kerjanya? Bagaimana saya menghasilkan angka itu? (Jawaban 30 byte)
Jawaban 30 byte adalah lambda S:`3879**41`[len(S)%10]
.
Melihat panjang string input [28, 20, 13, 11, 4, 16, 17]
, saya perhatikan bahwa semua digit terakhir dalam basis sepuluh berbeda, menghasilkan daftar [8, 0, 3, 1, 4, 6, 7]
. Jadi saya hanya perlu pemetaan dari daftar itu ke daftar semua tujuh hari dalam seminggu [0, 1, 2, 3, 4, 5, 6]
,.
Pendekatan pertama saya hanya menggunakan string untuk melakukan pemetaan:, lambda S:"13*24*560"[len(S)%10]
meskipun string tersebut membutuhkan sebelas byte ( "13*24*560"
).
Jadi saya menulis program Python ( tautan Pastebin ) untuk menguji ekspresi aritmatika yang menghasilkan bilangan bulat dengan angka-angka yang cocok, berharap untuk golf program lebih lanjut. Apa yang saya dapatkan sejauh ini adalah `3879**41`
(hanya sepuluh byte, satu-satunya ekspresi yang ditemukan oleh program saya).
Tentu saja, ada banyak kemungkinan ekspresi yang bisa dicoba seseorang; Saya hanya beruntung bahwa ada satu dalam bentuk a**b
dengan hasil yang cukup kecil yang sesuai dengan kebutuhan saya.
Hanya untuk siapa saja yang penasaran 3879**41 = 1372495608710279938309112732193682350992788476725725221643007306215781514348937145528919415861895033279220952836384201346579163035594383625990271079 = 1.372... * 10**147
,.
Fungsi lain yang valid yang saya temukan saat mencari ekspresi alternatif yang sayangnya membutuhkan 32 byte: lambda S:`7**416`[len(S)%10+290]