伸縮性のあるヘビは次のようになります。
<||=|||:)~
伸縮部分|
として知られる伸縮性蛇の垂直バー()の各個別のシーケンスは、その幅の2倍まで個別に拡張可能で、一度拡張されると交互にスラッシュ(、)で描画されます。/
\
上記の特定のヘビには、このような伸縮性のある部分が2つあり、4つの可能なポーズが与えられています。
<||=|||:)~
</\/\=|||:)~
<||=/\/\/\:)~
</\/\=/\/\/\:)~
最小のストレッチポーズで伸びるヘビの一般的な形は、この正規表現で定義されます。
<(\|+=)*\|+:\)~
次のように言葉で表現できます:
<
配列のいずれかの数字が続く|
の接合と=
、続いて標識:)~
。
だから<|:)~
and <||:)~
と<|=|:)~
and <|=|=||=|||||=||:)~
は伸縮性のあるヘビですが<=:)~
、<=|:)~
and <||=:)~
とand <|==||:)~
はそうではありません。
伸縮性のあるヘビは、右ではなく左を向く場合もあり~(:|||=||>
ます。フォームは同じで、ミラー化されています。
チャレンジ
いくつかのスペースを挟んで、向かい合う2つの伸縮性のある蛇の1行の文字列を取り込むプログラムを作成します。両方のヘビは、最も伸びのないポーズになります(すべての垂直バー、スラッシュなし)。文字列は、右向きのヘビの尾で始まり、左向きのヘビの尾で終わります(オプションとして、末尾に改行もあると想定できます)。
たとえば、ヘビの間に5つのスペースがある入力の例を次に示します。
<|=||:)~.....~(:||||>
.
わかりやすくするために、実際のスペース文字の代わりにピリオド()を使用しています。
ヘビ間のゼロスペースも有効な入力です。
<|=||:)~~(:||||>
ヘビは舌がこのように触れているときにキスをしていると言います。
あなたのプログラムは、(重複なし)ヘビはそれらの間の可能なスペースの最小数を有するように蛇の両方の伸縮性の部分のいくつかの組み合わせを拡張する必要がヘビが可能とキスに近いであるように、すなわち。
蛇の尾は両方とも固定されていますが、伸びている部分に応じて、頭と体は動くことができます-右向きのヘビは右、左向きのヘビは左です。
プログラムの出力は、蛇を可能な限りキスに近い形で示す単一行の文字列(オプションの末尾の改行)であり、伸びた部分の垂直バーの代わりにスラッシュを交互に描画します。
たとえば、<|=||:)~.....~(:||||>
(上記から)の出力は次のようになります。
</\=||:)~~(:/\/\/\/\>
これが唯一の解決策です。伸縮性のある部分の他の組み合わせを拡張すると、ヘビが重なり合うか、キスから遠ざかるからです。
可能なソリューションが複数ある場合、出力はいずれか1つになります。
たとえば、入力が
<|=||:)~.....~(:|||=|>
出力は
<|=/\/\:)~~(:/\/\/\=|>
または
</\=||:)~~(:/\/\/\=/\>
ヘビにキスをすることは常に可能であるとは限らないことを忘れないでください、しかしあなたはまだそれらをできるだけ近くに近づける必要があります。
たとえば、入力が
<||=||||:)~...~(:||>
出力は
</\/\=||||:)~.~(:||>
または
<||=||||:)~.~(:/\/\>
ヘビがすでにキスしている場合、出力は入力と同じになります。例えば
<|=||:)~~(:||||>
一般に、伸縮性のある部分を延長すると蛇が重なる場合、出力は入力と同じになります。例えば
<|||=|||:)~..~(:||||=|||||=||||||>
ノート
- 通常どおりstdinまたはコマンドラインから入力を取得するか、文字列を取得する関数を記述します。出力を印刷または返す。
- 必要に応じて
.
、スペース()の代わりに入力および出力でピリオド()を使用できます。
- 重要なのは、置き換えられた一連の垂直バー内でスラッシュが交互に並んでいることです。一般に、ヘビでの順序や、フォワードスラッシュとバックスラッシュのどちらが先かは関係ありません。
- 伸縮性のある部分は途中まで伸びることができません-ちょうど2倍であるか、まったく伸びません。
得点
これはcode-golfです。バイト単位の最短提出が勝ちです。Tiebreakerは以前の回答です。
>
はありません(そうでなければ<
、for (
とで同じになりません)
)が、彼はまた、「置き換えた垂直バーのシーケンス内でスラッシュが交互になることが重要です」と言います。スネーク全般、またはフォワードスラッシュとバックスラッシュのどちらが先かは関係ありません。