Напечатайте зеленые яйца и ветчину в 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? :-)
— Джо З.
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.