Vim: 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
Шаги, чтобы вы могли запустить это тоже!
- Скопируйте строку в Vim
- Введите
:s/\^V/<Ctrl-V><Ctrl-V>/g
и нажмите ввод (две буквы должны дать вам синее ^ V)
- Введите
:s/\^R/<Ctrl-V><Ctrl-R>/g
и нажмите Enter (вы должны увидеть синий ^ Rs сейчас)
- Введите
:s/\^X/<Ctrl-V><Ctrl-X>/g
и нажмите ввод (вы должны увидеть синие ^ X сейчас)
- Введите
:s/\^O/<Ctrl-V><Ctrl-O>/g
и нажмите ввод
- Введите
:s/\^A/<Ctrl-V><Ctrl-A>/g
и нажмите ввод
- Введите
:s/\^\[/<Ctrl-V><Ctrl-[>/g
и нажмите enter (эта команда немного отличается, потому что мне нужно было выйти из [)
- Тип
0"yy$
. Команда теперь хранится в регистре y
- Настройте ввод в строке и выполните с
@y
Если кто-то знает лучший способ поделиться командой, пожалуйста, дайте мне знать. Я знаю, что это долго, но это лучшее, что я мог придумать.
Ввод, вывод
Входная строка должна быть одна на любой строке в файле. 1 0 0 4 3 0 0 0 7
Выходные данные просто перезапишут входную строку 1 2 3 4 3 4 5 6 7
объяснение
Алгоритм
- Начните с ненулевого числа, убедитесь, что это не последний номер
- Найти следующее ненулевое число
- Возьми их разницу. Если ответ отрицательный, вам нужно уменьшить значение, чтобы восстановить диапазон, в противном случае увеличить значение, чтобы восстановить диапазон.
- Вернитесь к первому символу и замените каждый ноль, увеличивая / уменьшая предыдущее число.
- Повторяйте, пока не дойдете до последнего символа
Используемые макросы
@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.
@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 - регистр временного хранения. Используется в команде интерполяции (@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
?