Escriba Huevos verdes y jamón en vim

18

El libro Green Eggs and Ham del Dr. Seuss es famoso por tener solo 50 palabras diferentes en toda la historia del libro.

Su tarea es crear una secuencia de pulsaciones de teclas que dará como resultado el texto completo de Green Eggs and Ham cuando se aplique a un archivo vacío en el editor de texto vim , comenzando en modo normal con todas las configuraciones predeterminadas. Las pulsaciones de teclas no deben cargar ningún otro archivo como parte de su operación; todo el texto debe generarse dentro del propio editor.

Su búfer final debe verse exactamente como este archivo , aunque puede permanecer en cualquier modo en el que termine (no es necesario tener un final <Esc>para devolverlo al modo normal).

Pulsaciones de teclas en acorde como <C-o>o usando Mayús para escribir un recuento de letras mayúsculas como una sola pulsación de tecla.

La secuencia de la menor cantidad de pulsaciones de teclas para lograr este objetivo gana.

Joe Z.
fuente
Si alguien quiere crear el equivalente Emacs de esta pregunta, puede hacerlo. No estoy lo suficientemente familiarizado con Emacs para saber si sería una pregunta interesante.
Joe Z.
Además, "con todas las configuraciones predeterminadas" significa que no puede cargar configuraciones desde un .vimrcarchivo.
Joe Z.
Según su respuesta "canónica" de inserción de todo el archivo, considero que deja el editor después de que la inserción no importa. Tal vez esto debería especificarse explícitamente para aclarar (es decir, no tiene que <Esc> salir del modo de inserción).
FireFly
Sí, no tiene que <Esc>salir del modo de inserción, pero sí debe comenzar de manera normal.
Joe Z.
Tal como lo veo, esta pregunta está al borde de estar fuera de tema. No es un codegolf, es un vimgolf (hay una página para eso, una buena. Cualquier persona interesada debería echar un vistazo). También encuentro que el texto es demasiado largo, lo que hace que el golf sea muy lento.
shiona

Respuestas:

9

1864 pulsaciones de teclas

Alguien probablemente podría escribir algún código que produzca una solución más óptima, pero esto supera el caso de referencia por ahora. Esto es un desastre, y me da vergüenza haberlo hecho a mano.

Primero, ingresamos al modo de inserción.

i

Entonces todo esto

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

Presiona escapar para ingresar al modo de comando. Y desentrañar las cosas comprimidas. El orden importa, ya que he comprimido algo de texto comprimido.

<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

fuente
te equivocaste al comerlos, está al revés. y puede cortar los dos puntos iniciales utilizando el modo ed que permanece en modo comando después de los comandos.
hildred
@hildred En realidad comencé con el texto completo, realicé un reemplazo global y agregué el texto completo al texto comprimido a otro archivo. Debe haber olvidado revertir eso :(
Si reemplaza so good;so good;con <Esc>2aso good;<Esc>a, puede guardar tres pulsaciones de teclas. Además, reemplace iThat ]! That]!<Enter>al principio 2iThat ]! <Esc>xopor otros tres.
Joe Z.
Además, dado que DNno aparece en otros lugares, se puede quitar el Ide IDNy I do not en la cuenta de reemplazar con esas dos expresiones en el mismo.
Joe Z.
Y, reemplace todas las instancias de IDNlike$!<Enter>|;].con 1y entrada %s/1/IDNlike$!\n|;]./gpara guardar aproximadamente 20 pulsaciones de teclas más o menos.
Joe Z.
6

3,470 pulsaciones de teclas

i<entire text of file>

El archivo de texto tiene una longitud de 3,469 caracteres, por lo que escribir "i" para ponerlo en modo de inserción y escribir cada carácter individualmente requerirá 3,470 pulsaciones de teclas.

Joe Z.
fuente
Lol @ fuerza bruta pura
Cruncher
Esto está pensado principalmente como una solución de referencia de último lugar más que nada.
Joe Z.
Sin embargo, actualmente es el mejor concursante también :-) (no, no voy a participar; lo siento)
John Dvorak
¿Eres más una persona de Emacs? :-)
Joe Z.