^
1 N23456
+(` (.)?(\w*6)u
$1 $2
)`(.)? (\w*6)d
$1$2
.* (.).*
$1
Використання u
і d
для вгору і вниз.
Спробуйте в Інтернеті!
Пояснення
Ця програма працює, дотримуючись 1N23456
послідовності інструкцій. Він відстежує поточну передачу, маючи за собою пробіл. Потім потрібна одна інструкція за раз, поки не буде більше.
^
1 N23456
Почніть з введення 1 N23456
перед введенням. Пробіл раніше N
вказує, що N
це поточна передача.
+(` (.)?(\w*6)u
$1 $2
)`(.)? (\w*6)d
$1$2
Це два етапи заміни, згруповані разом і виконуються до тих пір, поки вони не перестануть змінювати рядок:
(.)?(\w*6)u
$1 $2
Перша ручка перемикає передачу вгору. Він буде шукати будь-яку кількість передач після пробілу, а потім a 6
, а потім слідує u
( u
вказує інструкцію щодо перемикання передач вгору). Якщо до 6 були символи, він замінює пробіл символом відразу після нього, видаляє u
та залишає решту рядка недоторканою. Оскільки значення 6
є обов'язковим у поєдинку, воно буде змінювати місця лише будь-яким символом перед символом 6
. Він ніколи не буде мінятися на 6
.
(.)? (\w*6)d
$1$2
Другий етап обробляє перемикання передач вниз і працює аналогічно. Необов'язково виглядає персонаж перед пробілом, потім деякі інші передачі після закінчення 6
, а потім d
. Він міняє простір символом перед ним, видаляє d
, а решту залишає недоторканими. Якщо пробіл знаходився на початку рядка, перед символом пробілу не було відповідності символу, тому не відбувається жодного підміна.
.* (.).*
$1
Після того, як жодна з перерахованих вище замін більше не може бути виконана, всі зміни шестерень завершені. Лінія очищається від усього, крім шестірні, відразу після пробілу. Це заключна передача.