Вам будет дано два ввода: строка в кодированном формате длины пробега, определяющая беговую дорожку, и заглавная буква, представляющая полосу, с которой нужно начинать. Например, строка «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Ответы:
Perl,
231219203192189 байтвключает +1 для
-p
Менее гольф:
Бег
Сохраните код выше в файле (скажем
231.pl
). Ввод в виде(\d+\w)+ *\w
. Пример: ввод дорожки4A5B4c3C
и полосы движенияA
:Тестирование
(не в гольф)
@L=map{[/./g]}@L
постобработки.if
используяmap
вместоfor
.источник
JavaScript (ES6),
298334 байтаобъяснение
В основном это решение рассматривает дорожку как лабиринт. Он находит, где находятся все плитки, которые может достичь бегун, и возвращает наибольшее значение найденного им индекса Х.
Первое, что он делает, это декодирует входную строку в массив строк. Вместо того чтобы использовать буквы, он превращает заглавную букву в букву a,
1
а строчную - в букву a0
. Полученная карта будет выглядеть примерно так:После этого он делает первый тайл стартовой дорожки a
2
(только если он уже есть1
) и просматривает каждый тайл, проверяя наличие соседних тайлов2
. Если a1
имеет соседний,2
он становится2
. Приведенная выше карта станет такой, если бегун стартовал с первой строки:Самый высокий X-индекс для a
2
становится результатом.Я сделал очень незначительный надзор, когда сделал первоначальную версию этого, и мне стоило 36 байтов, чтобы взломать его, пока он не заработал, так что, вероятно, можно было бы сделать много улучшений. *вздох*
Ungolfed
Тестовое задание
Бонус: выход включает в себя разобранную карту!
источник