2つの入力が与えられます:ランニングトラックを定義するランレングスエンコード形式の文字列と、開始するレーンを表す大文字。たとえば、文字列「3a4A6b5B」は「aaaAAAAbbbbbbBBBBB」に展開されます。次に、展開された文字列を使用して、次のようなトラックを作成します。
A) aaaAAAA
B) bbbbbbBBBBB
これは2車線のトラックです。小文字は空気を表します。オンエアはできません!大文字は、あなたが走れる道を表します。このチャレンジの目標は、大文字を与えられて、そのレーンでスタートするレーサーがどこまで走れるかを出力することです。レーサーは、直上または直下に道路がある場合、車線を切り替えることができます。また、逆方向への実行も許可されています!この特定のトラックでは、いずれのトラックも位置1の走行可能な道路がないため、文字入力の出力は0です。
例:
入力:「4A5B4c3C」、「A」
このコードは、次のようなトラックに展開されます。
A) AAAA
B) BBBBB
C) ccccCCC
この例の出力は7です。これは、レーンAで始まるランナーがレーンBに移動し、次にレーンCに移動して、7番目の位置で終わる可能性があるためです。
入力:「4A2B3D」、「D」
追跡:
A) AAAA
B) BB
C)
D) DDD
出力は3です。これは、レーンDで始まるランナーがレーンBまたはAに到達する方法がないためです。
入力:「4A4a4A3b6B5C」、「A」
追跡:
A) AAAAaaaaAAAA
B) bbbBBBBBB
C) CCCCC
AのランナーはBに切り替えて、最後にAに戻ることができるため、出力は12です。「C」の最大距離も12です。「B」の場合、0です。
入力:「12M4n10N11O」、「M」
追跡:
M) MMMMMMMMMMMM
N) nnnnNNNNNNNNNN
O) OOOOOOOOOOO
複数桁のランレングスを使用した簡単な例。出力は14です。
入力:「4A5B1b2B4c3C」、「A」
追跡:
A) AAAA
B) BBBBBbBB
C) ccccCCC
出力は8です。これは、AのランナーがBに移動し、次にCに移動してからBに戻ることができるためです(この例についてはFryAmTheEggmanに感謝します)。
入力:「1a2A2a2B1c1C1d3D」、「B」
追跡:
A)aAAaa
B)BB
C)cC
D)dDDD
出力は4です。ランナーは、どちらが先に進むかを確認するために両方のパスをチェックする必要があります。(この例のuser81655に感謝します。)
入力:「2A1b1B2C1D3E」、「A」
追跡:
A) AA
B) bB
C) CC
D) D
E) EEE
出力は3です。あなたは最も遠い目的地に到達するために逆走する必要があります。(もう一度、この例のuser81655に感謝します。)
ノート:
- トラックの特定の位置に文字がない場合、それも空気としてカウントされます。そのため、入力が「Q」で、車線「Q」に道路が配置されていない場合、出力は0になります。
- 入力には2つの部分があります。最初は、ランレングスでエンコードされた文字列です。2番目は大文字です(文字列またはcharデータ型を使用できます)。読みやすくするために、これらの入力(スペース、改行、タブ、コンマ、セミコロン)の間に適切な区切り文字が必要です。
- ランレングスでエンコードされた文字列は、常にアルファベット順に要素をリストします
- レーンの全長が可能な最長の長さは1000です。したがって、可能な最大出力は1000です。
トラックジェネレーター:
最初の答えに敬意を表して、ここにトラックジェネレーターがあります。現在の答えを断つために何かを考え出してみてください!(注:ジェネレーターにエラーメッセージが表示されないからといって、トラックコードが必ずしも有効であるとは限りません。適切な形式については上記の例を参照してください。)
function reset() {
var t = document.getElementById("track");
t.innerHTML = "";
for(var i = 0;i<26;i++) {
var c = String.fromCharCode(i+65);
t.innerHTML += "<div><span>"+c+") </span><span id='"+c+"'></span></div>";
}
}
function rand() {
var track = "";
for(var i = 0;i<26;i++) {
var blocks = Math.floor(Math.random()*4);
var start = Math.floor(Math.random()*2);
for(var j = 0;j<blocks;j++) {
var letter = String.fromCharCode(65+i+32*((start+j)%2));
var length = Math.floor(Math.random()*4)+1;
track += length+letter;
}
}
document.getElementById("code").value = track;
}
function gen() {
var s = document.getElementById("code").value;
var check = s.match(/(\d+[A-Za-z])+/);
if(check == null || check[0]!=s) {
alert("Invalid Track");
return false;
}
reset();
var n = s.match(/\d+/g);
var o = s.match(/[A-Za-z]/g);
for(var i = 0;i<n.length;i++) {
var c = o[i].toUpperCase();
document.getElementById(c).textContent += o[i].repeat(n[i]);
}
return true;
}
<body onload="reset()">
Track: <input type="text" id="code" size="75%" /><input type="submit" onclick="gen()" /><input type="button" value="Random Track" onclick="rand()" /><code id="track"/>
</body>
4A2B3D
さを取り除くことができるのではないかと疑問に思いましたか?たとえば、0c
?そうでない場合、say 1A1Z
が与えられたときに予想されますか?レーンBYは存在すると仮定されます(しかし空です)?
12M4n10N11O
例えば、出力14は、次に偽である:最長経路は、25の長さのために、M0及びC0で終わりから始まり