Ich habe einhundert Gewölbe, jedes in einem anderen. Jeder Tresor hat ein Passwort, das aus einer einzelnen Nummer besteht.
95 43 81 89 56 89 57 67 7 45 34 34 78 88 14 40 81 23 26 78 46 8 96 11 28 3 74 6 23 89 54 37 6 99 45 1 45 87 80 12 92 20 49 72 9 92 15 76 13 3 5 32 96 87 38 87 31 10 34 8 57 73 59 33 72 95 80 84 11 4 11 11 37 71 77 91 49 21 52 48 43 11 77 52 64 3 9 21 38 65 69 84 96 78 7 71 80 78 3 97
Es ist zu schwierig, sich all diese Passwörter zu merken, und es ist nicht sicher, die Passwörter auf einem Blatt Papier zu verwahren. Die einzige Lösung, die ich mir vorstellen kann, ist die Verwendung eines Programms mit genau einhundert Zeichen. Das Passwort für den n
Tresor wird gefunden, indem die ersten n
Zeichen des Codes als Programm behandelt werden.
Daher muss das erste Zeichen des Programms ausgegeben werden, wenn es als eigenständiges Programm ausgeführt wird 95
. Die ersten beiden Zeichen müssen einzeln ausgegeben werden 43
. Das gesamte Programm muss ausgegeben werden 97
.
Ich gebe zu, dass das wirklich schwer ist. Also gib einfach dein Bestes. Versuchen Sie, Ihr Programm für so viele Tresore wie möglich zu verwenden , und ich werde mir die Passwörter für den Rest merken.
Regeln
- Bei Stimmengleichheit ist der Gewinner die früheste Einsendung.
- Standardlücken verboten. Dazu gehört das Lesen aus anderen Dateien oder aus dem Internet.
- Sie haben ein paar Möglichkeiten für den Code:
- Ein vollständiges Programm, das die richtige Nummer ausgibt
- Eine Funktion, die es zurückgibt oder druckt
- Ein Ausdruck, der es wertet (zB in C,
4+3
wertet es aus7
)
- Sie können eine REPL-Umgebung annehmen
- Sie können für jeden Wert von unterschiedliche Techniken anwenden
n
. Beispielsweise können Sie für jede Sprache eine andere Sprachen
oder manchmal ein vollständiges Programm und manchmal eine Funktion verwenden.
Hinweis: Dieses Szenario ist vollständig fiktiv. Wenn Sie ein ähnliches Problem haben, veröffentlichen Sie Ihre Passwörter nicht online.
The only solution I can think of is to use a program with exactly one hundred characters.
Bedeutet das, dass jedes Programm genau 100 Zeichen haben muss?Antworten:
> <> (Fisch), 95
Beginnen nach dem
'
legt alle Zeichen auf den Stapel und am Ende der Zeile umläuft es; schließt die Zeichenkette mit demselben'
; gibt die Spitze des Stapels als Zahl (n
) aus und beendet die Ausführung (;
).Die Zeichen für 13 und 10 wurden in Leerzeichen geändert, um das Layout des Codes nicht zu beeinträchtigen (da Fisch eine 2D-Sprache ist).
Einige nicht druckbare ASCII-Zeichen verschwinden in der Antwort. Richtiges Programm hier.
Vielen Dank für Martin Büttner und Sp3000 für Verbesserungen von 2 und 5 Bytes.
Hex-Dump:
quelle
'
zum Parsen von Strings nötig ist"
, und es gibt mehrere"
s im Programm, die ersetzt werden./fish.py <(head -c 99 raw.php)
demraw.php
der Namen ist , dass irgendwie auf der Quelldatei landet ich heruntergeladen. Ordentlich! Ich kann noch nicht sagen, dass ich es verstehe ...CJam, 40
Ich habe gerade einen gierigen Ansatz gewählt (meistens), um die nächstmögliche Zahl auszudrucken (Carets markieren das korrekte Programmende):
Die folgenden Zahlen werden korrekt gedruckt:
Teste es hier.
quelle
CJam, 56
Hier ist ein etwas ausführlicherer Ansatz. Es gibt die letzten 56 Zahlen korrekt aus:
Wahrscheinlich hat SE einige Charaktere verschluckt, also hier ist ein Pastebin . Sie können den Code hier ausprobieren .
Es wird die Tatsache ausgenutzt, dass die Abfrage nach den Programmen in Zeichen fragt. Daher verwende ich Unicode-Zeichen, um die letzten 56 Zeichen in einer Funktion zu codieren, die dann das richtige Element auf dem Stapel belässt, indem sie bei jedem Aufruf eine Variable inkrementiert und das entsprechende Element auswählen. Der Rest des Codes ruft die Funktion nur wiederholt auf.
Das erste richtige Programm endet am zweiten
F
im Code. Ich habe eine Weile mit der Länge der zu codierenden Zeichen herumgespielt, bis ich die richtige Balance gefunden habe, um so viel wie möglich zu nutzen. Ein oder zwei weitere könnten mit diesem Ansatz möglich sein.quelle
Pyth,
92,93Der obige Code wird offensichtlich durcheinander gebracht, da SE Steuerzeichen entfernt. Den eigentlichen Code finden Sie hier
Die Logik ist einfach, die Zeichenfolge ist die Zeichendarstellung jeder Zahl, mit Ausnahme der ersten 3, die von der Konvertierungslogik verwendet werden, und einiger Anführungszeichen und Zeilenumbrüche, die ich durch Dummy-Zeichen ersetzt habe.
Ich werde versuchen, die Punktzahl hier zu erhöhen.
Probieren Sie es hier online aus
quelle
(Jahrgang) C - 88
Keine Notwendigkeit für all diese albernen, engagierten Golfsprachen. Geht lieber zurück in die guten alten Zeiten, bevor die Quiche-Esser und ihr "Programm = Algorithmus + Daten" -Nonsens den ganzen Spaß ruiniert haben.
Der Code ist eine C-Funktion, die als Zeichenfolge gespeichert wird.
Es gibt den Binärwert als Ganzzahl zurück.
Führen Sie es in DosBox mit Borland Turbo C 2.0 aus.
Die Zeichenfolge enthält keine Steuerzeichen, daher sollte das Kopieren und Einfügen funktionieren.
Kompilieren mit
tiny
Speichermodell oder sonst ...Wenn Sie den Anfang der Zeichenfolge zerlegen, sehen Sie etwa Folgendes:
da
si
es als Funktionsadresse verwendet wird, zeigt es direkt auf den Code, gefolgt von den Passwörtern.Alle Werte werden um 35 verschoben, um Steuerzeichen und doppelte Anführungszeichen zu vermeiden.
Der Code ist 11 Byte lang und kann bis zu 12 Zeichen lang sein.
Leider ist der 11. Wert (34) zu niedrig, um ein gültiges Passwort mit einem erhöhten Verschiebungswert zu erzeugen (der
ret
Opcode ist 195, Sie würden also eine Verschiebung von 161 benötigen, und die maximale Verschiebung zur Vermeidung eines Überschlags beträgt 255-99 = 156). .11 Zeichen führen zu einem falschen Wert, und auf Ihrem virtuellen PC tritt ein schweres (und normalerweise tödliches) undefiniertes Verhalten mit 10 Zeichen oder weniger auf.
quelle
Matlab
3739Sie können einen Teil (ohne Semikolon) dieser Idee mit einer beliebigen Programmiersprache verwenden, die die Ergebnisse direkt auf der Konsole ausgibt. Dies ergibt mindestens das 39-fache der richtigen Antworten. (Ich habe nicht diejenigen überprüft, bei denen nur eine halbe Zahl eine korrekte Antwort geben könnte, aber ich habe bisher zwei gefunden.)
quelle
code="43+13+11-33+54;81;78;8+20;74+15-83;01+79-59-12+6-2;;87+0-53+39;72;;11+00+66-56+22;52;3*7+48;78-7+7+0"; key="95 43 81 89 56 89 57 67 7 45 34 34 78 88 14 40 81 23 26 78 46 8 96 11 28 3 74 6 23 89 54 37 6 99 45 1 45 87 80 12 92 20 49 72 9 92 15 76 13 3 5 32 96 87 38 87 31 10 34 8 57 73 59 33 72 95 80 84 11 4 11 11 37 71 77 91 49 21 52 48 43 11 77 52 64 3 9 21 38 65 69 84 96 78 7 71 80 78 3 97".split(" "); res=0; for(q=0; q<100; ++q) try{ if(eval(code.substr(0,q+1))==key[q]) console.log(++res,q+1,key[q]) } catch(e) {}
- Es zeigt nur 28 Spiele‌​
nach00+
012345679+-*;
Außerhalb der Konkurrenz: Javascript, 173
Hier ist eine "Lösung", die den Regeln nicht in dem Sinne folgt, dass sie ein Programm enthält, das viel länger als erforderlich ist, aber bei einer Basislänge von 152 Zeichen
95
bis zu 22 ausgibt und für jedes nachfolgende hinzugefügte numerische Zeichen wird ein zusätzliches Passwort angezeigt:Leider funktioniert es nur mit bis zu 22 Zeichen (zumindest im Knoten REPL scheint irgendetwas darüber außer Acht gelassen zu werden), was meiner Meinung nach eine Einschränkung der Zahlendarstellung in der Sprache darstellt. Wenn diese Einschränkung nicht gegeben wäre, verwenden Sie die vollständige Kennwortzeichenfolge von
(die Gesamtlänge auf 329 Zeichen bringen) würde es dieser Logik erlauben, jedes Passwort auszugeben.
Der Code ist nicht besonders schlau, er spart nur ein paar Zeichen im Vergleich zu den einfachsten Lösungen.
Meistens war ich nur daran interessiert, ein Javascript-Programm zu schreiben, das mit unterschiedlicher Länge gültig ist, da die Sprache für das Golfen im Allgemeinen nicht allzu gut geeignet ist.
Ich bin neu in Codegolf, ich entschuldige mich, wenn das Posten solch eindeutig ungültiger Lösungen missbilligt wird.
quelle
Python 2, 39
Ich habe ein Skript geschrieben, das viele Kombinationen von Ausdrücken ausprobiert und sie mit den sicheren Kombinationen vergleicht. Das Beste, was ich schaffen konnte, waren 39 Spiele. Ich war überrascht, wie viele Kombinationen zu einer Punktzahl von 39 führten. Ich habe eine Stichprobe in meine Antwort aufgenommen.
Ich habe versucht, die logischen
^&|
Operatoren einzuschließen , aber die Vorrangregeln wurden kompliziert.quelle
DEBUG.COM, 93
Verwendung:
und das Ergebnis erscheint in
AL
quelle