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.