Digite Green Eggs and Ham no vim


18

O livro Green Eggs and Ham do Dr. Seuss é famoso por ter apenas 50 palavras diferentes em toda a história do livro.

Sua tarefa é criar uma sequência de pressionamentos de teclas que resultarão em todo o texto de Green Eggs and Ham quando aplicados a um arquivo vazio no editor de texto do vim , iniciando no modo normal com todas as configurações padrão. As teclas digitadas não devem carregar outros arquivos como parte de sua operação - todo o texto deve ser gerado no próprio editor.

Seu buffer final deve se parecer exatamente com esse arquivo , embora possa permanecer no modo que ele acabar (você não precisa ter um final <Esc>para retorná-lo ao modo normal).

Pressões de tecla em acordes como <C-o>ou usando Shift para digitar uma contagem de letras maiúsculas como uma única tecla.

A sequência do menor número de pressionamentos de tecla para atingir esse objetivo vence.


Se alguém quiser criar o equivalente do Emacs a essa pergunta, poderá. Não estou familiarizado o suficiente com o Emacs para saber se isso faria uma pergunta interessante.
— Joe Z.

Além disso, "com todas as configurações padrão" significa que você não tem permissão para carregar as configurações de um .vimrcarquivo.
— Joe Z.

Com base na sua resposta "canônica" de inserir todo o arquivo, eu entendo o modo como você deixa o editor depois que a inserção não importa. Talvez isso deva ser especificado explicitamente para esclarecer (ou seja, você não precisa sair do modo de inserção).
— FireFly

Sim, você não precisa <Esc>sair do modo de inserção, mas precisa começar normalmente.
— Joe Z.

A meu ver, esta questão está à beira de ser fora de tópico. Não é um codegolf, é um vimgolf (há uma página para isso, uma boa. Qualquer pessoa interessada deve dar uma olhada). Também acho o texto muito longo, o que consome muito tempo no golfe.
— Shiona

Respostas:


9

1864 pressionamentos de tecla

Alguém provavelmente poderia escrever algum código que produza uma solução mais ideal, mas isso supera o caso de referência por enquanto. É uma bagunça, e tenho vergonha de ter feito isso manualmente.

Primeiro, entramos no modo de inserção.

i

Então tudo isso

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

Pressione escape para entrar no modo de comando. E desvendar o material comprimido. A ordem é importante, pois eu comprimi algum texto compactado.

<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

você tem a substituição errada para comê-los, é ao contrário. e você pode cortar os dois pontos principais usando o modo ed, que permanece no modo de comando após os comandos.
— Hildred

@hildred Na verdade, comecei com o texto completo, fiz uma substituição global e adicionei o texto completo ao texto compactado em outro arquivo. Deve ter esquecido de reverter esse :(

Se você substituir so good;so good;por <Esc>2aso good;<Esc>a, poderá salvar três pressionamentos de tecla. Além disso, substitua iThat ]! That]!<Enter>no início 2iThat ]! <Esc>xopor outros três.
— Joe Z.

Além disso, como DNnão aparece em nenhum outro lugar, é possível remover a instrução Ifrom IDNe I do not na replace com essas duas expressões.
— Joe Z.

E substitua todas as instâncias de IDNlike$!<Enter>|;].com 1e entrada %s/1/IDNlike$!\n|;]./gpara economizar cerca de 20 pressionamentos de tecla.
— Joe Z.

6

3.470 pressionamentos de tecla

i<entire text of file>

O arquivo de texto possui 3.469 caracteres, portanto, digitar "i" para colocá-lo no modo de inserção e digitar cada caractere individualmente, exigirão 3.470 pressionamentos de tecla.


Lol @ força bruta pura
— Cruncher

Isso se destina principalmente a uma solução de referência de último lugar, mais do que qualquer coisa.
— Joe Z.

no entanto, é atualmente o melhor concorrente bem :-) (não, eu não vou participar, sorry)
— John Dvorak

Você é mais uma pessoa do Emacs? :-)
— Joe Z.
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.