Python 2 , 38 30 28 Bytes
lambda S:`6793**164`[len(S)]
Probieren Sie es online!
Leider noch ein Byte länger als die bisher beste Python 2-Antwort; wenn auch nicht mit dem enklact
-Ansatz.
Jetzt ein Byte kürzer als die Antwort von i cri everytim !
Wie funktioniert es?
Nach viel roher Gewalt habe ich einen Ausdruck gefunden, der eine Zahl ergibt, die genau die richtigen Ziffern hat.
Ich bemerkte, dass das Betrachten nur einer bestimmten Ziffer der angegebenen Zeichenkettenlänge 3 Bytes ( %10
) erforderte . Deshalb habe ich ein anderes Python-Programm ( Pastebin-Link ) geschrieben, um weiter nach Zahlen zu suchen, die die Längen der Eingabezeichenfolgen direkt auf den Wochentag abbilden.
Die magische Zahl sieht folgendermaßen aus: 6793**164 = 28714733692312345620167113260575862840674216760386883406587492336415023761043044176257567032312859371641211117824224067391750766520256112063756278010050204239810862527958109285342869876264808102743173594017101607983288521836082497514383184553444755034407847810524083812459571382103831904835921560285915349760536969265992879312869538914200854305957428078269094250817029486005437991820466986793657301214564264748923199288698278615871481529585816783654841131577178922192383679718074693535597651237893794976519274268917335387876260270630339777501802739852278932279775510324916969726203688466311848240746465178859847331248655567344801
(eine Zahl mit beeindruckenden 629 Dezimalstellen)
Und wie Sie sehen können, liefert die Zahl die notwendige Zuordnung von [28, 20, 13, 11, 4, 16, 17] zu [0, 1, 2, 3, 4, 5, 6] (Python-Strings sind 0- indexiert):
2871 4 733692 3 1 2 34 5 6 20 1 6711326 0 5758628406742167603868834...
[4]^ [11]^ [13]^ [16]^ ^[17] ^[20] ^[28]
Mein Programm auch andere Ausdrücke gefunden , die Zahlen mit der erforderlichen Eigenschaft ergeben, obwohl sie nehmen mehr Bytes zu repräsentieren (29 statt 28): 19439**540
, 34052**726
, 39311**604
, 44873**182
, 67930**164
und 78579**469
. (Dies sind alle Ausdrücke, die vom verknüpften Programm gefunden wurden. Die Ausführung dauerte mehrere Stunden.)
Alternative Funktion, die 28 Bytes benötigt: lambda S:`7954<<850`[len(S)]
Alternative Funktion, die 29 Bytes benötigt: lambda S:`9699<<2291`[len(S)]
Alternative Funktion, die 30 Bytes benötigt: lambda S:`853<<4390`[len(S)+9]
Alternative Funktion, die 31 Bytes benötigt:lambda S:`1052<<3330`[len(S)+8]
Wie funktioniert es? Wie habe ich diese Nummer generiert? (30-Byte-Antwort)
Die 30-Byte-Antwort lautete lambda S:`3879**41`[len(S)%10]
.
Als [28, 20, 13, 11, 4, 16, 17]
ich die Länge der Eingabezeichenfolge betrachtete , bemerkte ich, dass sich alle letzten Ziffern in der Basis 10 unterscheiden, was zu der Liste führte [8, 0, 3, 1, 4, 6, 7]
. Ich brauchte also nur eine Zuordnung von dieser Liste zu der Liste aller sieben Tage der Woche [0, 1, 2, 3, 4, 5, 6]
.
Mein erster Ansatz verwendete einfach eine Zeichenfolge, um das Mapping durchzuführen: lambda S:"13*24*560"[len(S)%10]
obwohl die Zeichenfolge elf Bytes ( "13*24*560"
) benötigte.
Also schrieb ich ein Python-Programm ( Pastebin-Link ), um auf arithmetische Ausdrücke zu testen, die eine ganze Zahl mit übereinstimmenden Ziffern ergeben, in der Hoffnung, das Programm weiter zu verbessern. Was mir bisher eingefallen ist `3879**41`
(nur zehn Bytes, der einzige und damit kleinste Ausdruck, den mein Programm findet).
Natürlich gibt es viele verschiedene mögliche Ausdrücke, die man ausprobieren könnte; Ich hatte nur das Glück, dass es einen in der Form gab, dessen a**b
Ergebnis einigermaßen klein war und meinen Anforderungen entsprach.
Nur für Neugierige 3879**41 = 1372495608710279938309112732193682350992788476725725221643007306215781514348937145528919415861895033279220952836384201346579163035594383625990271079 = 1.372... * 10**147
.
Eine weitere gültige Funktion, die ich bei der Suche nach alternativen Ausdrücken gefunden habe, für die leider 32 Bytes erforderlich sind: lambda S:`7**416`[len(S)%10+290]