lambda S:`6793**164`[len(S)]
Hãy thử trực tuyến!
Thật không may, vẫn còn một byte dài hơn câu trả lời Python 2 tốt nhất cho đến nay; mặc dù không sử dụng enklact
-approach.
Bây giờ một byte ngắn hơn câu trả lời của tôi cri everytim !
Làm thế nào nó hoạt động?
Sau rất nhiều lực lượng vũ phu, tôi tìm thấy một biểu thức dẫn đến một số có đúng các chữ số.
Tôi nhận thấy rằng chỉ nhìn vào một chữ số cụ thể có độ dài của chuỗi đã cho cần 3 byte ( %10
). Vì vậy, tôi đã viết một chương trình Python khác ( liên kết Pastebin ) để tìm kiếm thêm các số người trực tiếp ánh xạ độ dài của chuỗi đầu vào đến ngày trong tuần.
Số ma thuật trông như thế này: 6793**164 = 28714733692312345620167113260575862840674216760386883406587492336415023761043044176257567032312859371641211117824224067391750766520256112063756278010050204239810862527958109285342869876264808102743173594017101607983288521836082497514383184553444755034407847810524083812459571382103831904835921560285915349760536969265992879312869538914200854305957428078269094250817029486005437991820466986793657301214564264748923199288698278615871481529585816783654841131577178922192383679718074693535597651237893794976519274268917335387876260270630339777501802739852278932279775510324916969726203688466311848240746465178859847331248655567344801
(một số có 629 chữ số thập phân ấn tượng)
Và như bạn có thể thấy, số này cung cấp ánh xạ cần thiết từ [28, 20, 13, 11, 4, 16, 17] đến [0, 1, 2, 3, 4, 5, 6] (Chuỗi Python là 0- được lập chỉ mục):
2871 4 733692 3 1 2 34 5 6 20 1 6711326 0 5758628406742167603868834...
[4]^ [11]^ [13]^ [16]^ ^[17] ^[20] ^[28]
Chương trình của tôi cũng tìm thấy những biểu hiện khác mà mang số với tài sản cần thiết, mặc dù họ mất nhiều byte để biểu diễn (29 thay vì 28): 19439**540
, 34052**726
, 39311**604
, 44873**182
, 67930**164
và 78579**469
. (Đó là tất cả các biểu thức được tìm thấy bởi chương trình được liên kết; quá trình thực thi của nó mất vài giờ.)
Hàm thay thế yêu cầu 28 byte: lambda S:`7954<<850`[len(S)]
Hàm thay thế yêu cầu 29 byte: lambda S:`9699<<2291`[len(S)]
Hàm thay thế yêu cầu 30 byte: lambda S:`853<<4390`[len(S)+9]
Hàm thay thế yêu cầu 31 byte:lambda S:`1052<<3330`[len(S)+8]
Làm thế nào nó hoạt động? Làm thế nào tôi tạo ra số đó? (Câu trả lời 30 byte)
Câu trả lời 30 byte là lambda S:`3879**41`[len(S)%10]
.
Nhìn vào độ dài của chuỗi đầu vào [28, 20, 13, 11, 4, 16, 17]
, tôi nhận thấy rằng tất cả các chữ số cuối cùng trong cơ sở mười khác nhau, dẫn đến danh sách [8, 0, 3, 1, 4, 6, 7]
. Vì vậy, tôi chỉ cần một ánh xạ từ danh sách đó vào danh sách của tất cả bảy ngày trong tuần , [0, 1, 2, 3, 4, 5, 6]
.
Cách tiếp cận đầu tiên của tôi chỉ đơn giản là sử dụng một chuỗi để thực hiện ánh xạ: lambda S:"13*24*560"[len(S)%10]
mặc dù chuỗi yêu cầu mười một byte ( "13*24*560"
).
Vì vậy, tôi đã viết một chương trình Python ( liên kết Pastebin ) để kiểm tra các biểu thức số học dẫn đến một số nguyên có các chữ số phù hợp, hy vọng sẽ tiếp tục chơi chương trình này. Những gì tôi nghĩ ra cho đến nay là `3879**41`
(chỉ mười byte, biểu thức duy nhất và do đó nhỏ nhất mà chương trình của tôi tìm thấy).
Tất nhiên, có nhiều cách diễn đạt khác nhau mà người ta có thể thử; Tôi chỉ may mắn khi có một mẫu trong mẫu a**b
có kết quả khá nhỏ phù hợp với nhu cầu của tôi.
Chỉ dành cho bất cứ ai tò mò 3879**41 = 1372495608710279938309112732193682350992788476725725221643007306215781514348937145528919415861895033279220952836384201346579163035594383625990271079 = 1.372... * 10**147
,.
Một hàm hợp lệ khác mà tôi đã tìm thấy trong khi tìm kiếm các biểu thức thay thế không may yêu cầu 32 byte: lambda S:`7**416`[len(S)%10+290]