Você receberá duas partes de entrada: uma string no formato codificado de duração que define a pista de corrida e uma letra maiúscula representando a pista para começar. Por exemplo, a cadeia "3a4A6b5B" se expande para "aaaAAAAbbbbbbBBBBB". Você usa a sequência expandida para criar uma faixa, como tal:
A) aaaAAAA
B) bbbbbbBBBBB
Esta é uma pista com duas faixas. Letras minúsculas representam ar. Você não pode correr no ar! Letras maiúsculas representam a estrada na qual você pode correr. Seu objetivo para este desafio é, dada uma letra maiúscula, mostrar até que ponto um corredor que começa nessa pista pode correr. Os corredores podem mudar de faixa se houver um pedaço de estrada diretamente acima ou abaixo deles. Eles também podem correr para trás! Nesta faixa em particular, a saída é 0 para qualquer entrada de letra, porque nenhuma das faixas possui estrada executável na posição 1.
Exemplos:
Entrada: "4A5B4c3C", "A"
Esse código se expande para uma faixa que se parece com isso:
A) AAAA
B) BBBBB
C) ccccCCC
A saída para este exemplo é 7 , porque um corredor que começa na pista A pode mover-se para a pista B e depois para a pista C e terminar na 7ª posição.
Entrada: "4A2B3D", "D"
Faixa:
A) AAAA
B) BB
C)
D) DDD
A saída é 3 , porque um corredor que começa na pista D não tem como chegar à pista B ou A
Entrada: "4A4a4A3b6B5C", "A"
Faixa:
A) AAAAaaaaAAAA
B) bbbBBBBBB
C) CCCCC
A saída é 12 , porque o corredor em A pode passar para B e depois voltar para A no final. A distância máxima para "C" também é 12. Para "B" é 0.
Entrada: "12M4n10N11O", "M"
Faixa:
M) MMMMMMMMMMMM
N) nnnnNNNNNNNNNN
O) OOOOOOOOOOO
Exemplo simples com comprimentos de vários dígitos. A saída é 14 .
Entrada: "4A5B1b2B4c3C", "A"
Faixa:
A) AAAA
B) BBBBBbBB
C) ccccCCC
A saída é 8 , porque o corredor em A pode descer para B, depois para C e depois voltar para B. (Obrigado a FryAmTheEggman por este exemplo).
Entrada: "1a2A2a2B1c1C1d3D", "B"
Faixa:
A)aAAaa
B)BB
C)cC
D)dDDD
A saída é 4 . O corredor precisa verificar os dois caminhos para ver o que vai além. (Obrigado a user81655 por este exemplo.)
Entrada: "2A1b1B2C1D3E", "A"
Faixa:
A) AA
B) bB
C) CC
D) D
E) EEE
A saída é 3 . Você tem que correr para trás para chegar ao destino mais distante. (Mais uma vez, obrigado a user81655 por este exemplo.)
Notas:
- Se uma faixa não possui uma letra em uma determinada posição, isso também conta como ar. Assim, se a entrada for "Q" e nenhuma estrada for colocada na pista "Q", a saída deverá ser 0 .
- Existem duas partes de entrada. A primeira é uma string codificada no comprimento da execução. A segunda é uma letra maiúscula (você pode usar o tipo de dados string ou char para isso.) Para facilitar a leitura, deve haver um separador razoável entre essas entradas (espaço, nova linha, guia, vírgula, ponto e vírgula).
- A sequência codificada no comprimento da execução sempre listará os elementos em ordem alfabética
- Quanto mais longo o comprimento de uma faixa puder ser de 1000, portanto, a maior saída possível é 1000.
Gerador de Pistas:
Em homenagem à nossa primeira resposta, aqui está um gerador de faixas. Tente inventar algo para esconder as respostas atuais! (Observação: o fato de o gerador não exibir uma mensagem de erro não significa que seu código de faixa seja necessariamente válido. Veja os exemplos acima para obter o formulário correto.)
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>
fonte
4A2B3D
poderia ser removida? Por exemplo, adicionando0c
? Caso contrário, é de se esperar que, digamos1A1Z
, as faixas BY sejam assumidas como existentes (mas estão vazias)?12M4n10N11O
exemplo, saída 14, é falso: o caminho mais longo começa em M0 e termina em C0, com um comprimento de 25.Respostas:
Perl,
231219203192189 bytesinclui +1 para
-p
Menos golfe:
Corrida
Armazene o código acima em um arquivo (digamos
231.pl
). Entrada na forma de(\d+\w)+ *\w
. Exemplo: introdução de faixa4A5B4c3C
e pistaA
:Suíte de teste
(não jogou golfe)
@L=map{[/./g]}@L
pós - processamento.if
usando emmap
vez defor
.fonte
JavaScript (ES6),
298334bytesExplicação
Basicamente, esta solução trata a pista como um labirinto. Ele encontra onde estão todos os blocos que o corredor pode alcançar e retorna o maior valor do índice X encontrado.
A primeira coisa que faz é decodificar a sequência de entrada em uma matriz de linhas. Em vez de usar letras, ele transforma uma letra maiúscula em uma
1
e uma letra minúscula em a0
. O mapa resultante será mais ou menos assim:Depois disso, ele faz o primeiro bloco da trilha inicial a
2
(apenas se já estiver1
) e percorre todos os blocos, verificando os blocos adjacentes quanto a2
. Se a1
tem um adjacente,2
ele se torna a2
. O mapa acima se tornará este se o corredor iniciar na primeira linha:O índice X mais alto para a
2
se torna o resultado.Fiz uma supervisão muito pequena quando fiz a versão inicial e me custou 36 bytes para hackear até que funcionasse, então provavelmente há muitas melhorias que podem ser feitas nisso. *suspiro*
Ungolfed
Teste
Bônus: A saída inclui o mapa analisado!
fonte