Вам будет дано два ввода: строка в кодированном формате длины пробега, определяющая беговую дорожку, и заглавная буква, представляющая полосу, с которой нужно начинать. Например, строка «3a4A6b5B» раскрывается в «aaaAAAAbbbbbbBBBBB». Затем вы используете расширенную строку для создания дорожки, как таковой:
A) aaaAAAA
B) bbbbbbBBBBB
Это трасса с двумя полосами движения. Строчные буквы обозначают воздух. Нельзя бегать по воздуху! Прописные буквы обозначают дорогу, по которой вы можете проехать. Ваша цель для этого задания - с учетом заглавной буквы вывести, насколько далеко может пробежать гонщик, стартовавший на этой дорожке. Гонщикам разрешено менять полосу движения, если непосредственно над или под ними находится участок дороги. Им также разрешено бежать назад! На этой конкретной дорожке выходной сигнал равен 0 для любого буквенного ввода, поскольку ни одна из дорожек не имеет беговой дороги в позиции 1.
Примеры:
Вход: "4A5B4c3C", "A"
Этот код расширяется до дорожки, которая выглядит следующим образом:
A) AAAA
B) BBBBB
C) ccccCCC
Выходные данные для этого примера - 7 , потому что бегун, начинающий на дорожке A, может переместиться вниз на дорожку B, а затем на дорожку C и в конечном итоге оказаться в седьмой позиции.
Вход: «4A2B3D», «D»
Трек:
A) AAAA
B) BB
C)
D) DDD
Выходное значение равно 3 , потому что бегун, стартующий на дорожке D, не может добраться до дорожки B или A
Вход: "4A4a4A3b6B5C", "A"
Трек:
A) AAAAaaaaAAAA
B) bbbBBBBBB
C) CCCCC
Выходное значение равно 12 , потому что бегущий на А может переключиться на В, а затем вернуться к А в конце. Максимальное расстояние для «C» также равно 12. Для «B» это 0.
Вход: "12M4n10N11O", "M"
Трек:
M) MMMMMMMMMMMM
N) nnnnNNNNNNNNNN
O) OOOOOOOOOOO
Простой пример с многозначными длинами серий. Выход 14 .
Входные данные: "4A5B1b2B4c3C", "A"
Трек:
A) AAAA
B) BBBBBbBB
C) ccccCCC
Выходное значение равно 8 , потому что бегун в А может опуститься до В, затем до С, а затем вернуться к В. (Спасибо 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 . Вы должны бежать назад, чтобы добраться до самого дальнего пункта назначения. (Еще раз спасибо пользователю 81655 за этот пример.)
Примечания:
- Если у дорожки нет буквы в определенной позиции, это тоже считается воздухом. Таким образом, если вход «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
может быть устранена сложность обработки недостающего С ? Например, добавление 0c
? Если нет, ожидается ли, когда, скажем, 1A1Z
были даны данные, предполагается, что полосы BY существуют (но пусты)?
12M4n10N11O
Пример, вывод 14, тогда неверно: самый длинный путь начинается в точке М0 и заканчивается на C0, при длине 25