Напечатайте зеленые яйца и ветчину в vim

18

Книга доктора Сьюза "Зеленые яйца и ветчина" известна тем, что во всей истории книги всего 50 разных слов.

Ваша задача - создать последовательность нажатий клавиш, которая будет приводить к полному тексту зеленых яиц и ветчины при применении к пустому файлу в текстовом редакторе vim , начиная с обычного режима со всеми настройками по умолчанию. Ваши нажатия клавиш не должны загружать какие-либо другие файлы как часть их работы - весь текст должен генерироваться в самом редакторе.

Ваш последний буфер должен выглядеть точно так же, как этот файл , хотя он может оставаться в любом режиме, в котором он находится (вам не нужно иметь финальный буфер, <Esc>чтобы вернуть его в нормальный режим).

Клавиши Chorded, такие как <C-o>или с помощью Shift, для ввода числа заглавных букв в качестве одного нажатия клавиши.

Последовательность наименьшего количества нажатий клавиш для достижения этой цели выигрывает.

Джо З.
источник
Если кто-то хочет создать Emacs-эквивалент этого вопроса, он может. Я недостаточно знаком с Emacs, чтобы знать, будет ли это вообще интересным вопросом.
Джо З.
Кроме того, «со всеми настройками по умолчанию» означает, что вы не можете загружать настройки из .vimrcфайла.
Джо З.
Исходя из вашего «канонического» ответа «вставка всего файла», я полагаю, что режим, в котором вы покидаете редактор, после вставки не имеет значения. Может быть, это должно быть явно указано для пояснения (т.е. вам не нужно <Esc> выходить из режима вставки).
FireFly
Да, вам не нужно <Esc>выходить из режима вставки, но вы должны начать в обычном режиме.
Джо З.
На мой взгляд, этот вопрос находится на грани не по теме. Это не кодгольф, это вимгольф (для этого есть страница, хорошая. Всем, кто заинтересован, стоит посмотреть). Я также нахожу текст слишком длинным, что делает его очень трудоемким для игры в гольф.
Шион

Ответы:

9

1864 нажатия клавиш

Кто-то, возможно, мог бы написать некоторый код, который дает более оптимальное решение, но пока это лучше базового варианта. Это чертовски беспорядок, и мне стыдно, что я сделал это вручную.

Сначала мы входим в режим вставки.

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еще на три.
Джо З.
Кроме того, поскольку DNнигде больше не появляется, вы можете удалить оператор Ifrom IDNи I do not replace с этими двумя выражениями в нем.
Джо З.
И, замените все экземпляры IDNlike$!<Enter>|;].с 1и на ввод, %s/1/IDNlike$!\n|;]./gчтобы сохранить около 20 нажатий клавиш или около того.
Джо З.
6

3470 нажатий клавиш

i<entire text of file>

Текстовый файл имеет длину 3 469 символов, поэтому для ввода его в режиме вставки введите «i», а для ввода каждого символа по отдельности потребуется 3470 нажатий клавиш.

Джо З.
источник
Lol @ pure Grute
Force
Это предназначено главным образом как справочное решение последнего места больше всего на свете.
Джо З.
но в настоящее время он также лучший участник :-) (нет, я не собираюсь участвовать; извините)
Джон Дворжак
Ты больше человек из Emacs? :-)
Джо З.