系统将为您提供两个输入:一个以游程长度编码格式定义运行轨迹的字符串,以及一个大写字母,表示从其开始的车道。例如,字符串“ 3a4A6b5B”扩展为“ aaaAAAAbbbbbbBBBBBBB”。然后,使用扩展的字符串来创建轨道,如下所示:
A) aaaAAAA
B) bbbbbbBBBBB
这是一条有两条车道的赛道。小写字母代表空气。你不能在空中跑!大写字母表示可以行驶的道路。您的挑战目标是给定大写字母,输出从该车道开始行驶的赛车手能跑多远。如果赛车正上方或正下方有一条道路,则允许赛车手转换车道。他们也被允许倒退!在此特定轨道上,任何字母输入的输出均为0,因为这两个轨道都在位置1处没有可行驶的道路。
例子:
输入: “ 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
输出为12,因为A上的跑步者可以切换到B,然后最后返回A。“ 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。
- 有两个输入。第一个是游程长度编码的字符串。第二个是大写字母(您可以使用string或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
可以消除处理丢失的C in的复杂性?例如,添加0c
?如果不是,那么在1A1Z
给出提示后,是否应假定存在车道BY(但为空)?
12M4n10N11O
示例中,输出14,然后是假:在M0的最长路径的开始和结束在C0,为25的长度