Vim: 231 lệnh chính
Lưu ý rằng bất kỳ ^ trước một ký tự có nghĩa là bạn nên giữ quyền kiểm soát trong khi nhập ký tự đó
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
Các bước để bạn có thể chạy này quá!
- Sao chép dòng vào Vim
- Nhập
:s/\^V/<Ctrl-V><Ctrl-V>/g
và nhấn enter (hai s sẽ cung cấp cho bạn màu xanh ^ V)
- Nhập
:s/\^R/<Ctrl-V><Ctrl-R>/g
và nhấn enter (bạn sẽ thấy màu xanh ^ R ngay bây giờ)
- Nhập
:s/\^X/<Ctrl-V><Ctrl-X>/g
và nhấn enter (bạn sẽ thấy màu xanh ^ Xs ngay bây giờ)
- Nhập
:s/\^O/<Ctrl-V><Ctrl-O>/g
và nhấn enter
- Nhập
:s/\^A/<Ctrl-V><Ctrl-A>/g
và nhấn enter
- Nhập
:s/\^\[/<Ctrl-V><Ctrl-[>/g
và nhấn enter (lệnh này hơi khác một chút vì tôi cần thoát [)
- Loại
0"yy$
. Lệnh hiện được lưu trong thanh ghi y
- Thiết lập đầu vào trên một dòng và chạy với
@y
Nếu ai đó biết một cách tốt hơn để chia sẻ lệnh, xin vui lòng cho tôi biết. Tôi biết điều này là dài, nhưng đó là điều tốt nhất tôi có thể nghĩ ra.
Đầu ra đầu vào
Chuỗi đầu vào phải ở một mình trên bất kỳ dòng nào trong tệp. 1 0 0 4 3 0 0 0 7 7
Đầu ra sẽ đơn giản ghi đè chuỗi đầu vào 1 2 3 4 3 4 5 6 7
Giải trình
Thuật toán
- Bắt đầu ở một số khác không, đảm bảo đó không phải là số cuối cùng
- Tìm số khác không tiếp theo
- Lấy sự khác biệt của họ. Nếu câu trả lời là âm, bạn nên giảm để sửa phạm vi, nếu không, tăng để sửa phạm vi.
- Quay trở lại ký tự đầu tiên và thay thế mỗi số 0 bằng cách tăng / giảm số trước đó.
- Lặp lại cho đến khi bạn đến nhân vật cuối cùng
Macro được sử dụng
@e - Kiểm tra kết thúc. Số cuối cùng sẽ có một e gắn vào nó. Nếu số bên dưới con trỏ có e ở cuối, hãy xóa e và dừng thực thi. Nếu không, hãy bắt đầu một chu trình nội suy với @b.
mbyiwo^R"Exe@b^[0fel"ty2ldd`b@t
@b - Bắt đầu chu trình nội suy. Lưu số dưới con trỏ cho thao tác trừ (@s) và sau đó tìm thuật ngữ khác không tiếp theo (@f)
mayiwo^R"^V^X ^["sy0dd`a@f
@s - Lưu lệnh trừ để sử dụng trong @d. Nó chỉ đơn giản là (val)^X
nơi (val)
số bắt đầu của bước nội suy. Điều này được đặt bởi lệnh @b.
@f - Tìm thuật ngữ khác không tiếp theo. Viết giá trị hiện tại vào thanh ghi không tên, sau đó viết @f @d
vào dòng tiếp theo, rồi chạy @z. Điều này sẽ lặp lại lệnh này nếu số đó bằng 0 và thực thi @d nếu không.
wmbyiwo@f @d^[@z
@z - Thực thi có điều kiện nếu thanh ghi không tên là 0. Lệnh này mong đợi hai lệnh trên một dòng mới ở định dạng command1 command2
. Nếu thanh ghi không tên là 0, command1
được thực thi, nếu không thì command2
được thực thi. Lưu ý rằng không có lệnh nào có thể có bất kỳ khoảng trắng nào trong đó.
IB0 B^R" ^OWB0 ^OA B0^[0*w"tyiWdd`b@t`
@t - Đăng ký lệnh tạm thời. Lưu trữ các lệnh khác nhau trong một thời gian ngắn trước khi thực hiện chúng. Được sử dụng chủ yếu trong câu lệnh if.
@d - Xác định hướng nội suy. Trừ số đầu tiên trong chuỗi từ số dưới con trỏ (sử dụng @s). Nếu kết quả là âm, phép nội suy phải giảm để ^ X được lưu vào @a. Nếu không, chúng ta nên tăng để ^ A được lưu vào @a. Khi điều này được lưu, hãy quay trở lại điểm bắt đầu của chu trình nội suy này và chạy @i để thực sự nội suy
yiwo^V^X^R"^[0l@sa^V^A-^[0f-"ayhdd`a@i
@a - Lưu trữ ^A
hoặc ^X
tăng hoặc giảm trong bước nội suy. Điều này được đặt bởi lệnh @d.
@i - Nội suy. Sao chép số tại vị trí hiện tại vào @x và chuyển sang số tiếp theo. Nếu số đó bằng 0, hãy thay thế nó bằng @x và chạy @a để sửa đổi nó lên hoặc xuống một cách chính xác, sau đó lặp lại lệnh này. Nếu số không bằng 0, chúng ta đã đạt đến cuối chu kỳ nội suy này. Một số mới nên được bắt đầu với số này là số bắt đầu, vì vậy hãy chạy @e để kiểm tra kết thúc và chạy lại.
"xyiwwmbyiwocw^V^Rx^V^[@a@i @e^[@z
@x - Đăng ký lưu trữ tạm thời. Được sử dụng trong lệnh nội suy (@i)
Phá vỡ các tổ hợp phím
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
chương trình của chúng tôi có thể lấy một giá trị khác nhưnull
?