私たちの多くは、Tronというゲームに精通しています。グリッドに配置された「ライトサイクル」を制御します。ライトサイクルは常に前方に移動し(方向を制御しますが)、その背後に永続的なトレイルを残します。トレイルにぶつかると、クラッシュします!
ここでの目標は、特定のパスが有効なループであるかどうか、つまり「クラッシュ」せずに開始点に戻るかどうかを判断することです。これを行うために、ポイントから開始すると仮定し(0,0)
ます。入力はN2E1S2W1
、一連の基本方向(N
is north
、E
is east
、など)の形式で与えられ、それぞれにその方向に移動する距離が続きます。この例では、旅行します
N2 : North 2 to (0,2)
E1 : East 1 to (1,2)
S2 : South 2 to (1,0)
W1 : West 1 to (0,0)
パスは(0,0)
、他の座標(0,0)
に2回以上アクセスすることなく終了する場合に有効と見なされます(正確に2回アクセスします。開始時に1回、終了時に1回)。上記の例よりも注意し(0,0)
て(0,2)
ください(0,1)
。からに到達するには、必ずアクセスする必要があります。
他の例:
input -> output
N1E1S1W1 -> true
N1E1N1E1S2W2 -> true
N1S1E1W1 -> false // Visits (0,0) 3 times
N4E2S2W4S2E2 -> false // Visits (0,2) twice
N3E2S3 -> false // Does not return to (0,0)
N1S1 -> anything //I don't care how you evaluate this case
出力は、trueまたはfalseの値に対して同じ出力を提供する限り、どのような形式でもかまいません。
入力は、S1N2E3
...またはSNNEEE
... の形式で、文字列または文字のリストとして取得できます。グリッドサイズには厳密な制限もありませんが、入力がオーバーフローしないことを前提としています。コードが基本的に健全である限り、などのケースを処理することは重要ではありませんN99999999999999
。
注:ケースを評価することができるN1S1
、E1W1
、S1N1
、とW1E1
しかし、あなたがしたいと思います。それらは技術的には有効なパスですが、チャレンジの「トロン」精神に反します。
得点
これはcode-golfなので、最短の答えが勝ちです!
N
ように1j
、E
など1
、S
など-1j
、とW
て-1
?
N99999999999999
N1S1
定義に一致するのは(0, 0)
2回と(0, 1)
1回であり、これは定義のもとで有効であるためです。