Geben Sie in vim grüne Eier und Schinken ein

18

Das Buch Grüne Eier und Schinken von Dr. Seuss ist dafür bekannt, dass es in der gesamten Geschichte des Buches nur 50 verschiedene Wörter enthält.

Ihre Aufgabe ist es, eine Folge von Tastenanschlägen zu erstellen, die den gesamten Text von Green Eggs and Ham ergeben, wenn sie auf eine leere Datei im VIM- Texteditor angewendet werden. Beginnen Sie im normalen Modus mit allen Standardeinstellungen. Ihre Tastenanschläge dürfen keine anderen Dateien als Teil ihres Vorgangs laden - der gesamte Text muss im Editor selbst generiert werden.

Ihr endgültiger Puffer muss genau so aussehen wie diese Datei , obwohl er in dem Modus verbleiben kann, in dem er sich befindet (Sie müssen keinen endgültigen Puffer haben <Esc>, um ihn in den normalen Modus zurückzusetzen).

Akkordierte Tastenanschläge wie <C-o>oder Verwenden der Umschalttaste zum Eingeben eines Großbuchstabenzählers als einzelner Tastenanschlag.

Die Reihenfolge der wenigsten Tastenanschläge zum Erreichen dieses Ziels gewinnt.

Joe Z.
quelle
Wenn jemand das Emacs-Äquivalent zu dieser Frage erstellen möchte, kann er das. Ich kenne Emacs nicht gut genug, um zu wissen, ob dies überhaupt zu einer interessanten Frage führen würde.
Joe Z.
"Mit allen Standardeinstellungen" bedeutet auch, dass Sie keine Einstellungen aus einer .vimrcDatei laden dürfen .
Joe Z.
Basierend auf Ihrer "kanonischen" Antwort "Ganze Datei einfügen" nehme ich den Modus an, in dem Sie den Editor verlassen, nachdem das Einfügen keine Rolle spielt. Vielleicht sollte dies explizit angegeben werden, um dies zu verdeutlichen (dh Sie müssen nicht aus dem Einfügemodus <Esc> aussteigen).
FireFly
Ja, Sie müssen nicht <Esc>aus dem Einfügemodus aussteigen, sondern müssen ganz normal beginnen.
Joe Z.
Aus meiner Sicht steht diese Frage kurz davor, nicht zum Thema zu gehören. Es ist kein Codegolf, es ist ein Vimgolf (es gibt eine Seite dafür, eine gute. Wer interessiert ist, sollte einen Blick darauf werfen). Ich finde den Text auch zu lang, was das Golfen sehr zeitaufwändig macht.
Shiona

Antworten:

9

1864 Tastenanschläge

Jemand könnte wahrscheinlich einen Code schreiben, der eine optimalere Lösung liefert, aber dies schlägt vorerst den Referenzfall. Das ist eine verdammte Sauerei, und ich schäme mich, dass ich es von Hand gemacht habe.

Zuerst wechseln wir in den Einfügemodus.

i

Dann das alles

That ]! That ]!
IDNlike that ]!

Do Y like$?

|;].
IDNlike$.

WPY LTB or tB?

IZ LTB or tB.
IZ LTanywB.
IDNlike$.
|;].

WPY LTin a h@?
WPY LT=a m@?

|in a h@.
|=a m@.
|B or tB.
|.
IDNlike$.
|;].

WPY ETin a box?
WPY ET=a fox?

Not_a box. Not =a fox.
Not_a h@. Not =a m@.
IZ ETB or tB.
IZ ETanywB.
IZ eat$.
|;].

WPY? CPY? In a car?
Eat them! Eat them! B they are.

IZ,X,_a car.

You may LT. You will see.
You may LTin a tree!

IZ,X_a tree.
Not_a car! You let me be.

|in a box.
|=a fox.
|in a h@.
|=a m@.
|B or tB.
|.
IDNlike$.
|;].

AQ! AQ! AQ! AQ!
CPY;wPY;on aQ?

Not_aQ! Not_a tree!
Not_a car! Sam! Let me be!

IZ,X,_a box.
IX,Z;=a fox.
:=a m@.
:in a h@.
:B or tB.
:anywB.
IDNlike$.
|;].

Say! In +? B_+!
WPY;cPY,_+?

IZ,X,_+.

WPY;cPY,_the rain?


IZ,X,_the rain.
Not_+. Not on aQ.
Not_a car. Not_a tree.
|;Sam;Y see.
Not_a h@. Not_a box.
Not =a m@. Not =a fox.
:B or tB.
|!

You do not like$?
|;].

CPY;wPY;=a g^?

IZ,X;=a g^!

WPY;cPY;on a b^?

IX,Z;on a b^.
IWN,WN;=a g^.

:in the rain.
:on aQ.
Not_+! Not_a tree!
Not_a car! You let me be!
|in a box.
|=a fox.
:in a h@.
|=a m@.
|B or tB.
|!

IDNlike$!
|;].

You do not LT. So Y say.
Try them! Try them! & Y may.
Try them and Y may;I say.

Sam! If Y will let me be,
I will try them. You will see.

Say! I like$!
I do! I LT;]!
& I wPETin a b^.
& I wPET=a g^.

!ETin the rain.
&_+. & on aQ.
&_a car. &_a tree.
They are so good;so good;Y see!

So I will ETin a box.
!ET=a fox.
!ETin a h@.
!ET=a m@.
!ETB and tB.
Say! I will ETanywB!

I do so like$!

Thank Y! Thank Y;]!

Drücken Sie die Escape-Taste, um in den Befehlsmodus zu wechseln. Und entwirren Sie das komprimierte Zeug. Die Reihenfolge ist wichtig, da ich komprimierten Text komprimiert habe.

<Esc>
%s/|/|anywB/g
%s/:/IWNET/g
%s/|/IDNLT/g
%s/Z/ wPnot/g
%s/X/ cPnot/g
%s/&/And/g
%s/+/the dark/g
%s/@/ouse/g
%s/^/oat/g
%s/Y/you/g
%s/IDN/I do not /g
%s/LT/like them /g
%s/]/Sam-I-am/g
%s/ET/eat them /g
%s/WN/ will not/g
%s/$/ green eggs and ham/g
%s/P/ould /g
%s/!/And I will /g
%s/Q/ train/g
%s/B/here/g
%s/_/ in /g
%s/=/with /g
%s/;/, /g

quelle
Sie haben den falschen Ersatz für essen, es ist rückwärts. und Sie können die führenden Doppelpunkte ausschneiden, indem Sie den ed-Modus verwenden, der nach Befehlen im Befehlsmodus bleibt.
Hildred
@hildred Ich habe tatsächlich mit dem Volltext begonnen, einen globalen Ersatz durchgeführt und den Volltext zu komprimiertem Text in eine andere Datei eingefügt. Muss vergessen haben, das umzukehren :(
Wenn Sie ersetzen so good;so good;mit <Esc>2aso good;<Esc>a, können Sie drei Tastatureingaben speichern. Ersetzen Sie auch iThat ]! That]!<Enter>am Anfang durch 2iThat ]! <Esc>xodrei weitere.
Joe Z.
Da auch DNerscheint an anderer Stelle nicht, können Sie die entfernen Iaus IDNund I do not in der ersetzen Erklärung mit diesen beiden Ausdrücke in ihm.
Joe Z.
Ersetzen Sie alle Instanzen von IDNlike$!<Enter>|;].mit 1und input %s/1/IDNlike$!\n|;]./g, um etwa 20 Tastenanschläge zu sparen.
Joe Z.
6

3.470 Tastenanschläge

i<entire text of file>

Die Textdatei ist 3.469 Zeichen lang. Wenn Sie also "i" eingeben, um sie in den Einfügemodus zu versetzen, und jedes Zeichen einzeln eingeben, werden 3.470 Tastenanschläge benötigt.

Joe Z.
quelle
Lol @ pure Brute Force
Cruncher
Dies ist vor allem als letzte Referenzlösung gedacht.
Joe Z.
aber es ist momentan auch der beste Kandidat :-) (nein, ich werde nicht teilnehmen; sorry)
John Dvorak
Sie sind eher eine Emacs-Person? :-)
Joe Z.