เป็นกลุ่ม: 231 คำสั่งหลัก
โปรดทราบว่า ^ นำหน้าอักขระใด ๆ หมายความว่าคุณควรควบคุมในขณะที่พิมพ์อักขระนั้น
mbomayiwo^V^R"^V^V^V^X ^V^["sy0dd`a@f ^["bc0yiwo^V^V^V^X^V^R"^V^[0l@sa^V^V^V^A-^V^[0f-"ayhdd`a@i ^["dc0mbyiwo^V^R"Exe@b^V^[0fel"ty2ldd`b@t ^["ec0wmbyiwo@f @d^V^[@z ^["fc0"xyiwwmbyiwocw^V^V^V^Rx^V^V^V^[@a@i @e^V^[@z ^["ic0IB0 B^V^R" ^V^OWB0 ^V^OA B0^V^[0*w"tyiWdd`b@t ^["zd0dd`bAe^[0@e
ขั้นตอนเพื่อให้คุณสามารถเรียกใช้สิ่งนี้ได้เช่นกัน!
- คัดลอกบรรทัดลงในกลุ่ม
- พิมพ์
:s/\^V/<Ctrl-V><Ctrl-V>/g
และกด Enter (ทั้งสองควรให้สีฟ้า ^ V)
- พิมพ์
:s/\^R/<Ctrl-V><Ctrl-R>/g
และกด Enter (คุณควรเห็นสีน้ำเงิน ^ Rs ตอนนี้)
- พิมพ์
:s/\^X/<Ctrl-V><Ctrl-X>/g
และกด Enter (คุณควรเห็นสีน้ำเงิน ^ Xs ทันที)
- พิมพ์
:s/\^O/<Ctrl-V><Ctrl-O>/g
และกด Enter
- พิมพ์
:s/\^A/<Ctrl-V><Ctrl-A>/g
และกด Enter
- พิมพ์
:s/\^\[/<Ctrl-V><Ctrl-[>/g
และกด Enter (คำสั่งนี้จะแตกต่างกันเล็กน้อยเพราะฉันต้องการที่จะหลบหนี [)
- ประเภท
0"yy$
. คำสั่งจะถูกเก็บไว้ใน y register
- ตั้งค่าอินพุตบนบรรทัดแล้วรันด้วย
@y
หากมีคนรู้วิธีที่ดีกว่าในการแบ่งปันคำสั่งโปรดแจ้งให้เราทราบ ฉันรู้ว่ามันยาว แต่มันดีที่สุดที่ฉันจะนึกได้
Input / Output
สตริงอินพุตควรอยู่ตามลำพังบนบรรทัดใด ๆ ในไฟล์ 1 0 0 4 3 0 0 0 7
เอาต์พุตจะเขียนทับสตริงอินพุต 1 2 3 4 3 4 5 6 7
คำอธิบาย
ขั้นตอนวิธี
- เริ่มต้นด้วยตัวเลขที่ไม่ใช่ศูนย์ตรวจสอบให้แน่ใจว่าไม่ใช่ตัวเลขสุดท้าย
- ค้นหาหมายเลขที่ไม่ใช่ศูนย์ถัดไป
- รับความแตกต่าง หากคำตอบนั้นเป็นค่าลบคุณควรจะลดช่วงซ่อมมิฉะนั้นจะเพิ่มขึ้นเพื่อซ่อมแซมช่วง
- กลับไปที่ตัวอักษรตัวแรกและแทนที่แต่ละศูนย์ด้วยการเพิ่ม / ลดจำนวนก่อนหน้า
- ทำซ้ำจนกว่าจะถึงตัวละครตัวสุดท้าย
มาโครที่ใช้แล้ว
@e - ตรวจสอบเพื่อสิ้นสุด หมายเลขสุดท้ายจะมี e ต่อท้าย หากหมายเลขใต้เคอร์เซอร์มี e อยู่ท้ายให้ลบ e และหยุดการเรียกใช้งาน มิฉะนั้นให้เริ่มรอบการแก้ไขด้วย @b
mbyiwo^R"Exe@b^[0fel"ty2ldd`b@t
@b - เริ่มรอบการแก้ไข บันทึกหมายเลขใต้เคอร์เซอร์เพื่อทำการลบ (@s) จากนั้นค้นหาคำที่ไม่เป็นศูนย์ถัดไป (@f)
mayiwo^R"^V^X ^["sy0dd`a@f
@s - เก็บคำสั่งการลบเพื่อใช้ใน @d มันเป็นเพียง(val)^X
ที่(val)
เป็นจำนวนที่เริ่มต้นของขั้นตอนการแก้ไขที่ นี้ถูกกำหนดโดยคำสั่ง @b
@f - ค้นหาคำที่ไม่เป็นศูนย์ถัดไป เขียนค่าปัจจุบันไปยังการลงทะเบียนที่ไม่มีชื่อจากนั้นเขียน@f @d
บนบรรทัดถัดไปแล้วเรียกใช้ @z คำสั่งนี้จะทำซ้ำคำสั่งนี้หากตัวเลขเป็นศูนย์และดำเนินการ @d หากไม่มี
wmbyiwo@f @d^[@z
@z - เงื่อนไขการดำเนินการในกรณีที่ไม่มีชื่อลงทะเบียนเป็น 0 command1 command2
คำสั่งนี้คาดว่าทั้งสองคำสั่งในบรรทัดใหม่ในรูปแบบ หากการลงทะเบียนที่ไม่มีชื่อคือ 0 command1
จะถูกดำเนินการมิฉะนั้นcommand2
จะถูกดำเนินการ โปรดทราบว่าคำสั่งทั้งสองสามารถมีช่องว่างใด ๆ ในนั้น
IB0 B^R" ^OWB0 ^OA B0^[0*w"tyiWdd`b@t`
@t - การลงทะเบียนคำสั่งชั่วคราว เก็บคำสั่งต่าง ๆ ในช่วงเวลาสั้น ๆ ก่อนดำเนินการ ใช้เป็นหลักใน if statement
@d - กำหนดทิศทางการแก้ไข ลบหมายเลขแรกในลำดับจากตัวเลขใต้เคอร์เซอร์ (ใช้ @s) หากผลลัพธ์เป็นลบการแก้ไขต้องลดลงดังนั้น ^ X จะถูกบันทึกเป็น @a มิฉะนั้นเราควรเพิ่มขึ้นเพื่อให้ ^ A ถูกบันทึกลงใน @a เมื่อสิ่งนี้ถูกบันทึกแล้วให้ย้ายกลับไปที่จุดเริ่มต้นของวัฏจักรการสอดแทรกนี้และรัน @i เพื่อแทรกสอดจริง
yiwo^V^X^R"^[0l@sa^V^A-^[0f-"ayhdd`a@i
@a - เก็บอย่างใดอย่างหนึ่ง^A
หรือ^X
เพื่อเพิ่มหรือลดในระหว่างขั้นตอนการแก้ไข นี้ถูกกำหนดโดยคำสั่ง @d
@i - แก้ไข คัดลอกหมายเลขที่ตำแหน่งปัจจุบันไปที่ @x และย้ายไปยังหมายเลขถัดไป หากหมายเลขนั้นเป็นศูนย์ให้แทนที่ด้วย @x และเรียกใช้ @a เพื่อแก้ไขขึ้นหรือลงอย่างถูกต้องจากนั้นทำซ้ำคำสั่งนี้ หากตัวเลขไม่ใช่ศูนย์เราได้สิ้นสุดรอบการแก้ไขนี้แล้ว ใหม่ควรเริ่มต้นด้วยหมายเลขนี้เป็นจุดเริ่มต้นดังนั้นรัน @ e เพื่อตรวจสอบการสิ้นสุดและเรียกใช้อีกครั้ง
"xyiwwmbyiwocw^V^Rx^V^[@a@i @e^[@z
@x - ลงทะเบียนที่เก็บข้อมูลชั่วคราว ใช้ในคำสั่ง interpolate (@i)
ทำลายการกดแป้น
mbo :Set b mark to current position and open a new line below to write macros
mayiwo^V^R"^V^V^V^X ^V^["sy0dd`a@f ^["bc0 :Write to @b and reset line
yiwo^V^V^V^X^V^R"^V^[0l@sa^V^V^V^A-^V^[0f-"ayhdd`a@i ^["dc0 :Write to @d and reset line
mbyiwo^V^R"Exe@b^V^[0fel"ty2ldd`b@t ^["ec0 :Write to @e and reset line
wmbyiwo@f @d^V^[@z ^["fc0 :Write to @f and reset line
"xyiwwmbyiwocw^V^V^V^Rx^V^V^V^[@a@i @e^V^[@z ^["ic0 :Write to @i and reset line
IB0 B^V^R" ^V^OWB0 ^V^OA B0^V^[0*w"tyiWdd`b@t ^["zd0 :Write to @z and reset line
dd`b :Delete this line and move cursor back to original line
Ae^[ :Append an e to the last number
0@e :Move to the beginning of the line and run
0
โปรแกรมของเราสามารถใช้ค่าอื่นเช่นnull
?