Vim içinde Yeşil Yumurta ve Jambon yazın


18

Dr. Seuss'un Yeşil Yumurtalar ve Jambon kitabı, kitabın tüm hikayesinde sadece 50 farklı kelime olmasıyla ünlüdür.

Göreviniz, vim metin düzenleyicisindeki boş bir dosyaya tüm varsayılan ayarlarla başlayarak boş bir dosyaya uygulandığında tüm Yeşil Yumurta ve Jambon metniyle sonuçlanacak bir tuş vuruşları dizisi oluşturmaktır . Tuş vuruşlarınız işlemlerinin bir parçası olarak başka dosyalar yüklememelidir - tüm metinler düzenleyicinin içinde oluşturulmalıdır.

Son ara belleğiniz tam olarak bu dosyaya benzemelidir , ancak hangi modda olursa olsun kalmaya devam edebilir ( <Esc>normal moda döndürmek için bir final yapmanız gerekmez ).

<C-o>Tek bir tuş vuruşu olarak büyük harf sayımı yazmak için Shift gibi veya kullanarak akor tuş vuruşları.

Bu hedefe ulaşmak için en az tuşa basma sırası kazanır.


Birisi bu sorunun Emacs eşdeğerini oluşturmak istiyorsa, yapabilir. İlginç bir soru olup olmadığını bilmesi için Emacs'a yeterince aşina değilim.
Joe Z.

Ayrıca, "tüm varsayılan ayarlarla", bir .vimrcdosyadan ayarları yüklemenize izin verilmediğini gösterir .
Joe Z.

"Kurallı" ekleme-tüm-dosya yanıtınıza dayanarak, ekleme işleminin önemi olmadığı için editörden ayrıldığınız modu alıyorum. Belki bu açıklığa kavuşturmak için açıkça belirtilmelidir (yani ekleme modundan <Esc> yapmanız gerekmez).
FireFly

Evet, <Esc>ekleme modundan çıkmak zorunda değilsiniz , ancak normal olarak başlamanız gerekiyor.
Joe Z.

Gördüğüm gibi, bu soru konu dışı olmanın kenarında. Bu bir codegolf değil, bir vimgolf (bunun için bir sayfa var, iyi bir sayfa. İlgilenen herkes bir göz atmalı). Ayrıca metnin çok uzun olduğunu düşünüyorum, bu da golf için çok zaman harcıyor.
shiona

Yanıtlar:


9

1864 tuş vuruşları

Birisi muhtemelen daha uygun bir çözüm üreten bir kod yazabilir, ancak bu şimdilik referans durumunu yener. Bu lanet bir karmaşa ve bunu elle yaptığım için utanıyorum.

İlk olarak, ekleme moduna giriyoruz.

i

Sonra bütün bunlar

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

Komut moduna girmek için escape tuşuna basın. Ve sıkıştırılmış şeyleri çözün. Sıkıştırılmış bazı metinleri sıkıştırdığım için sipariş önemlidir.

<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

onları yemek için yanlış yer değiştirdin, geriye doğru. komutlardan sonra komut modunda kalan ed modunu kullanarak baştaki sütunları kesebilirsiniz.
Hildred

@hildred Aslında tam metinle başladım, genel bir değişiklik yaptım ve tam metni sıkıştırılmış metne başka bir dosyaya ekledim. Bunu tersine çevirmeyi unutmuş olmalıyız :(

Eğer değiştirirseniz so good;so good;ile <Esc>2aso good;<Esc>a, üç tuş vuruşlarını kaydedebilir. Ayrıca, iThat ]! That]!<Enter>başlangıçta 2iThat ]! <Esc>xobaşka bir üç ile değiştirin .
Joe Z.

Ayrıca, DNbaşka bir yerde görünmediği için I, içindeki IDNve I do not içindeki ifadeyi içindeki bu iki ifadeyle kaldırabilirsiniz .
Joe Z.

Ve, tüm örneklerini değiştirmek IDNlike$!<Enter>|;].ile 1ve giriş %s/1/IDNlike$!\n|;]./g20 tuş ya da öylesine hakkında kaydedin.
Joe Z.

6

3.470 tuş vuruşu

i<entire text of file>

Metin dosyası 3.469 karakter uzunluğundadır, bu nedenle ekleme moduna koymak için "i" yazmak ve her karakteri ayrı ayrı yazmak 3.470 tuş vuruşunu alacaktır.


Lol @ pure brute force
Cruncher

Bu, çoğunlukla her şeyden çok son yer referans çözümü olarak düşünülmüştür.
Joe Z.

henüz şu anda da en iyi yarışmacı :-) (hayır, katılmayacağım; üzgünüm)
John Dvorak

Siz daha çok Emacs insanı mısınız? :-)
Joe Z.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.