^
1 N23456
+(` (.)?(\w*6)u
$1 $2
)`(.)? (\w*6)d
$1$2
.* (.).*
$1
Verwendet u
und d
für auf und ab.
Probieren Sie es online!
Erläuterung
Dieses Programm arbeitet so, dass 1N23456
die Reihenfolge der Anweisungen eingehalten wird. Es verfolgt den aktuellen Gang, indem es ein Leerzeichen dahinter hat. Dann dauert es eine Anweisung nach der anderen, bis es keine mehr gibt.
^
1 N23456
Beginnen Sie mit dem Setzen 1 N23456
vor der Eingabe. Das vorangestellte Leerzeichen N
zeigt an, dass N
es sich um den aktuellen Gang handelt.
+(` (.)?(\w*6)u
$1 $2
)`(.)? (\w*6)d
$1$2
Hierbei handelt es sich um zwei Ersetzungsstufen, die in Gruppen zusammengefasst sind und so lange ausgeführt werden, bis die Zeichenfolge nicht mehr geändert wird:
(.)?(\w*6)u
$1 $2
Der erste befasst sich mit dem Hochschalten des Gangs. Nach dem Leerzeichen wird nach einer beliebigen Anzahl von Gängen gesucht, gefolgt von einem 6
, gefolgt von u
( u
zeigt die Anweisung zum Hochschalten an). Wenn sich vor der 6 Zeichen befanden, wird das Leerzeichen mit dem Zeichen unmittelbar danach vertauscht u
, das Zeichen gelöscht und der Rest der Zeichenfolge bleibt erhalten. Da das 6
im Match obligatorisch ist, wird nur das Leerzeichen mit einem Zeichen vor dem ausgetauscht 6
. Es wird nie mit dem tauschen 6
.
(.)? (\w*6)d
$1$2
Die zweite Stufe übernimmt das Herunterschalten und funktioniert ähnlich. Es wird optional nach einem Zeichen vor dem Leerzeichen gesucht, danach nach einigen anderen Gängen, die auf enden 6
, gefolgt von d
. Es tauscht das Leerzeichen mit dem Zeichen davor aus, löscht das d
und lässt den Rest intakt. Wenn sich das Leerzeichen am Anfang der Zeichenfolge befand, gab es keine Übereinstimmung für ein Zeichen vor dem Leerzeichen, sodass kein Auslagerungsvorgang stattfindet.
.* (.).*
$1
Nachdem keiner der oben genannten Austauschvorgänge mehr ausgeführt werden kann, sind alle Schaltvorgänge abgeschlossen. Die Linie wird sofort nach dem Leerzeichen von allem außer dem Zahnrad befreit. Dies ist der letzte Gang.