4方向の一時停止の標識に、たくさんの車が並んで待っています。誰が次に行くのか、誰がどの方向に行くのかなどについて混乱しています。明らかに最適ではありません。
あなたの仕事は、最適な方法で一時停止標識の交通をスケジュールすることです。
4つの主要な方向のそれぞれに1つずつ、ターンリクエストの4つの文字列を入力として受け取ります。各リクエストはL、左、Sストレート、またはR右のいずれかです。
LLSLRLS
SSSRRSRLLR
LLRLSR
RRRLLLL
最初の行は、交差点の北口のラインナップです。列に並んでいる最初の車が左に曲がります(つまり、東を出ます)。後続の行は、入ってくる東、南、および西の入り口用です。それで、西から来る最初の車は南を出ることを望みます。
トラフィックは一連のステップで移動します。各ステップで、行の先頭にある車のサブセットを選択して続行する必要があります。選択した車は互いに干渉してはなりません。2台の車が同じ方向から出る場合、または互いの進路を横断する必要がある場合(標準的な右ハンドル規則が与えられている場合)は干渉します。したがって、両方ともまっすぐに行きたい2つの反対の車は同じステップで行くかもしれません。4台すべてが右折を希望する場合があります。反対側の2台の車は両方同時に左折できます。
あなたの仕事は、最小限の一連のステップで交差点をスケジュールすることです。各ステップについて、入ってくる車のコンパスの方向がリストされた行を出力します。上記の例では、最小スケジュールは14ステップです。1つの最小スケジュールは次のとおりです。
N [L from North]
E [S from East]
E [S from East]
E [S from East]
NESW [L from North, R from East, L from South, R from West]
NE [S from North]
EW [R from East]
NESW [L from North, R from East, L from South, R from West]
W [L from West]
EW [L from East, L from West]
NESW [R from North, L from East, R from South, L from West]
NES [L from North, R from East, L from West]
NS [S from North, S from South]
SW [R from South, L from West]
プログラムは、各ラインで50台の車を1分以内で処理できる必要があります。4つの文字列の入力とスケジュールの出力は、言語にとって便利な方法で行うことができます。
最短のプログラムが勝ちます。
より大きな例:
RRLLSSRLSLLSSLRSLR
RLSLRLSLSSRLRLRRLLSSRLR
RLSLRLRRLSSLSLLRLSSL
LLLRRRSSRSLRSSSSLLRRRR
最低38ラウンドが必要です。1つの可能な解決策:
E
EW
E
ESW
S
NS
ES
NESW
NSW
ESW
ES
NSW
NS
NS
NW
EW
NSW
NS
EW
NES
EW
NSW
NE
E
NE
EW
E
E
EW
EW
EW
W
ESW
NSW
NSW
NS
NSW
NEW