^
1 N23456
+(` (.)?(\w*6)u
$1 $2
)`(.)? (\w*6)d
$1$2
.* (.).*
$1
Usages uet dpour monter et descendre.
Essayez-le en ligne!
Explication
Ce programme fonctionne en gardant 1N23456derrière la séquence d'instructions. Il garde une trace du matériel actuel en laissant un espace derrière lui. Ensuite, cela prend une instruction à la fois jusqu'à ce qu'il n'y en ait plus.
^
1 N23456
Commencez par mettre 1 N23456avant l'entrée. L'espace avant Nindique qu'il Ns'agit du rapport actuel.
+(` (.)?(\w*6)u
$1 $2
)`(.)? (\w*6)d
$1$2
Ce sont deux étapes de remplacement, regroupées et exécutées jusqu'à ce qu'elles ne modifient plus la chaîne:
(.)?(\w*6)u
$1 $2
Le premier s'occupe de passer la vitesse supérieure. Il recherchera un nombre quelconque d'engrenages après l'espace, suivi d'un a 6, suivi de u( uindique l'instruction de passer à la vitesse supérieure). S'il y avait des caractères avant le 6, il remplace l'espace par le caractère immédiatement après, supprime le uet laisse le reste de la chaîne intact. Etant donné que le 6est obligatoire dans le match, il n’échangera l’espace avec aucun caractère avant le 6. Il ne sera jamais échanger avec le 6.
(.)? (\w*6)d
$1$2
La deuxième étape gère le changement de vitesse et fonctionne de manière similaire. Il recherche éventuellement un caractère avant l'espace, puis quelques autres engrenages après la fin 6, suivis de d. Il échange l'espace avec le caractère qui le précède, le supprime det laisse le reste intact. Si l'espace était au début de la chaîne, il n'y a pas de correspondance pour un caractère avant l'espace, aucun échange n'est donc effectué.
.* (.).*
$1
Quand aucun des remplacements ci-dessus ne peut plus être effectué, tous les changements de vitesse sont terminés. La ligne est débarrassée de tout sauf de l'équipement immédiatement après l'espace. Ceci est le rapport final.