พิมพ์ Green Eggs และ Ham เป็นกลุ่ม


18

หนังสือ Green Eggs and Ham โดย Dr. Seuss มีชื่อเสียงเพียง 50 คำที่แตกต่างกันในเรื่องราวทั้งหมดของหนังสือเล่มนี้

งานของคุณคือการสร้างลำดับของการกดแป้นที่จะส่งผลให้ข้อความทั้งหมดของ Green Eggs และ Ham เมื่อนำไปใช้กับไฟล์เปล่าในโปรแกรมแก้ไขข้อความvimเริ่มต้นในโหมดปกติพร้อมการตั้งค่าเริ่มต้นทั้งหมด การกดแป้นพิมพ์ของคุณจะต้องไม่โหลดไฟล์อื่น ๆ ซึ่งเป็นส่วนหนึ่งของการทำงาน - ข้อความทั้งหมดจะต้องสร้างขึ้นภายในตัวแก้ไขเอง

บัฟเฟอร์สุดท้ายของคุณจะต้องดูเหมือนไฟล์นี้แม้ว่ามันจะยังคงอยู่ในโหมดใดก็ตามที่มันจบลงด้วยการอยู่ใน (คุณไม่จำเป็นต้องมีไฟล์สุดท้าย<Esc>เพื่อกลับสู่โหมดปกติ)

การกดแป้นพิมพ์ที่มีเส้นตรงเช่น<C-o>หรือใช้ Shift เพื่อพิมพ์ตัวพิมพ์ใหญ่นับเป็นการกดแป้นเดียว

ลำดับของการกดแป้นที่น้อยที่สุดเพื่อให้บรรลุเป้าหมายนี้ชนะ


หากใครบางคนต้องการสร้าง Emac ที่เทียบเท่ากับคำถามนี้พวกเขาสามารถทำได้ ฉันไม่คุ้นเคยกับ Emacs มากพอที่จะรู้ว่ามันน่าจะเป็นคำถามที่น่าสนใจหรือไม่
Joe Z.

นอกจากนี้ "พร้อมการตั้งค่าเริ่มต้นทั้งหมด" หมายความว่าคุณไม่ได้รับอนุญาตให้โหลดการตั้งค่าจาก.vimrcไฟล์
Joe Z.

ขึ้นอยู่กับคำตอบแทรกทั้งไฟล์ "canonical" ของคุณฉันใช้โหมดที่คุณออกจากตัวแก้ไขหลังจากการแทรกไม่สำคัญ บางทีนี่ควรจะระบุไว้อย่างชัดเจนเพื่อชี้แจง (เช่นคุณไม่ต้อง <Esc> ออกจากโหมดแทรก)
FireFly

ใช่คุณไม่ต้อง<Esc>ออกจากโหมดแทรก แต่คุณต้องเริ่มต้นใหม่ตามปกติ
Joe Z.

อย่างที่ฉันเห็นคำถามนี้อยู่ที่ขอบของการอยู่นอกหัวข้อ มันไม่ใช่ codegolf มันเป็น vimgolf (มีหน้าสำหรับสิ่งนั้นเป็นสิ่งที่ดีผู้ที่สนใจควรดู) ฉันพบว่าข้อความยาวเกินไปทำให้เสียเวลาในการเล่นกอล์ฟมาก
shiona

คำตอบ:


9

2407 การกดแป้น

ใครบางคนอาจเขียนโค้ดบางอย่างที่สร้างทางออกที่ดีที่สุด แต่ตอนนี้เป็นกรณีอ้างอิงในตอนนี้ นี่เป็นความยุ่งเหยิงและฉันรู้สึกละอายใจที่ฉันทำด้วยมือ

ก่อนอื่นเราเข้าสู่โหมดแทรก

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อีกสาม
Joe Z.

นอกจากนี้เนื่องจากDNไม่ปรากฏที่อื่นคุณสามารถลบออกIจากIDNและI do not ในคำสั่งแทนที่ด้วยสองนิพจน์ในนั้น
Joe Z.

และแทนที่ด้วยอินสแตนซ์ทั้งหมดIDNlike$!<Enter>|;].ด้วย1และอินพุต%s/1/IDNlike$!\n|;]./gเพื่อบันทึกการกดแป้นประมาณ 20 ครั้งหรือมากกว่านั้น
Joe Z.

6

การกดแป้น 3,470 ครั้ง

i<entire text of file>

ไฟล์ข้อความมีความยาว 3,469 ตัวอักษรดังนั้นการพิมพ์ "i" เพื่อใส่ไว้ในโหมดแทรกและการพิมพ์อักขระแต่ละตัวทีละตัวจะใช้การกดแป้น 3,470 ครั้ง


Lol @ กำลังดุร้ายบริสุทธิ์
Cruncher

สิ่งนี้มีจุดประสงค์ส่วนใหญ่เป็นโซลูชันอ้างอิงล่าสุดมากกว่าอะไร
Joe Z.

แต่ในปัจจุบันมันเป็นผู้เข้าแข่งขันที่ดีที่สุดเช่นกัน :-) (ไม่ฉันจะไม่เข้าร่วมขอโทษ)
John Dvorak

คุณเป็นคนของ Emacs มากกว่านี้ไหม? :-)
Joe Z.
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.