^
1 N23456
+(` (.)?(\w*6)u
$1 $2
)`(.)? (\w*6)d
$1$2
.* (.).*
$1
Penggunaan u
dan d
untuk naik turun.
Cobalah online!
Penjelasan
Program ini bekerja dengan menjaga 1N23456
urutan instruksi. Ini melacak gigi saat ini dengan memiliki ruang di belakangnya. Kemudian dibutuhkan satu instruksi pada satu waktu sampai tidak ada lagi.
^
1 N23456
Mulailah dengan meletakkan 1 N23456
sebelum input. Ruang sebelumnya N
menunjukkan bahwa itu N
adalah gigi saat ini.
+(` (.)?(\w*6)u
$1 $2
)`(.)? (\w*6)d
$1$2
Ini adalah dua tahap penggantian, dikelompokkan bersama, dan dijalankan hingga berhenti mengubah string:
(.)?(\w*6)u
$1 $2
Yang pertama menangani menggeser gigi ke atas. Ini akan mencari sejumlah roda gigi setelah ruang, diikuti oleh 6
, kemudian diikuti oleh u
( u
menunjukkan instruksi untuk perpindahan gigi ke atas). Jika ada karakter sebelum 6, itu menukar ruang dengan karakter segera setelah itu, menghapus u
, dan meninggalkan sisa string. Karena 6
itu wajib dalam pertandingan, itu hanya akan menukar ruang dengan karakter apa pun sebelum 6
. Itu tidak akan pernah bertukar dengan 6
.
(.)? (\w*6)d
$1$2
Tahap kedua menangani perpindahan gigi ke bawah, dan bekerja dengan cara yang sama. Itu terlihat opsional untuk karakter sebelum ruang, kemudian beberapa gigi lain setelah berakhir 6
, diikuti oleh d
. Ini menukar ruang dengan karakter di depannya, menghapus d
, dan membiarkan sisanya tetap utuh. Jika spasi di awal string, tidak ada kecocokan untuk karakter sebelum spasi, jadi tidak ada swap terjadi.
.* (.).*
$1
Setelah penggantian di atas tidak dapat dilakukan lagi, semua perpindahan gigi telah selesai. Garis dibersihkan dari segala sesuatu kecuali roda gigi segera setelah ruang. Ini adalah gigi terakhir.