러닝 트랙을 정의하는 런 길이 인코딩 형식의 문자열과 시작 레인을 나타내는 대문자의 두 가지 입력이 제공됩니다. 예를 들어 문자열 "3a4A6b5B"는 "aaaAAAAbbbbbbBBBBB"로 확장됩니다. 그런 다음 확장 된 문자열을 사용하여 다음과 같이 트랙을 만듭니다.
A) aaaAAAA
B) bbbbbbBBBBB
이것은 2 개의 차선이있는 트랙입니다. 소문자는 공기를 나타냅니다. 당신은 공중에서 실행할 수 없습니다! 대문자는 주행 할 수있는 도로를 나타냅니다. 이 도전의 목표는 대문자로 주어진 레인에서 출발하는 레이서가 얼마나 멀리 달릴 수 있는지 출력하는 것입니다. 레이서 바로 위 또는 아래에 도로가 있으면 차선을 전환 할 수 있습니다. 그들은 또한 거꾸로 달릴 수 있습니다! 이 트랙에서 문자 입력에 대한 출력은 0 입니다. 트랙 중 어느 것도 트랙 1을 주행 할 수 없기 때문입니다.
예 :
입력 : "4A5B4c3C", "A"
이 코드는 다음과 같은 트랙으로 확장됩니다.
A) AAAA
B) BBBBB
C) ccccCCC
레인 A에서 시작하는 러너가 레인 B로 내려간 다음 레인 C로 이동하여 7 번째 위치에서 끝날 수 있기 때문에이 예제의 출력은 7 입니다.
입력 : "4A2B3D", "D"
과정:
A) AAAA
B) BB
C)
D) DDD
레인 D에서 시작하는 러너가 레인 B 또는 A에 도달 할 방법이 없기 때문에 출력은 3입니다
입력 : "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
A의 러너가 B로 내려간 다음 C로 돌아간 다음 다시 B로 돌아올 수 있기 때문에 출력은 8 입니다.
입력 : "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 이어야합니다 .
- 두 가지 입력이 있습니다. 첫 번째는 실행 길이 인코딩 된 문자열입니다. 두 번째는 대문자입니다 (이 경우 문자열 또는 문자 데이터 유형을 사용할 수 있습니다). 가독성을 위해 이러한 입력 (공백, 줄 바꿈, 탭, 쉼표, 세미콜론) 사이에 적절한 구분 기호가 있어야합니다.
- 실행 길이로 인코딩 된 문자열은 항상 알파벳 순서로 요소를 나열합니다
- 레인의 전체 길이는 가장 길 수있는 길이는 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
? 그렇지 않다면, 1A1Z
레인 BY가 존재한다고 가정하지만 (비어 있음) 예상 되는가?
12M4n10N11O
예는, 출력 (14)은 다음 거짓 : 25의 길이 C0에서 가장 긴 경로 M0에서 시작 단부