Sie wurden für Ihr technisches Wissen als Kumpel eines Geheimagenten engagiert, um sicherzustellen, dass der Gute seine Arbeit erledigt und die Welt gerettet werden kann.
Dies ist Ihre letzte Mission, bevor Sie mit einem hohen Gehalt und der Dankbarkeit der ganzen Welt in den Ruhestand gehen. Aber bevor Sie die große, übermäßig massive BOMB des bösen Genies entschärfen müssen (scheint, dass das böse Genie ein kluger Arsch ist, der rekursive Akronyme mag). Wie auch immer, Sie und Ihr Kumpel befinden sich im Kern der geheimen Basis Evil Genius und sind bereit, die BOMB zu entschärfen, die den Kontinent auslöschen könnte. In Ihrer vorherigen Mission haben Sie den Unscharfschaltcode erhalten, der zu Ihrem Erstaunen nur "PASSWORD_01" lautet. Sie schließen Ihre Tastatur an die BOMB an, aber wenn Sie bereit sind zu gehen, treten die Schergen des bösen Genies mit einem Sperrfeuer von Kugeln ein. Leider wirkt sich eine dieser Kugeln auf Ihre Tastatur aus. "Beende den Job, während ich die Drecksköpfe ablenke!" sagt dein Kumpel und fängt dann an seine Waffe abzufeuern.
SPECS
- Schreiben Sie ein Programm, das die Zeichenfolge in beliebiger Weise
PASSWORD_01
(in Großbuchstaben) ausgibt . Da Ihre Tastatur von einer Kugel getroffen wurde, können Sie nur die folgenden Tasten verwenden:
1 2 3 4 5
Q W E R T
A S D F G
< > Z X C
Ctrl Shift Tab Space
Mit der ShiftTaste können Sie auf Ihrer Tastatur die folgenden Zeichen verwenden:
! " · $ %
Sie haben keine andere Hardware als die Tastatur und den Bildschirm (z. B. eine Maus) oder eine Datei mit dem auf Ihrem Computer gespeicherten Kennwort.
Sie haben keine Internetverbindung.
Sie können davon ausgehen, dass Sie die Interpreter-Shell / den Quellcode-Editor vor dem Eintreffen der Aufzählungszeichen geöffnet haben. Leider haben Sie nichts geschrieben, bevor die Tastatur gedrückt wurde.
Sie haben keine virtuelle Tastatur. Tatsächlich verfügt die BOMB über einen TOO_FUNNY-Detektor, der sie explodieren lässt, wenn Sie versuchen, die Standard-Lücken zu nutzen .
Da dein Kumpel darauf wartet, dass du bald fertig bist, um aus der Secret Base zu entkommen, musst du den kleinstmöglichen Code schreiben (also ist das Source- und Code-Golf beschränkt !).
Viel Glück, denn der Countdown hat begonnen!
HILFEMODUS: Auch eine KEY(nur eine Taste, die Sie von der Tastatur wollen, aber nicht die Umschalt + Taste oder eine andere Kombination) hat auf wundersame Weise überlebt. ZB: Sie können =oder 0oder /... verwenden. Bei diesem zusätzlichen Schlüssel darf es sich nicht um einen der eingegebenen Buchstaben handeln PASSWORD_01
(Sie können also nicht Poder hinzufügen O). Nennen Sie diesen Schlüssel in Ihrer Antwort. Sie haben eine Strafe von 10 Zeichen für die Verwendung dieses Schlüssels, unabhängig davon, wie oft Sie den Schlüssel verwenden.
quelle
stewardesses
?Antworten:
CJam - 24 + 10 ( () = 34
Kein zusätzlicher Schlüssel - 39
Versuchen Sie es unter http://cjam.aditsu.net/
quelle
Bash, Vim und DC (343)
Ich sitze an einer Bash-Eingabeaufforderung, die vom Evil Genius konfiguriert wurde, und er hat natürlich
VISUAL=vim
in der Standardumgebung. Die Verwendung der Standard-Bash-Bindung füredit-and-execute-command
(C-x C-e
) Bash ruft$VISUAL
den Pufferinhalt bei exit (ZZ
) auf und führt ihn aus . Ich tippe die folgende Sequenz ein (Hinweis: kbd-mode sind Befehle, die im normalen Modus und in Steuerungssequenzen ausgegeben werden):aKatze <<< 45 C-c4C-aaa
Jetzt enthält der vim-Puffer
cat<<<49a
. Auch weiterhin ...45 C-c3C-aaa
55 C-c13C-aaa
Jetzt enthält der vim-Puffer
cat<<<49a48a95a68a
. Auch weiterhin ...51 C-c31C-aaa
55 C-c25C-aaa> s
Jetzt enthält der vim-Puffer
cat<<<49a48a95a68a82a79a87a83a83a65a80a>s
Verlassen Sie den Einfügemodus, speichern und beenden Sie ihn
C-cZZ
Die
s
Datei enthält jetzt eindc
Skript, das die gewünschte Zeichenfolge auf dem Stapel generiert. Jetzt müssen wir Druckbefehle hinzufügen.C-xC-eadc <<< 55 C-c25C-aaa >> sC-cZZ
Wiederholen Sie den obigen Befehl 9 Mal.
C-xC-eadc <<< 55 C-c25C-aaa >> sC-cZZ
C-xC-eadc <<< 55 C-c25C-aaa >> sC-cZZ
C-xC-eadc <<< 55 C-c25C-aaa >> sC-cZZ
C-xC-eadc <<< 55 C-c25C-aaa >> sC-cZZ
C-xC-eadc <<< 55 C-c25C-aaa >> sC-cZZ
C-xC-eadc <<< 55 C-c25C-aaa >> sC-cZZ
C-xC-eadc <<< 55 C-c25C-aaa >> sC-cZZ
C-xC-eadc <<< 55 C-c25C-aaa >> sC-cZZ
C-xC-eadc <<< 55 C-c25C-aaa >> sC-cZZ
C-xC-eaKatze <<< f >> s
Führen Sie das DC-Skript aus:
C-xC-eadc sC-cZZ
Ausgabe:
Inhalt der
s
Datei:quelle
vim
wegen desCtrl
Charakters daran, ein Drehbuch zu schreiben . gutes Denken, um es mit zu verbindendc
! Auch ausgezeichnete Lösung :)<Leader>k
gebunden geschriebenmap <Leader>k i<kbd></kbd>^[F>a
, also war es nicht so schlimm wie es aussieht :-).Rubin, 57 + 10 (
*
) = 67Diese Antwort verwendet
*
und%
, um die ASCII-Werte der fehlenden Zeichen (und 0 als Fixnum) zu erstellen und sie in$*
(ARGV
) zu verschieben. Dieses Array wird dann in Kombination mit einer Formatzeichenfolge verwendet, um das richtige Kennwort zu generieren, das mit$><<
($>
ist stdout) gedruckt wird.Ruby, 62 + 10 (
.
) = 72, kein ZeilenumbruchIn etwa dasselbe Prinzip wie in der obigen Version, nur dass das Array hier aus einem leeren Array-Literal (
%w%%
) aufgebaut ist. Man muss ein wenig herumspielen.
, um die gewünschte Priorität für den Bediener zu erreichen.quelle
Leerzeichen (148 + 10 = 158)
Enter Schlüssel muss hier verwendet werden.
Die Erklärung meiner Notation:
S
,+
,0
Sind Räume.T
,1
Sind Laschen.L
ist neue Zeile.//
Startet Kommentar.Jede Zeile ist ein Befehl in Whitespace-Sprache.
Demo
quelle
L
Steht eigentlich für New Line Character. Überprüfen Sie die Demo für den realen Code. Was ich gepostet habe, ist eine lesbare Version.Python (
2200395 + 10)Ich brauchte den
+
Charakter (Kosten +10), der über den Nummernblock (oder auf bestimmten Tastaturlayouts) erhältlich ist.Ja, die Bombe ist wahrscheinlich hochgegangen, als ich das geschrieben habe.
Der grundlegende Ansatz besteht darin, mit
exec
und immer größere Zeichensätze zu erstellen"%c"%(number)
. Es sind vierexec
s ineinander verschachtelt. Allmählich steigt mein Ziffernsatz von aufso dass es in der letzten Iteration möglich ist, ein beliebiges Zeichen auszudrücken (so dass die innerste Version überhaupt ein beliebiges Programm ausführen kann).
Ungefähr 50% des Programms bestehen nur aus Anführungszeichen (
"%c"%34
ist ein doppeltes Anführungszeichen), da die verschachtelte Natur derexec
Anweisungen ein aggressives "Entweichen" von Anführungszeichen erfordert.quelle
exec '%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c'%(112,114,51+54,55+55,1+115,32,4+35,25+55,11+54,31+52,31+52,32+55,24+55,31+51,13+55,41+54,3+45,4+45,4+35)
Schlaflosigkeit
39353129Diese Sprache taucht auf, als ich mich nach einer Sprache umgesehen habe, die ihre Anweisungen mit einem einzelnen ASCII-Zeichen codiert. Die Sprache arbeitet tatsächlich mit dem dezimalen ASCII-Code des Zeichens, sodass die Hälfte der Tastatur zerstört ist.
Ziehen Sie es weiter auf 29 Zeichen herunter, was möglich ist, nachdem Sie den Speicherbedarf verringert und den Suchraum vergrößert haben:
Ich habe beschlossen, mein optimiertes Programm mit allen zulässigen Zeichen auszuführen und die Lösung auf 31 Zeichen zu reduzieren:
Ich habe ein Programm verwendet, um nach dieser Lösung zu suchen. Es ist eine von vielen von meinem Programm zurückgegebenen Lösungen, die alle dieselbe Größe haben.
Alte Version von Hand gebaut. Ich erinnere mich, dass ich bis zum Morgen wach war, um das zu tun.
Hier ist der Insomnia-Interpreter zum Testen.
quelle
Vim + PHP auf einigen Fenstermanagern
65 Tasten in 44 Schlägen, mit einer 10-Punkte-Strafe für die Verwendung =.
Ein Zusammenbruch:
aEACE<Alt+Tab>
: Rufen Sie den Append-Modus auf und fügen Sie "EACE" ein. Ausgang.z=5<Alt+Tab>
: Führen Sie eine Rechtschreibkorrektur durch. Wählen Sie 5, "FRIEDEN". Ausgang. ( Escscheint wie Enterhier zu funktionieren !)$xxxxaASSWRD<Alt+Tab>
: Gehen Sie zum Ende der Zeile. Löschen 4 Zeichen und fügen SieASSWRD
, was zuPASSWRD
. Zurück zum normalen Modus. (Nein,4x
geht nicht.)z=1<Alt+Tab>
:PASSWORD
wird wahrscheinlich die erste Korrektur dafür sein. Wählen Sie es aus.$a$aA<Alt+Tab>
: Gehen Sie zum Ende der Zeile und fügen Sie ein$aA
. Zurück zum normalen Modus.==
: Formatiere diese PHP-Zeile schön und ändere den camelCase$aA
auf$a_a
. Dies bewegt den Cursor auch zurück zum Zeilenanfang.wxx
: Gehen Sie ein Wort vorwärts; der cursor steht jetzt vor$
. Löschen Sie zwei Zeichen - das$
und dasa
- zu machenPASSWORD_a
.$r1
: Gehen Sie zum Ende der Zeile und ersetzen Sie das aktuelle Zeichen (dha
)1
durchPASSWORD_1
.^X
: Verringert die Ganzzahl unter dem Cursor, was zur Folge hatPASSWORD_0
.a1
: Endlich anhängen1
, fürPASSWORD_01
!quelle
==
Befehl nicht replizieren , es schaltet nur den Modus für große Einrückungen in meinem vi-Setup um (debian 7, v7.3.547)Python 2, 75889 Bytes
Kein extra Charakter!
Leider ist der Code super lang. Hier ist also der Code zum Generieren des Programms:
Probieren Sie es online aus
(Um den Code auszuführen, ändern Sie das äußere
print
in einexec
. Oder generieren Sie das Programm, fügen Sie es ein und führen Sie es aus. Oder kopieren Sie es aus dem Pastebin, das unten verlinkt ist.)Erläuterung:
Das Ziel ist es auszuführen:
Um die Verwendung von
()+
Zeichen zu vermeiden , müssen mehrere verkettete Zeichenfolgenformatoperationen verwendet werden. Dies bedeutet, dass jeder hinzugefügte Schritt effektiv die Anzahl der Zeichen verdoppelt, die%
für jeden vorherigen Schritt benötigt werden:Dies reicht jedoch nicht aus, da einige der erforderlichen Nummern nicht erstellt werden können und wir auch nicht erstellen können
print
. Wir fügen also eine Abstraktionsebene mitexec
forprint
ing und eine Ebene für die ASCII-Codepunkte hinzu, mit denen wir keine Formatierung erstellen können. Das Folgende ist im Wesentlichen meine Antwort, wobei jedoch jede Zeichenfolge%
auf eine einzige reduziert wird (beachten Sie, dass%s%s%s%s%s
es sich nicht um eine genaue Darstellung handelt, da%
die vor jeder Zeichenfolge erforderlichen Literalen nicht berücksichtigt werden):Der erste Schritt: Äußerste
exec
:1>>1
:0
, verwendet für die0
inPASSWORD_01
2531>>5
:79
, wird verwendet, damit die innere Exekutive erstelltO
321>>2
:80
, wird verwendet, damit die innere Exekutive erstelltP
1521>>4
:95
, wird verwendet, damit die innere Exekutive erstellt_
211>>1
:105
, wird verwendet, damit die innere Exekutive erstellti
221>>1
:110
, wird verwendet, damit die innere Exekutive erstelltn
Zweiter Schritt: Inneres vorbereiten
exec
Nach dem oben Gesagten
exec
ist das Innere ungefähr so:Abgesehen davon, dass Sie das nicht ganz verstehen würden. Trotz der Vereinfachungen erhalten Sie Folgendes:
Das wörtliche
%
Wort muss enthalten sein. Also im Grunde hatte ich vor jedem ein paar von ihnen fügen%s
mit wörtlichen am Ende%
ist links nach all der Formatierung.2**11
von ihnen. Mal fünf.Der Rest der
exec
Formatierungsoperationen für die äußere Zeichenfolge lautet%112%34%34%34%34
. Das112
ist fürp
und die anderen sind Anführungszeichen. Nach dem Anwenden ist das Ergebnis ungefähr so:Aber in Wirklichkeit hat es ein paar mehr
%
. Es ist das:Der letzte Schritt besteht darin, das einfach auszuführen, woraufhin Sie die erforderliche Ausgabe erhalten.
Vollständiger Code hier: http://pastebin.com/rSFs6DiH
quelle
bash + vim (56)
Den Ctrl-XCtrl-EBash-Trick von Thors Lösung auszuleihen, ist wie folgt:
C-XC-E Startet den Standardeditor (normalerweise vim)
a Startet den Einfügemodus
.space ASSW
C-Vx4f Einsätze
O
RD
C-Vx5f Einsätze
_
1
C-3entspricht escape(nicht nur in vim, sondern überall in einem Terminal)
C-Xsubtrahiert 1 von dem, was
1
ich gerade eingegeben habea Einfügemodus erneut
1 C-3
Pufferinhalt ist jetzt
. ASSWORD_01
<< Zeile rückgängig machen (keine Operation, da die Zeile nicht eingerückt ist) und den Cursor in die erste Spalte bewegen
a
C-X Starten Sie die Wortvervollständigung
C-V komplett mit ex befehl
C-V 9 weitere Male wählt den Eintrag
Print
C-3 Zurück zum normalen Modus
XXXxx löscht
rint
< < zurück zu Spalte 1
sLöschen
.
, Einfügemodus startene c C-X C-Vex befehl vervollständigung nochmal, eintrag
echo
schon ausgewählt wegen derec
ich gerade getippt habespace C-3 Inhalt jetzt puffern
echo PASSWORD_01
Z Z Puffer speichern, vim schließen, bash führt den Dateiinhalt aus, dh
echo PASSWORD_01
Übrigens: C-3hat viele nützliche Brüder: C-Jist Enter, C-Iist Tab, C-Hist Backspace, C-2ist C-@(dh ein Null-Byte). Und für Emacs-Benutzer ist es schön zu wissen, dass Escapeein weiterer Schlüssel Alt+ diesem Schlüssel entspricht. Also, auch ohne Escapeund AltSie können immer noch Meta-x wie folgt eingeben:C-3x
quelle
Perl, (31 + 10/41 + 10/64 + 10)
( ^Schlüssel verwendet, 3 Möglichkeiten)
print
anstelle von verwendetdie
Die Skripte verwenden den bitweisen String-XOR-Operator von Perl
^
, der ein XOR für die Zeichenbits der beiden Strings ausführt. Auf diese Weise kann ich die fehlenden Zeichen für PASSWORD_01 neu erstellen und die Zeichen für den Systembefehl erstellen.Ich habe die drei Varianten gemacht, je nachdem, wie mild die Regeln sind. Ich gehe davon aus, dass die Lösungen gültig sind, da die Varianten 2 und 3 die Wörter auf Ideone tatsächlich ausgeben. Ich habe die kleine Geschichte, die ich hier hatte, entfernt, da ich dachte, niemand würde sie lesen, aber Sie können sie in den Änderungen lesen, wenn Sie neugierig sind!
quelle
oOo-Code (300)
Einfach. (Zeilenumbrüche sind optional und dienen nur dazu, den Code "lesbarer" zu machen.) Verwendeter Codegenerator:
Derselbe Code in einer weniger albernen Codierung:
quelle
ferNANDo, 179 + 10 = 189 Bytes
Probieren Sie es online!
Enterbenutzt. Ich würde
0
und verwenden1
, um den Code lesbarer zu machen, aber ich kann nicht verwenden0
.quelle
JS-Forth, 103 Bytes
Die Zeichenfolge wird als Array von Zeichen auf dem Stapel zurückgegeben.
Probieren Sie es online aus - Kommentierte Version
Erläuterung:
Ich habe zuerst die Liste der erlaubten Wörter gefunden . Grundsätzlich sind die einzigen nützlichen Dinge, die ich verwenden könnte:
12345
Numerische Konstanten<<
Nach links verschieben>>
Nach rechts verschiebens>f
Einfach drücken, um den Stapel zu bewegenf>d
Pop Double vom Float Stackfsqrt
Quadratwurzel auf SchwimmerstapelIch könnte also numerische Konstanten, Bitverschiebung und eine Quadratwurzel folgendermaßen berechnen (
>>
Ersetztdrop
, Verschieben um0
, um das zu entfernen0
):Glücklicherweise fand ich für jede Konstante, die ich erstellen musste, mögliche Bitverschiebungen, die kürzer waren als Quadratwurzeln. Zum größten Teil suchte ich, indem ich einfach jede Zahl im Quadrat oder eine größere Zweierpotenz druckte, wenn eine davon eine Ziffer enthielt
6-0
. Dann wurde mir klar, dass ich den Präzisionsverlust nutzen könntef>d
, um mehr Möglichkeiten zu finden. (Ich könnte die Zahl ergänzen, bekomme aber immer noch die gleiche ganzzahlige Quadratwurzel.) Etwas später begann ich mit der Bitverschiebung, um einige und dann alle Konstanten zu finden. Je größer die>>
Bitverschiebung, desto mehr konnte ich zur "magischen Zahl" hinzufügen und trotzdem das gleiche Ergebnis erzielen. Also fand ich die kleinsten Bitverschiebungen, die ich verwenden konnte, um die erforderlichen Ergebnisse zu erzielen. Sogar Zahlen konnten manchmal nutzen<<
, Gewinnchancen mussten genutzt werden>>
.Kommentierter Code (
\
startet einen Kommentar):gForth hat die Wörter
<<
oder nicht>>
. Stattdessen hat eslshift
undrshift
, was ich nicht nutzen konnte .quelle
Decimal ,
190180 + 10 = 190 BytesProbieren Sie es online! Dezimal ist eine esoterische Sprache, die nur Dezimalzahlen und den Buchstaben verwendet
D
. Allerdings brauchte ich die +10 Strafe, da fast jeder Befehl verwendet0
.Glücklicherweise
PASSWORD_01
erfordern alle Befehle, die zum Drucken benötigt werden, keine Nummern über6
:12...D
- Drücke einen Charakter2
- Geben Sie einen Wert ein41D
- Pop zwei Stack-Werte, multiplizieren und Push-Ergebnis301
- DSI drucken (Standard-Stack-Index)Durch wiederholtes Drücken und Hinzufügen von Zeichenwerten, die nur die Ziffern 1 bis 5 enthalten, kann ich die Zeichenwerte für jeden Buchstaben eingeben
PASSWORD_01
.Ungolfed und kommentiert:
quelle
Whitespace , Punktzahl: 111 (101 Bytes + 10 für Enter)
Buchstaben
S
(Leerzeichen),T
(Tabulator) und (Zeilenvorschub) werdenN
nur als Hervorhebungen hinzugefügt.[..._some_action]
nur als Erklärung hinzugefügt.Probieren Sie es online aus (nur mit Leerzeichen, Tabulatoren und Zeilenumbrüchen).
Erklärung im Pseudocode:
Diese Lösung ist kürzer als die vorhandene Whitespace-Antwort ( @ n̴̖̋h̴̖̋ã̷͉h̷̭̿d̸̡̅ẗ̵̨́ hat mich gebeten, sie als separate Antwort zu veröffentlichen, als ich sie als Golf vorgeschlagen habe), indem ich meinen Whitespace-Tipp verwende .
Die Konstante
80
wurde mit diesem Java-Programm generiert , das ich für einige meiner früheren Whitespace-Antworten erstellt und verwendet habe.quelle
Stax , 91 + 10 Bytes
Probieren Sie es online!
Verwendet ]Singletons zu machen.
Erläuterung
Mal sehen, wie
"P"
das erzeugt und wie"ASSW"
es angehängt wird, ohne das Übliche zu verwenden+
.Der Rest wiederholt nur den gleichen Trick.
"a"EEE$"$"a$Re]R
Tauscht die Ziffern von"a"
oder aus[97]
, um[79]
oder zu"O"
erstellen , und hängt sie an die Zeichenfolge an."$""RD"R appends "RD"
."$""a"EEEd$"$""5"Re]R
verwendet"a"
erneut, um das zu erhalten"9"
und zu verwerfen"7"
, kombiniert dann das"9"
mit einem Literal"5"
, um[95]
oder zu bilden"_"
, und hängt es an die Zeichenfolge an."$"1 !$R
Erhält eine Null durch logisches Nicht von 1 und hängt sie an die Zeichenfolge an."$""1"R
hängt das Finale an"1"
und wir sind fertig.Implizite Ausgabe.
quelle
Brainfuck , 400 + 10 (
+
) = 410 BytesProbieren Sie es online!
quelle
MS-DOS .COM 8086-Computercode (72 Byte)
Zeit ist kostbar, also keine Zeit, sich mit Compilern oder Dolmetschern zu beschäftigen! Öffnen Sie einfach den gewünschten Texteditor und geben Sie Folgendes ein (durch
\t
TAB ersetzen ):Als Hexdump:
Speichern Sie die Datei als .COM-Datei und führen Sie sie aus, um den Tag zu speichern.
Der Code setzt bestimmte Startwerte für Register voraus und funktioniert daher möglicherweise nicht für alle DOS-Versionen. Ich hoffe nur, dass jemand das Risiko eingeht, gefeuert zu werden, wenn er nicht IBM kauft.
Etwas verständlichere Darstellung:
quelle
Befunge-98, 43 + 10 = 53 Bytes
Probieren Sie es online!
Die 10-Byte-Strafe gilt für die Verwendung des
,
Schlüssels (nicht sicher, warum dies nicht mit Shift+ erreicht werden konnte <, aber das scheint die Regel zu sein). Und obwohl die Quelle technisch gesehen 40 Zeichen umfasst, tragen die drei·
Zeichen aufgrund ihrer UTF-8-Codierung drei zusätzliche Bytes bei.quelle
05AB1E ,
8786 BytesProbieren Sie es online!
Vielleicht der längste 05AB1E-Code aller Zeiten?Leider unterstützt die Sprache keine Dinge wie
"Q"<
"Q dekrementieren, um P zu bekommen"Mein extra Schlüssel ist der V.
Vielen Dank an @ Kevin Cruijssen für -1 Byte.
Code:
Zum Vergleich: Der kürzeste Weg zum Drucken von "PASSWORD_01" ist 6 Byte lang
Probieren Sie es online!
quelle
TR
anstelle von1<1
für den01
Teil der Ausgabe.Emacs, 26 Bytes (möglicherweise + 10 = 36 oder - 2 = 24)
Der zusätzliche Schlüssel, der in dieser Antwort benötigt wird, ist Esc. Dies ist die Hälfte der Tastatur, die noch intakt ist, aber aus irgendeinem Grund nicht in der Frage erwähnt wird. Sie kann also eine Strafe für die Partitur auslösen oder auch nicht. ( Escund Altsind in Emacs gleichwertig; Altbefindet sich ebenfalls auf der intakten Tastaturhälfte, wird aber in der Frage nicht erwähnt, sondern muss gehalten und nicht getippt werden, damit ich ihn nicht als zusätzlichen Schlüssel verwenden kann. Es würden zwei Bytes gespart Allerdings, weil es eine kürzere Kodierung hat als Esc.)
Das Programm selbst (die Kommas begrenzen die Grenzen zwischen den Bytes im On-the-Wire-Format, mit dem Emacs seine Eingaben akzeptiert):
Codierung als Rohbyte, um die Anzahl der Bytes zu beweisen:
(Hinweis: Einige Details können je nach Konfiguration von Emacs variieren. Für diese Antwort muss der Anführungszeichen-Radix auf 16 gesetzt sein und für Emacs muss das Rechtschreibwörterbuch verwendet werden, das auf meinem britischen Englisch-System standardmäßig eingestellt ist. Beide scheinen zu sein Dies entspricht den üblichen Konfigurationseinstellungen, es ist jedoch möglich, dass Ihre Emacs-Kopie anders konfiguriert ist. Ein anderes Wörterbuch würde wahrscheinlich noch ein 26-Byte-Programm ergeben, aber möglicherweise müssen leicht unterschiedliche Rechtschreibfehler verwendet werden, damit die von uns gewünschten Korrekturen akzeptiert werden Schlüssel ohne Kugel.)
Erläuterung
Ich bin mir nicht sicher, ob es irgendeinen Einfluss auf die Herausgeberkriege haben sollte, aber Emacs scheint zumindest bei dieser Frage vim zu schlagen. Emacs eignet sich sehr gut für das Editieren von in Bytes gemessenem Golf, da es stark von Akkorden abhängt, die mehrere Tastendrücke, aber nur ein einziges Byte benötigen (daher ist ein Emacs-Programm oft langsamer zu tippen als das entsprechende Vim-Programm, aber kürzer auf der Festplatte). Außerdem befinden sich die meisten der wichtigsten Emacs-Befehle in der linken unteren Ecke der Tastatur Ctrl.
"Sie können davon ausgehen, dass Sie die Interpreter-Shell / den Quellcode-Editor vor dem Eintreffen der Aufzählungszeichen geöffnet haben. Leider haben Sie nichts geschrieben, bevor die Tastatur gedrückt wurde." Ich gehe also davon aus, dass in Emacs und Emacs eine leere Datei geöffnet ist müssen das Passwort eingeben. (Wir müssten die Datei danach speichern und Emacs wahrscheinlich beenden, aber die Bytes dafür werden nicht in den Antworten anderer Leute gezählt, daher zähle ich sie auch hier nicht. Es ist absolut machbar, wenn man die linke Seite von verwendet Tastatur, obwohl, Ctrl- X, Ctrl- S, Ctrl- X, Ctrl- C.)
Nehmen Sie jeweils einen Befehl (oder einen Block ähnlicher Befehle):
WS
In das Dokument eingeben .WS
ist kein richtiges Wort, findet aber viele ähnliche Wörter mit zwei Buchstaben.WS
zu korrigierenPS
. (Wenn die Rechtschreibprüfung wie hier mit Alt- aufgerufen wird $( Escund AltEmacs entspricht), wird nur ein Wort überprüft und danach deaktiviert.)A
, gebenPSA
.PAS
.SRWD
, gebenPASSRWD
.PASSRWD
inPASSWORD
. Beachten Sie, dass wir nicht das Wort erraten können, das wir bei unserem ersten Versuch wollen, wie es bei dem ersten Versuch der Fall wärePASSWRD
, da der Schlüssel zum Akzeptieren des nächsten echten Wortes der ist, 0den wir nicht drücken können. Infolgedessen wird die etwas extremere RechtschreibfehlerPASSRWD
verwendet, um das gewünschte Wort auf Position 5 zu verschieben, wo wir es akzeptieren können._
. Das Dokument liest jetztPASSWORD_
(oder wird, wenn wir mit der Eingabe des nächsten Befehls beginnen; vorher wird der Unterstrich nicht angezeigt, falls wir eine andere Hex-Ziffer eingeben).10
.PASSWORD_10
.PASSWORD_01
, wie die Frage fragt.Wenn wir es verwenden dürfen Alt, können wir den Befehl "Rechtschreibprüfung aufrufen" wahrscheinlich als einzelnes Byte codieren,
a4
anstatt es als zu buchstabieren1b
24
. es erscheint zweimal, so dass sich zwei Bytes Einsparung ergeben. (Die meisten modernen Terminals verwenden1b
24
die Codierung für Alt- $, um Konflikte mit UTF-8 zu vermeiden. Diea4
Codierung wird jedoch auch von Zeit zu Zeit angetroffen und ist manchmal als Konfigurationsoption verfügbar.)Mögliche Einsparungen bei den Bytes sind wahrscheinlich mit Schreibfehlern bei der Korrektur verbunden.
PSASWRD
wäre ein Byte kürzer zu tippen, aber leider scheint die Rechtschreibprüfung nicht dazu in der Lage zu sein, diesPASSWORD
herauszufinden. DiesPASSRWD
ist der beste Ansatz, den ich bisher gefunden habe. Der auf Registern basierende Ansatz des Gewinnens10
ist ebenfalls lächerlich unhandlich, aber es gibt in Emacs nicht viele Möglichkeiten, Zahlen aus dem Nichts zu erstellen, und es0
ist eine schmerzhafte Angelegenheit, etwas anderes in die Hand zu nehmen. (Zumindest gab es ein paar erstaunlich nützliche Zufälle: Der Cursor landete zufällig an der Position10
, die0
bei Bedarf ein a enthält , und die Tatsache, dass Emacs die redundanteg
Registeroperation akzeptiert , um den Inhalt eines Registers in das Dokument einzufügen , zusätzlich zu den intuitivereni
.)quelle