Vim: 231 Schlüsselbefehle
Beachten Sie, dass jedes ^ vor einem Zeichen bedeutet, dass Sie die Kontrolle behalten sollten, während Sie dieses Zeichen eingeben
mbomayiwo^V^R"^V^V^V^X ^V^["sy0dd`a@f ^["bc0yiwo^V^V^V^X^V^R"^V^[0l@sa^V^V^V^A-^V^[0f-"ayhdd`a@i ^["dc0mbyiwo^V^R"Exe@b^V^[0fel"ty2ldd`b@t ^["ec0wmbyiwo@f @d^V^[@z ^["fc0"xyiwwmbyiwocw^V^V^V^Rx^V^V^V^[@a@i @e^V^[@z ^["ic0IB0 B^V^R" ^V^OWB0 ^V^OA B0^V^[0*w"tyiWdd`b@t ^["zd0dd`bAe^[0@e
Schritte, damit Sie dies auch ausführen können!
- Kopieren Sie die Zeile in Vim
- Tippen Sie ein
:s/\^V/<Ctrl-V><Ctrl-V>/g
und drücken Sie die Eingabetaste (die beiden s sollten ein blaues ^ V ergeben)
- Tippen Sie ein
:s/\^R/<Ctrl-V><Ctrl-R>/g
und drücken Sie die Eingabetaste (Sie sollten jetzt blau ^ Rs sehen)
- Tippen Sie ein
:s/\^X/<Ctrl-V><Ctrl-X>/g
und drücken Sie die Eingabetaste (Sie sollten jetzt ein blaues ^ X sehen)
- Geben Sie ein
:s/\^O/<Ctrl-V><Ctrl-O>/g
und drücken Sie die Eingabetaste
- Geben Sie ein
:s/\^A/<Ctrl-V><Ctrl-A>/g
und drücken Sie die Eingabetaste
- Geben Sie ein
:s/\^\[/<Ctrl-V><Ctrl-[>/g
und drücken Sie die Eingabetaste (dieser Befehl ist etwas anders, weil ich das [entkommen musste)
- Typ
0"yy$
. Der Befehl ist jetzt im y-Register gespeichert
- Richten Sie die Eingabe in einer Zeile ein und führen Sie sie mit aus
@y
Wenn jemand eine bessere Möglichkeit zum Teilen des Befehls kennt, lassen Sie es mich bitte wissen. Ich weiß, das ist langwierig, aber es ist das Beste, was ich mir vorstellen kann.
Input-Output
Die Eingabezeichenfolge sollte in jeder Zeile der Datei einzeln stehen. 1 0 0 4 3 0 0 0 7
Die Ausgabe überschreibt einfach die Eingabezeichenfolge 1 2 3 4 3 4 5 6 7
Erläuterung
Algorithmus
- Beginnen Sie mit einer Zahl ungleich Null und vergewissern Sie sich, dass es nicht die letzte Zahl ist
- Suchen Sie die nächste Zahl ungleich Null
- Nimm ihren Unterschied. Wenn die Antwort negativ ist, sollten Sie die Anzahl verringern, um den Bereich zu reparieren. Andernfalls erhöhen Sie die Anzahl, um den Bereich zu reparieren.
- Gehen Sie zurück zum ersten Zeichen und ersetzen Sie jede Null durch Erhöhen / Verringern der vorherigen Zahl.
- Wiederholen Sie diesen Vorgang, bis Sie das letzte Zeichen erreicht haben
Verwendete Makros
@e - Auf Ende prüfen. An die letzte Nummer wird ein e angehängt. Wenn die Zahl unter dem Cursor ein e am Ende hat, löschen Sie das e und stoppen Sie die Ausführung. Andernfalls starten Sie einen Interpolationszyklus mit @b.
mbyiwo^R"Exe@b^[0fel"ty2ldd`b@t
@b - Interpolationszyklus starten. Speichern Sie die Zahl unter dem Cursor für eine Subtraktionsoperation (@s) und suchen Sie dann den nächsten Ausdruck ungleich Null (@f)
mayiwo^R"^V^X ^["sy0dd`a@f
@s - Speichert den in @d zu verwendenden Subtraktionsbefehl. Es ist einfach, (val)^X
wo (val)
die Nummer zu Beginn des Interpolationsschritts ist. Dies wird mit dem Befehl @b festgelegt.
@f - Finde den nächsten Ausdruck ungleich Null. Schreiben Sie den aktuellen Wert in das unbenannte Register, schreiben Sie @f @d
in die nächste Zeile und führen Sie dann @z aus. Dies wiederholt diesen Befehl, wenn die Zahl Null ist, und führt @d aus, wenn dies nicht der Fall ist.
wmbyiwo@f @d^[@z
@z - Bedingte Ausführung, wenn das unbenannte Register 0 ist. Dieser Befehl erwartet zwei Befehle in einer neuen Zeile im Format command1 command2
. Wenn das unbenannte Register 0 ist, command1
wird ausgeführt, ansonsten command2
wird ausgeführt. Beachten Sie, dass keiner der Befehle Leerzeichen enthalten kann.
IB0 B^R" ^OWB0 ^OA B0^[0*w"tyiWdd`b@t`
@t - Temporäres Befehlsregister. Speichert verschiedene Befehle für kurze Zeit, bevor sie ausgeführt werden. Wird hauptsächlich in if-Anweisungen verwendet.
@d - Interpolationsrichtung bestimmen. Subtrahiert die erste Zahl in der Sequenz von der Zahl unter dem Cursor (mit @s). Wenn das Ergebnis negativ ist, muss die Interpolation dekrementiert werden, damit ^ X in @a gespeichert wird. Andernfalls sollten wir erhöhen, damit ^ A in @a gespeichert wird. Sobald dies gespeichert ist, gehen Sie zurück zum Anfang dieses Interpolationszyklus und führen Sie @i aus, um tatsächlich zu interpolieren
yiwo^V^X^R"^[0l@sa^V^A-^[0f-"ayhdd`a@i
@a - Speichert entweder ^A
oder ^X
zum Inkrementieren oder Dekrementieren während des Interpolationsschritts. Dies wird mit dem Befehl @d festgelegt.
@i - Interpolieren. Kopieren Sie die Nummer an der aktuellen Position nach @x und wechseln Sie zur nächsten Nummer. Wenn diese Zahl Null ist, ersetzen Sie sie durch @x und führen Sie @a aus, um sie ordnungsgemäß nach oben oder unten zu ändern. Wiederholen Sie dann diesen Befehl. Wenn die Zahl keine Null ist, haben wir das Ende dieses Interpolationszyklus erreicht. Ein neues sollte mit dieser Nummer als Anfang gestartet werden. Führen Sie also @e aus, um nach dem Ende zu suchen, und führen Sie es erneut aus.
"xyiwwmbyiwocw^V^Rx^V^[@a@i @e^[@z
@x - Temporäres Speicherregister. Wird im Interpolationsbefehl verwendet (@i)
Tastenanschläge aufteilen
mbo :Set b mark to current position and open a new line below to write macros
mayiwo^V^R"^V^V^V^X ^V^["sy0dd`a@f ^["bc0 :Write to @b and reset line
yiwo^V^V^V^X^V^R"^V^[0l@sa^V^V^V^A-^V^[0f-"ayhdd`a@i ^["dc0 :Write to @d and reset line
mbyiwo^V^R"Exe@b^V^[0fel"ty2ldd`b@t ^["ec0 :Write to @e and reset line
wmbyiwo@f @d^V^[@z ^["fc0 :Write to @f and reset line
"xyiwwmbyiwocw^V^V^V^Rx^V^V^V^[@a@i @e^V^[@z ^["ic0 :Write to @i and reset line
IB0 B^V^R" ^V^OWB0 ^V^OA B0^V^[0*w"tyiWdd`b@t ^["zd0 :Write to @z and reset line
dd`b :Delete this line and move cursor back to original line
Ae^[ :Append an e to the last number
0@e :Move to the beginning of the line and run
0
kann unser Programm einen anderen Wert annehmen wienull
?