Un serpent extensible ressemble à ceci:
<||=|||:)~
Chaque séquence distincte de barres verticales ( |
) dans un serpent extensible, appelée partie extensible , peut être étendue individuellement jusqu'à deux fois sa largeur et est dessinée avec des barres obliques alternées ( /
, \
) une fois déployée.
Le serpent ci-dessus a deux telles portions extensibles, ce qui lui donne quatre poses possibles:
<||=|||:)~
</\/\=|||:)~
<||=/\/\/\:)~
</\/\=/\/\/\:)~
La forme générale d'un serpent extensible dans sa pose la moins étirée est définie par cette expression rationnelle :
<(\|+=)*\|+:\)~
Ce qui peut être écrit en mots comme:
<
, suivi par un nombre quelconque de séquences de|
's jointes avec des=
signes, suivi de:)~
.
Ainsi <|:)~
et <||:)~
et <|=|:)~
et <|=|=||=|||||=||:)~
sont des serpents élastiques, mais <=:)~
et <=|:)~
et <||=:)~
et <|==||:)~
ne sont pas.
Les serpents extensibles peuvent également faire face à gauche au lieu de droite, par exemple ~(:|||=||>
. Les formes sont les mêmes, juste en miroir.
Défi
Ecrivez un programme qui prend une seule ligne de deux serpents extensibles se faisant face, avec un certain nombre d'espaces entre eux. Les deux serpents seront dans leur pose la moins étirée (toutes les barres verticales, pas de barres obliques). La chaîne commence par la queue du serpent dirigé vers la droite et se termine par celle du serpent dirigé vers la gauche (vous pouvez éventuellement supposer qu'il existe également une nouvelle ligne).
Par exemple, voici une entrée possible avec cinq espaces entre les serpents:
<|=||:)~.....~(:||||>
J'utilise des points ( .
) au lieu des espaces réels pour plus de clarté.
Zéro espace entre les serpents est également une entrée valide:
<|=||:)~~(:||||>
Nous disons que les serpents s'embrassent lorsque leurs langues se touchent de la sorte.
Votre programme doit étendre une combinaison des parties extensibles des deux serpents de manière à ce qu’ils aient le moins d’espaces possibles (sans se chevaucher), c’est-à - dire que les serpents s’embrassent le plus possible .
Les deux queues des serpents sont fixes mais leurs têtes et leurs corps peuvent bouger - à droite pour le serpent à droite, à gauche pour le serpent à gauche - en fonction des portions étendues qui ont été étendues.
La sortie de votre programme est une chaîne simple ligne (plus une nouvelle ligne facultative) qui montre les serpents aussi près que possible d'embrasser, avec des barres obliques alternées au lieu de barres verticales pour les portions extensibles qui ont été étendues.
Par exemple, la sortie pour <|=||:)~.....~(:||||>
(à partir de ci-dessus) serait:
</\=||:)~~(:/\/\/\/\>
C’est la seule solution ici car avec toute autre combinaison de parties extensibles étendues, les serpents se chevaucheraient ou seraient plus éloignés des baisers.
S'il existe plusieurs solutions possibles, la sortie peut être l'une d'entre elles.
Par exemple, si l’entrée était
<|=||:)~.....~(:|||=|>
la sortie pourrait être
<|=/\/\:)~~(:/\/\/\=|>
ou
</\=||:)~~(:/\/\/\=/\>
N'oubliez pas qu'il ne sera pas toujours possible de faire s'embrasser les serpents, mais vous devez toujours les rapprocher le plus possible.
Par exemple, si l’entrée était
<||=||||:)~...~(:||>
la sortie pourrait être
</\/\=||||:)~.~(:||>
ou
<||=||||:)~.~(:/\/\>
Si les serpents s'embrassent déjà, la sortie sera la même que l'entrée. par exemple
<|=||:)~~(:||||>
En général, la sortie sera la même que l'entrée si l'extension d'une partie élastique rend les serpents superposés. par exemple
<|||=|||:)~..~(:||||=|||||=||||||>
Remarques
- Prend les entrées à partir de stdin ou de la ligne de commande, comme d'habitude, ou écrit une fonction prenant une chaîne. Imprimer ou renvoyer la sortie.
- Vous pouvez utiliser des points (
.
) dans les entrées et les sorties à la place d'espaces () si vous préférez.
- Il est seulement important que les barres obliques alternent dans la séquence de barres verticales qu'elles ont remplacées. Leur ordre dans le serpent en général ou si une barre oblique en avant ou en arrière vient en premier n'a pas d'importance.
- Les portions extensibles ne peuvent pas s’allonger partiellement, c’est exactement une extension double ou pas du tout.
Notation
C'est du code-golf . La soumission la plus courte en octets l'emporte. Tiebreaker est une réponse plus tôt.
>
, ne deviendrait pas non <
plus pareil, identique pour (
et )
), mais il a également déclaré: "Il est seulement important que les barres obliques alternent dans la séquence de barres verticales qu'elles ont remplacées. serpent en général ou si une barre oblique avant ou arrière vient en premier n'a pas d'importance. "