新しい高速道路を構築するのはあなたの責任です。しかし、それは山岳地帯を通り抜けるため、多数の橋とトンネルが必要です。高速道路自体は単一のレベルにとどまる必要があります。
入力
次のように、標準入力で山がどのように見えるかの大まかなASCII記述が提供されます。
/\
/ \
/\ / \
/\ / \/ \
/ \ / \ /\
/ \/ \ / \
_ / \ /\ / \
\ / \ / \ / \ /\
\ / \ / \/ \/ \
\ / \ /
\/ \/
_
最初の列マークで始まり、道路のレベル。山脈は連続しており、最後のセグメントが橋になる場合、偶数個の文字を持ちます。
入力行は100文字を超えることはなく、15行以下であると想定できます。すべての行の長さは同じで、最後にスペースが埋め込まれる可能性があります。道路は山の中や橋としては決して始まりません。入力の道路タイルに続く最初のものは、下り坂または上り坂です。
出力
出力は同じ山の範囲ですが、以前は最初だけだった道路があります。出力は標準出力で提供されます。
これには、多数のルールがあります。
道路は入力に示された場所から始まり、全体を通して同じレベルのままでなければなりません。簡単にするために、次のような既成の道路タイルを用意しました
_
。_______ \ / \/\/
道路は山脈の遠端まで延長する必要があります(つまり、入力ラインの長さが道路の距離を決定します)。
山が道路の行き先である場合は常に、トンネルを掘削する必要があります。トンネルは山を直進し、開始点と終了点に穴を残します(つまり、トンネルは山の斜面を開始点で閉じ括弧、終了点で開き括弧に置き換えます)。
トンネルは、山にトンネルを残します。通常、このトンネルには天井があります。幸いなことに、トンネルが崩壊しないように、既成の道路タイルを使用して天井を補強することができます(トンネルの上の線はトンネル
_
を補強するために使用する必要があります)。/\ / \ /____\ ___)______(__ \/ \/
山の高さが十分でない場合、トンネルを補強する必要はありません。私にとっても奇妙に聞こえますが、事前に作られた道路タイルは、その場合に間隔をあけても保持するのに十分強いと言われています(トンネルの真上に傾斜がある場合、トンネルの天井は描かれません):
/\ /\/__\ ___)______(__ \/ \/
道路が割れ目を横切る必要があるときはいつでも橋が必要です。短い橋の場合、既成の道路タイルは十分に強力ですが、橋の最初と最後にまだ少しサポートが必要です(橋の下の最初の下り坂と最後の上り坂が置き換えられ
Y
、橋の支持梁があります):_____ Y Y \/
長いブリッジには追加のサポートが必要です。長い橋とは、サポートされていない道路タイルが6つ以上連続して並んでいる橋です。長い橋の中心には柱が必要です。柱は、次のような既成の柱梁で簡単に構築できます
|
。各柱にはそれらのうちの2つが必要で、それらは溝の底まで延びています。_____________________________ Y || Y \ /\ || /\ /\/ \ /\ / \||/ \ /\/ \/ \/ \/ \/
入力は、高速道路の建設に必要な全山脈の一部のみを表すため、橋またはトンネルの途中で突然終了する場合があります。長いブリッジルールは最終セグメントに適用され、指定された入力を超える最初の部分がブリッジを再びサポートすると想定できます。
上記のルールに従って、入力に対して以下を取得します。
/\
/ \
/\ / \
/\ / \/ \
/ \ / \ /\
/____\/______________\ /__\
_________)______________________(________)(____)____(______
Y Y Y Y Y Y Y YY
\ / \ / \/ \/ \
\ / \ /
\/ \/
文字数による最短コードが優先されます。行の末尾の空白は、検証のために無視されます。
サンプル入力1
_
\ /\
\ / \
\ / \
\ /\ / \ /\ /
\ /\ / \ / \ /\ /\/ \ /
\ / \ / \/ \ / \/ \/\ /
\/ \ / \ / \/
\ / \/
\/
サンプル出力1
____________________________________________________________
Y || YY ||
\ || / \ ||
\ || / \ ||
\ || /\ / \ || /\ /
\ /\ || / \ / \ /\ |/\/ \ /
\ / \ || / \/ \ / \/ \/\ /
\/ \ || / \ / \/
\||/ \/
\/
サンプル入力2
/\ /\
/ \/ \ /
/\ / \ /\ /
/\ / \ / \/ \ /
/ \ / \/\ / \ /\ /
/ \/ \ / \ / \ /
_/ \ / \/ \/
\ /
\ /\/
\ /\ /
\/ \ /
\ /
\/
サンプル出力2
/\ /\
/ \/ \ /
/\ / \ /\ /
/\ / \ / \/ \ /
/ \ / \/\ / \ /\ /
/____\/________\ /__________________\ /__\ /____
_)________________(__________________)____________________()____()_____
Y || Y
\ || /\/
\ /\ || /
\/ \|| /
\| /
\/
注意
出力の末尾のスペースは、参照ソリューションとの比較のために無視されます。
勝利条件
ゴルフで通例であるように、最短のコードが勝ちます。同点の場合、以前のソリューションが優先されます。
テストケース
同じテストケースを含む2つのテストスクリプトがあります。
呼び出しはどちらの場合でも:<test script> <my program> [arguments]
、./test ruby bridges.rb
または./test.ps1 ./bridges.exe
。
別のメモ
このタスクは、2011〜W24の間に私の大学で開催されたゴルフコンテストの一部でした。出場者のスコアと言語は次のとおりです。
- 304 – Perl
- 343 – C
- 375 – C
- 648 – Python
独自のソリューション(Venteroに感謝)は
- 262 –ルビー