Eine dehnbare Schlange sieht ungefähr so aus:
<||=|||:)~
Jede separate Folge von vertikalen Balken ( |
) in einer dehnbaren Schlange, die als dehnbarer Abschnitt bezeichnet wird, kann einzeln auf das Doppelte ihrer Breite ausgedehnt werden und wird mit abwechselnden Schrägstrichen ( /
, \
) gezeichnet , sobald sie ausgedehnt sind.
Die bestimmte Schlange oben hat zwei derartig dehnbare Teile, was vier mögliche Posen ergibt:
<||=|||:)~
</\/\=|||:)~
<||=/\/\/\:)~
</\/\=/\/\/\:)~
Die allgemeine Form einer dehnbaren Schlange in ihrer am wenigsten gedehnten Haltung wird durch diesen regulären Ausdruck definiert :
<(\|+=)*\|+:\)~
Was kann in Worten ausgedrückt werden als:
<
, gefolgt von einer beliebigen Anzahl von Sequenzen von|
's, verbunden mit=
Zeichen, gefolgt von:)~
.
Also <|:)~
und <||:)~
und <|=|:)~
und <|=|=||=|||||=||:)~
sind dehnbare Schlangen, aber <=:)~
und <=|:)~
und <||=:)~
und <|==||:)~
sind es nicht.
Dehnbare Schlangen können auch nach links statt nach rechts schauen, z ~(:|||=||>
. Die Formen sind die gleichen, nur gespiegelt.
Herausforderung
Schreiben Sie ein Programm, das eine einzelne Zeile mit zwei sich gegenüberliegenden dehnbaren Schlangen mit einer gewissen Anzahl von Leerzeichen dazwischen aufnimmt. Beide Schlangen befinden sich in ihrer am wenigsten gedehnten Position (alle vertikalen Balken, keine Schrägstriche). Die Zeichenfolge beginnt mit dem Schwanz der nach rechts zeigenden Schlange und endet mit dem Schwanz der nach links zeigenden Schlange (Sie können optional davon ausgehen, dass es auch eine nachgestellte Newline gibt).
Hier ist zum Beispiel eine mögliche Eingabe mit fünf Leerzeichen zwischen den Schlangen:
<|=||:)~.....~(:||||>
Ich verwende Punkte ( .
) anstelle von Leerzeichen, um die Übersichtlichkeit zu verbessern.
Nullabstände zwischen Schlangen sind ebenfalls gültige Eingaben:
<|=||:)~~(:||||>
Wir sagen, die Schlangen küssen sich, wenn sich ihre Zungen so berühren.
Ihr Programm muss eine Kombination der dehnbaren Teile beider Schlangen so erweitern, dass die Schlangen die geringstmögliche Anzahl von Zwischenräumen zwischen sich haben (ohne sich zu überlappen), dh, dass die Schlangen dem Küssen so nahe wie möglich kommen .
Die beiden Schwänze der Schlangen sind fixiert, aber ihre Köpfe und Körper können sich bewegen - rechts für die nach rechts gerichtete Schlange, links für die nach links gerichtete Schlange - je nachdem, welche dehnbaren Teile gedehnt wurden.
Die Ausgabe Ihres Programms ist die einzeilige Zeichenfolge (plus optionaler abschließender Zeilenumbruch), die die Schlangen so nah wie möglich am Küssen zeigt, wobei abwechselnd Schrägstriche anstelle von vertikalen Balken für gestreckte Teile gezeichnet werden, die verlängert wurden.
Die Ausgabe für <|=||:)~.....~(:||||>
(von oben) wäre beispielsweise:
</\=||:)~~(:/\/\/\/\>
Dies ist die einzige Lösung, da sich bei jeder anderen Kombination der gedehnten Teile die Schlangen entweder überlappen oder weiter vom Küssen entfernt sind.
Wenn mehrere Lösungen möglich sind, kann es sich bei der Ausgabe um eine beliebige handeln.
Zum Beispiel, wenn die Eingabe wäre
<|=||:)~.....~(:|||=|>
die Ausgabe könnte sein
<|=/\/\:)~~(:/\/\/\=|>
oder
</\=||:)~~(:/\/\/\=/\>
Denken Sie daran, dass es nicht immer möglich ist, die Schlangen zum Küssen zu bringen, aber Sie müssen sie trotzdem so nah wie möglich bringen.
Zum Beispiel, wenn die Eingabe wäre
<||=||||:)~...~(:||>
die Ausgabe könnte sein
</\/\=||||:)~.~(:||>
oder
<||=||||:)~.~(:/\/\>
Wenn sich die Schlangen bereits küssen, entspricht die Ausgabe der Eingabe. z.B
<|=||:)~~(:||||>
Im Allgemeinen ist die Ausgabe dieselbe wie die Eingabe, wenn sich die Schlangen durch die Ausdehnung eines dehnbaren Abschnitts überlappen würden. z.B
<|||=|||:)~..~(:||||=|||||=||||||>
Anmerkungen
- Übernimmt wie gewohnt die Eingabe von stdin oder der Befehlszeile oder schreibt eine Funktion, die eine Zeichenfolge akzeptiert. Ausgabe drucken oder zurücksenden.
- Sie können Punkte (
.
) in der Eingabe und Ausgabe anstelle von Leerzeichen () verwenden, wenn Sie dies vorziehen.
- Es ist nur wichtig, dass sich Schrägstriche in der Reihenfolge der vertikalen Balken abwechseln, die sie ersetzt haben. Ihre Reihenfolge in der Schlange insgesamt oder ob ein vorwärts oder rückwärts gerichteter Schrägstrich zuerst kommt, spielt keine Rolle.
- Dehnbare Teile können sich nicht teilweise erstrecken - es ist genau doppelt so lang oder überhaupt nicht.
Wertung
Das ist Code-Golf . Die kürzeste Übermittlung in Bytes gewinnt. Tiebreaker ist frühere Antwort.
>
würde es auch nicht <
dasselbe für (
und werden )
), aber er sagt auch "Es ist nur wichtig, dass sich Schrägstriche in der Reihenfolge der vertikalen Balken abwechseln, die sie ersetzt haben Schlange auf freiem Fuß oder ob ein vorwärts oder rückwärts gerichteter Schrägstrich zuerst kommt, spielt keine Rolle. "