Виберіть зелені яйця та шинку in vim


18

Книга «Зелені яйця та шинка» доктора Сеусса славиться лише тим, що у всій історії книги є лише 50 різних слів.

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

Ваш остаточний буфер повинен виглядати точно так, як цей файл , хоча він може залишатися в тому режимі, в якому він перебуває (не потрібно мати остаточного, <Esc>щоб повернути його у звичайний режим).

Акордовані натискання клавіш на кшталт <C-o>або за допомогою Shift для введення літери великої літери як єдиного натиску клавіші.

Виграє послідовність найменших натискань клавіш для досягнення цієї мети.


Якщо хтось хоче створити еквівалент Emacs цього питання, він може. Я недостатньо знайомий з Emacs, щоб знати, чи це взагалі стане для цікавого питання.
Джо З.

Крім того, "з усіма налаштуваннями за замовчуванням" означає, що вам заборонено завантажувати налаштування з .vimrcфайлу.
Джо Z.

Виходячи з вашої "канонічної" відповіді на вставлення цілого файлу, я вважаю, що режим, у якому ви залишите редактор після вставки, не має значення. Можливо, це слід чітко вказати для уточнення (тобто вам не доведеться <Esc> виходити з режиму вставки).
FireFly

Так, вам не доведеться <Esc>виходити з режиму вставки, але вам доведеться починати в звичайному режимі.
Джо Z.

Як я бачу, це питання стоїть на межі поза тематики. Це не кодегольф, це вімгольф (є сторінка для цього, хороша. Усі, хто цікавиться, повинні подивитися). Я також вважаю, що текст є занадто довгим, що робить його дуже трудомістким для гольфу.
shiona

Відповіді:


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не з’являється в іншому місці, ви можете видалити Iз IDNі I do not в операторі заміну ці два вирази в ньому.
Джо З.

І, замінити всі екземпляри IDNlike$!<Enter>|;].з 1і входом , %s/1/IDNlike$!\n|;]./gщоб заощадити близько 20 натискань клавіш або близько того .
Джо Z.

6

3,470 натискань клавіш

i<entire text of file>

Текстовий файл має 3469 символів, тому для введення «i», щоб перевести його в режим вставки та вводити кожен символ окремо, буде потрібно 3,470 натискань клавіш.


Lol @ pure brute force
Cruncher

Це здебільшого задумано як останнє референтне рішення, як ніщо.
Джо Z.

але наразі це також найкращий учасник змагань :-) (ні, я не збираюся брати участь; вибачте)
Джон Дворак

Ви більше людина Emacs? :-)
Джо З.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.