Ketik Telur Hijau dan Ham dalam vim

18

Buku Green Eggs and Ham oleh Dr. Seuss terkenal hanya memiliki 50 kata berbeda dalam keseluruhan cerita buku tersebut.

Tugas Anda adalah membuat urutan penekanan tombol yang akan menghasilkan seluruh teks Green Eggs and Ham saat diterapkan ke file kosong di editor teks vim , dimulai dalam mode normal dengan semua pengaturan default. Tombol Anda tidak boleh memuat file lain sebagai bagian dari operasinya - semua teks harus dibuat di dalam editor itu sendiri.

Buffer terakhir Anda harus persis seperti file ini , meskipun ia dapat tetap berada dalam mode apa pun yang berakhir (Anda tidak harus memiliki final <Esc>untuk mengembalikannya ke mode normal).

Penekanan tombol chorded seperti <C-o>atau menggunakan Shift untuk mengetik jumlah huruf kapital sebagai penekanan tombol tunggal.

Urutan penekanan tombol paling sedikit untuk mencapai tujuan ini menang.

Joe Z.
sumber
Jika seseorang ingin membuat Emacs yang setara dengan pertanyaan ini, mereka bisa. Saya tidak cukup akrab dengan Emacs untuk mengetahui apakah itu akan membuat pertanyaan yang menarik sama sekali.
Joe Z.
Juga, "dengan semua pengaturan default" berarti Anda tidak diizinkan memuat pengaturan dari .vimrcfile.
Joe Z.
Berdasarkan jawaban insert-seluruh-file "kanonik" Anda, saya ambil mode yang Anda tinggalkan di editor setelah penyisipan tidak masalah. Mungkin ini harus ditentukan secara eksplisit untuk menjelaskan (yaitu Anda tidak perlu <Esc> keluar dari mode insert).
FireFly
Ya, Anda tidak harus <Esc>keluar dari mode penyisipan, tetapi Anda harus memulai dengan normal.
Joe Z.
Seperti yang saya lihat, pertanyaan ini berada di luar topik. Ini bukan codegolf, itu vimgolf (ada halaman untuk itu, yang bagus. Siapa pun yang tertarik harus melihatnya). Saya juga menemukan teks terlalu panjang, sehingga sangat memakan waktu untuk bermain golf.
shiona

Jawaban:

9

1864 penekanan tombol

Seseorang mungkin dapat menulis beberapa kode yang menghasilkan solusi yang lebih optimal, tetapi ini mengalahkan kasus referensi untuk saat ini. Ini berantakan sekali, dan aku malu melakukannya dengan tangan.

Pertama, kita masuk ke mode insert.

i

Lalu semua ini

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

Tekan escape untuk masuk ke mode perintah. Dan mengungkap hal-hal yang terkompresi. Urutan penting, karena saya telah mengompres beberapa teks terkompresi.

<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

sumber
Anda mendapatkan substitusi yang salah untuk memakannya, itu terbalik. dan Anda dapat memotong titik dua terkemuka dengan menggunakan mode ed yang tetap dalam mode perintah setelah perintah.
Hildred
@hildred Saya benar-benar mulai dengan teks lengkap, melakukan penggantian global dan menambahkan teks lengkap ke teks terkompresi ke file lain. Pasti lupa membalikkan yang :(
Jika Anda mengganti so good;so good;dengan <Esc>2aso good;<Esc>a, Anda dapat menyimpan tiga penekanan tombol. Juga, ganti iThat ]! That]!<Enter>di awal dengan 2iThat ]! <Esc>xotiga lainnya.
Joe Z.
Juga, karena DNtidak muncul di tempat lain, Anda dapat menghapus Idari IDNdan I do not dalam pernyataan ganti dengan dua ekspresi di dalamnya.
Joe Z.
Dan, ganti semua instance IDNlike$!<Enter>|;].dengan 1dan input %s/1/IDNlike$!\n|;]./guntuk menghemat sekitar 20 penekanan tombol atau lebih.
Joe Z.
6

3.470 penekanan tombol

i<entire text of file>

File teks panjangnya 3,469 karakter, jadi mengetik "i" untuk memasukkannya ke mode insert dan mengetik setiap karakter secara individual akan membutuhkan 3.470 penekanan tombol.

Joe Z.
sumber
Lol @ pure brute force
Cruncher
Ini dimaksudkan terutama sebagai solusi referensi tempat terakhir lebih dari apa pun.
Joe Z.
namun saat ini kontestan terbaik juga :-) (tidak, saya tidak akan berpartisipasi; maaf)
John Dvorak
Anda lebih dari orang Emacs? :-)
Joe Z.