V , 54 , 50 ไบต์
¬ ~9ñ9É 11|á
ñ2ñ20lá
ñ$18é 9ñ^y|Ehé
Pf xxywk$hP>ñd
ลองออนไลน์!
โปรแกรมนี้ไม่มีอักขระที่ไม่สามารถพิมพ์ได้
คำอธิบาย:
¬ ~ " Insert the entire printable ASCII range
9ñ ñ " 9 times:
9É " Insert 9 spaces at the beginning of this line
11| " Move to the 11'th column on this line
á<CR> " And append a newline after the 11'th column
ตอนนี้บัฟเฟอร์มีลักษณะดังนี้:
!
"#
$%
&'
()
*+
,-
./
01
23456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
ตอนนี้เราสร้างตรงกลาง:
2ñ ñ " Two times:
20l " Move 20 characters to the right (because 'l' == 'right', duh)
á<CR> " Append a newline
นี่คือสิ่งที่มันแปลก ๆ
$ " Move to the end of this line
18é " Insert 18 spaces before the last character
9ñ " Repeat the following 9 times:
^ " Move to the first non-whitespace character
y| " Yank all the whitespace before the current character.
" We'll call this the "Leading whitespace register"
E " Move to the end of the current WORD (up to before a space)
h " Move back one character
é<CR> " And insert a newline before the current character
P " Paste the leading whitespace for indentation
f " Move forward to a space
xx " Delete two characters
" (Note how we are inbetween the two bottom branches right now)
yw " Yank everything upto the next branch (all spaces)
" We'll paste this on the line up so that we can yank it again later
" To keep track of how far apart the branches are
k$ " Move up a line and to the end of that line
hP " Move back a character and paste the whitespace we yanked
> " Indent this line by one space
ñ " End the loop
นี่คือบันทึกย่อที่สำคัญ >
คำสั่งเป็นจริงผู้ประกอบการซึ่งหมายความว่ามันไม่ได้ทำอะไรโดยไม่โต้แย้งข้อความที่จะดำเนินการเกี่ยวกับ ตัวอย่างเช่น,
>_ "Indent the current line
>> "Indent the current line
>j "Indent the current and next line
>G "Indent every line
แต่เนื่องจากคำสั่งนี้อยู่ในลูปเราสามารถบันทึกอักขระโดยไม่ให้โอเปอเรเตอร์ ในตอนท้ายของลูปถ้าโอเปอเรเตอร์ใดที่ค้างอยู่มันจะกรอก_
(บรรทัดปัจจุบัน) เป็นอาร์กิวเมนต์โดยปริยาย
ตอนนี้ฉันจะยอมรับว่าลูปนี้แปลกเล็กน้อยและมันอาจเป็นเรื่องยากที่จะติดตามว่าข้อความทั้งหมดควรมีลักษณะอย่างไรในเวลาใดก็ตาม ดังนั้นคุณสามารถใช้โปรแกรมที่ง่ายกว่านี้เพื่อดูว่ามันจะมีลักษณะเป็นอย่างไรหลังจากวนรอบN
หากคุณตั้งค่าเป็น 9 คุณจะเห็นว่าเรามีข้อความเพิ่มเติมเล็กน้อยที่จะกำจัด (แค่บรรทัดปัจจุบัน)
dd
ดังนั้นเราจึงลบบรรทัดปัจจุบันด้วย แต่เดี๋ยวก่อน! คุณรู้วิธีที่ฉันพูดว่าผู้ประกอบการจะต้องโต้แย้งซึ่งบางครั้งก็กรอกโดยปริยาย? อาร์กิวเมนต์จะถูกเติมโดยปริยายในตอนท้ายของโปรแกรม ดังนั้นแทนที่จะdd
หรือd_
(ซึ่งเทียบเท่า) เราก็สามารถที่จะd
และปล่อยให้ V กรอกข้อมูลใน_
สำหรับเรา