タスク
交通交差点構造を取得し、車両が通過するシーケンスを出力するプログラムまたは関数を作成します。
出力は、次の形式で最も4つのラインに含まれている必要があり#. x->y\n
、#
ドットに続くシーケンス番号の数であり.
、x
そしてy
文字です["N", "E", "S", "W"]
。文字で区切る必要があります->
。文字列の配列を返さない場合、各行の末尾は\n
(改行文字)またはシステムに相当するものでなければなりません。
入力は次の形式を取る必要があります。
- パート1:4つの文字。それぞれがN、E、S、W(時計回り)の順にソース道路の宛先道路を持っています 使用できる文字は
N
、S
、W
、E
または。スペースとは、特定の道路に車両がないことを意味します。たとえば、文字列
S WE
は、N台の車両が南に行きたい、スペースはE台の車両がないW
、SE
は西に行きたい、西は東に行きたいという意味です。 - パート2-緊急車両のスペースまたは1文字。
- パート3-どの2つの道路が優先順位を持っているかを決定する2つのキャラクター(たとえば
NE
、北と東の両方が南と西の両方よりも優先順位が高いことを意味します)。簡単な場合は、優先度の低い道路を利用できます(その場合SW
)。
解決できない状況では、などのようunsolvable
にユーザーに明確な1行の文字列を返すことができますno solution
。JavaScriptユーザーは組み込みundefined
定数を使用できます。
これはコードゴルフであるため、バイト単位の最短回答が優先されます。
交通ルール
一部のルールは国の交通ルールに従っていない場合があります。それらのいくつかは、課題を簡単にするために単純化されています。この質問を実際の交通システムのガイドとして使用しないでください。
- チャレンジでは、右側のトラフィックのみを使用できます。
- 交差点は、1つの地点で交わる正確に4つの道路で構成されています。彼らはマークされている
N
(「北」のためなど)、 、S
、。W
E
これらの文字の代わりに使用されるべきであるx
とy
上記の出力例です。
- 各道路には、最大で1台の車両があります。各道路に車両があることは保証されません。各車両は4方向のいずれかで運転できます。左折、右折、直進、またはUターンを行います。
- 2つの車両のパスが交差しない(衝突しない)場合、それらはまったく同じ瞬間に進むことができます。2台の車両の場合、パスは衝突しません(リストは完全ではないかもしれませんが、これは意図的なものであり、単に手がかりを与えるためです)。
- 反対方向から来て、両方がまっすぐに行くか、少なくとも一方が右に曲がって、
- 反対方向から来て、両方とも左に曲がって、
- 反対方向から来て、そのうちの1つが任意の方向に回転するかUターンし、もう1つがUターンします。
- 直交方向から来て、左の1つは右に曲がり、もう1つはUターンしません
以下のパスを衝突させない例。3番目の図面では、NがUターンしても、NのパスはEのパスと衝突することに注意してください。
- 2つのパスが衝突する場合、他のルールを使用する必要があります。2台の車両が同じ優先道路上にある場合(以下を参照)、車両に次のような権利が与えられます:
- それらが直交方向から来る場合、右側の道路から来ます
- もう一方が左に曲がると右に曲がる
- 相手がUターンすると、まっすぐに進むか右に曲がります。
以下の両方の例では、E車両は車両Sに対する優先権を持っています。
以下の例では、最初にW、次にN、次にE、最後にSになります。
この特定の場合、プログラムの出力は次のようになります。
1. W->S
2. N->S
3. E->S
4. S->S
すべてのドライバーは方向指示器を使用し、他のすべてのドライバーが行きたい場所を知っています(簡単にするために、左折とUターンを区別できると想定しています)。
道路には優先標識が付けられていることがありますが、これは上記の規則よりも重要です。優先度の高い道路には優先標識があります(優先標識画像)。優先道路が直進しない場合は、このような追加の標識も使用されます。優先度の低い道路には、降車標識または一時停止標識があります(これらは同等です)。優先度が高いのは、まったくない道路または2つの異なる道路です。プログラムのユーザーは、優先度が高い(または低い)道路を入力できる必要があります。
- 優先度の高い道路から来る車両は、たとえ左側にあるとしても、優先度の低い道路から来る車両よりも優先権があります。
- 同じ優先順位の道路から来る2台の車両のパスが衝突した場合、上記の右側のルールがアクティブになります。
以下の例では、道路SとWに優先標識があります。これは、NとEの車両が道を譲るべきであることを意味します。S車両は右側にあるため、W車両よりも優先されます。次に、Eよりも優先度の高い道路上にあるため、Wになります。車両Nは、右側にあるため、Eからの優先権を持っています。最後に行くとE
この特定の場合、プログラムの出力は次のようになります。
1. S->W
2. W->N
3. N->S
4. E->W
- 1台(およびそれ以上)の車両が緊急車両である可能性があります。これは、どの方向から、またはどの方向に行くかに関係なく、優先順位があります(常に最初に行きます)。プログラムでは、緊急車両である車両をユーザーが入力できるようにする必要があります。最後の例では、Nが緊急車両であると考えて、Nが最初に移動し、次にS、Wが移動し、最後のEが移動します。
Nに緊急車両があるこの特定のケースでは、プログラムの出力は次のようになります。
1. N->S
2. S->W
3. W->N
4. E->W
- 2台の車両がまったく同じ瞬間に進むことが許可されている場合(パスが衝突せず、他の車両に道を譲る必要がない場合)、プログラムはこれを見つけて、同じシーケンス番号を持つものとして返す必要があります
以下の例では、NとEのパスとEとSまたはWとEのパスは衝突しません。SはNに取って代わる必要があり、WはSに取って代わるので、SはEと同時に進むことはできません。NとEはできます。したがって、最初はNとEが一緒に移動し、最後にSとWが移動します。
プログラムの適切な出力は次のとおりです。
1. N->W
1. E->E
2. S->W
3. W->N
行の順序は自由に選択できます
1
(N->W / E->E
と同等ですE->E / N->W
)
- 時々、交通は解決不可能な状況につながる可能性があり、それはどの車両も行くことを許可しません。実際の生活では、ドライバーの一人が自分の通行権を自発的に辞任すると解決します。ここ
unsolvable
で、質問の最初の部分で述べたように、プログラムは出力などを行う必要があります。以下は解決できない状況の例です。EはWに、WはSに、SはEに道を譲るべきです。