输入vim中的绿鸡蛋和火腿


18

苏斯博士撰写的《绿鸡蛋和火腿》一书以整个故事中只有50个不同的单词而闻名。

您的任务是创建一个击键序列,当在vim文本编辑器中将其应用于空文件时,将以所有默认设置从常规模式开始,生成“绿色鸡蛋和火腿”的整个文本。击键操作过程中不得加载任何其他文件-所有文本都必须在编辑器内部生成。

您的最终缓冲区必须与该文件完全一样,尽管它可以保留在最终处于的任何模式下(您不必具有最终结构<Esc>即可将其返回到正常模式)。

<C-o>或使用Shift键来键入大写字母的和弦键击作为单个键击。

达到此目标的最少击键顺序将获胜。


如果有人想创建与此问题等效的Emacs,则可以。我对Emacs不够熟悉,根本不知道这是否会引起一个有趣的问题。
Joe Z.

同样,“具有所有默认设置”意味着您不能从.vimrc文件中加载设置。
Joe Z.

根据您的“规范”插入整个文件的答案,我认为插入无关紧要后您离开编辑器的方式。也许应该明确指定它来阐明(即,您不必从插入模式中退出<Esc>)。
FireFly 2013年

是的,您不必<Esc>退出插入模式,但必须从正常模式开始。
Joe Z.

正如我所看到的,这个问题正处于离题的边缘。它不是代码高尔夫,而是vimgolf(有一个页面,很好的页面。任何有兴趣的人都应该看看)。我还发现文字太长,打高尔夫球非常耗时。
shiona 2013年

Answers:


9

1864击键

有人可能会编写一些代码,以产生更好的解决方案,但是现在这比参考案例更好。这真是一团糟,我很I愧是手工做的。

首先,我们进入插入模式。

i

那这一切

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

按Escape键进入命令模式。并解压缩压缩的东西。顺序很重要,因为我已经压缩了一些压缩的文本。

<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

您吃错了替代品,这是倒退。您可以使用ed模式来切掉前导冒号,该模式在命令之后保持在命令模式下。
hildred

@hildred我实际上是从全文开始的,进行了全局替换,并将全文添加到了压缩文件的另一个文件中。一定忘了扭转那个:(

如果替换so good;so good;<Esc>2aso good;<Esc>a,则可以保存三个按键。同样,iThat ]! That]!<Enter>在开始时2iThat ]! <Esc>xo以另外三个替换。
Joe Z.

另外,由于DN没有出现在其他地方,因此可以使用其中的两个表达式I从replace语句中删除from IDNI do not 在replace语句中。
Joe Z.

而且,更换的所有实例IDNlike$!<Enter>|;].1和投入%s/1/IDNlike$!\n|;]./g,以节省约20次击键左右。
Joe Z.

6

3,470次按键

i<entire text of file>

该文本文件的长度为3,469个字符,因此键入“ i”使其处于插入模式,然后逐个键入每个字符将需要3,470次按键。


大声笑@纯蛮力
Cruncher 2013年

这主要是作为最后参考解决方案,而不是其他任何东西。
Joe Z.

但它也是目前最好的选手:-)(不,我不参加;对不起)
John Dvorak 2013年

您更像一个Emacs人吗?:-)
Joe Z.
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.