Wpisz vim zielone jajka i szynkę

18

Książka Green Eggs and Ham autorstwa Dr. Seuss jest znana z tego, że w całej historii książki zawiera tylko 50 różnych słów.

Twoim zadaniem jest utworzenie sekwencji naciśnięć klawiszy, która spowoduje, że cały tekst Zielonych Jaj i Szynki zostanie zastosowany do pustego pliku w edytorze tekstu vim , zaczynając w trybie normalnym ze wszystkimi ustawieniami domyślnymi. Twoje naciśnięcia klawiszy nie mogą ładować żadnych innych plików w ramach ich operacji - cały tekst musi być generowany w samym edytorze.

Ostateczny bufor musi wyglądać dokładnie tak, jak ten plik , chociaż może pozostać w dowolnym trybie, w którym się znajduje (nie trzeba mieć finału, <Esc>aby przywrócić go do trybu normalnego).

Akordowe naciśnięcia klawiszy, takie jak <C-o>Shift lub wpisywanie dużej litery, są liczone jako pojedyncze naciśnięcie klawisza.

Wygrywa sekwencja najmniejszej liczby naciśnięć klawiszy, aby osiągnąć ten cel.

Joe Z.
źródło
Jeśli ktoś chce stworzyć odpowiednik Emacsa dla tego pytania, może to zrobić. Nie znam wystarczająco Emacsa, aby wiedzieć, czy w ogóle byłoby to interesujące pytanie.
Joe Z.
Ponadto „ze wszystkimi ustawieniami domyślnymi” oznacza, że ​​nie wolno ładować ustawień z .vimrcpliku.
Joe Z.
Opierając się na twojej „kanonicznej” odpowiedzi „wstaw cały plik”, przyjmuję, że tryb, w którym zostawiasz edytor po wstawieniu, nie ma znaczenia. Być może powinno to zostać wyraźnie określone w celu wyjaśnienia (tj. Nie musisz <Esc> wyjść z trybu wstawiania).
FireFly,
Tak, nie musisz <Esc>wychodzić z trybu wstawiania, ale musisz zacząć normalnie.
Joe Z.
Moim zdaniem to pytanie jest na marginesie. To nie jest codegolf, to vimgolf (jest na to strona, dobra. Każdy zainteresowany powinien spojrzeć). Uważam też, że tekst jest zbyt długi, przez co gra w golfa zajmuje dużo czasu.
shiona

Odpowiedzi:

9

1864 naciśnięcia klawiszy

Ktoś prawdopodobnie mógłby napisać jakiś kod, który stworzy bardziej optymalne rozwiązanie, ale na razie jest to nieistotne. To cholerny bałagan i wstydzę się, że zrobiłem to ręcznie.

Najpierw wchodzimy w tryb wstawiania.

i

To wszystko

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;]!

Naciśnij klawisz Escape, aby przejść do trybu poleceń. I rozwikłać skompresowane rzeczy. Kolejność ma znaczenie, ponieważ skompresowałem trochę skompresowanego tekstu.

<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

źródło
masz niewłaściwy zamiennik na zjedzenie ich, jest odwrotnie. i możesz wyciąć wiodące dwukropki za pomocą trybu ed, który pozostaje w trybie poleceń po poleceniach.
hildred
@ Hildred Właściwie zacząłem od pełnego tekstu, dokonałem globalnej zamiany i dodałem pełny tekst do skompresowanego tekstu do innego pliku.
Jeśli zastąpi so good;so good;się <Esc>2aso good;<Esc>a, można zapisać trzech klawiszy. Na iThat ]! That]!<Enter>początku zamień też 2iThat ]! <Esc>xona kolejne trzy.
Joe Z.
Ponadto, ponieważ DNnie pojawia się w innym miejscu, można usunąć Iz IDNi I do not w rachunku zastąp tych dwóch wyrażeń w nim.
Joe Z.
I zastąpić wszystkie wystąpienia IDNlike$!<Enter>|;].z 1i wejście %s/1/IDNlike$!\n|;]./gdo zaoszczędzić około 20 klawiszy lub tak.
Joe Z.
6

3470 naciśnięć klawiszy

i<entire text of file>

Plik tekstowy ma długość 3469 znaków, więc wpisanie „i” w celu wprowadzenia go w tryb wstawiania i wpisanie każdego znaku osobno zajmie 3470 naciśnięć klawiszy.

Joe Z.
źródło
Lol @ pure brute force
Cruncher
Jest to przeznaczone przede wszystkim jako rozwiązanie referencyjne na ostatnim miejscu.
Joe Z.
ale obecnie jest to również najlepszy zawodnik :-) (nie, nie zamierzam brać udziału; przepraszam)
John Dvorak
Jesteś bardziej osobą Emacsa? :-)
Joe Z.