Muitos de nós estão familiarizados com o jogo Tron. Você controla um "ciclo de luz" colocado em uma grade. O ciclo da luz sempre se move para a frente (embora você controle a direção) e deixa um rastro permanente atrás dele. Se você topar com uma trilha, você trava!
O objetivo aqui é determinar se um determinado caminho é um loop válido, ou seja, ele retorna ao seu ponto de partida sem "travar". Para fazer isso, assumimos que começamos no ponto (0,0)
. Uma entrada é fornecida no formulário N2E1S2W1
, com uma série de direções cardinais ( N
é north
, E
é east
e assim por diante), cada uma seguida pela distância para viajar nessa direção. Neste exemplo, você viajaria
N2 : North 2 to (0,2)
E1 : East 1 to (1,2)
S2 : South 2 to (1,0)
W1 : West 1 to (0,0)
Um caminho é considerado válido se terminar (0,0)
sem visitar nenhuma outra coordenada mais de uma vez (ele visita (0,0)
exatamente duas vezes. Uma vez no início e outra no final). Lembre-se do que no exemplo acima, para ir de (0,0)
a (0,2)
, nós necessariamente visitamos (0,1)
também.
Outros exemplos:
input -> output
N1E1S1W1 -> true
N1E1N1E1S2W2 -> true
N1S1E1W1 -> false // Visits (0,0) 3 times
N4E2S2W4S2E2 -> false // Visits (0,2) twice
N3E2S3 -> false // Does not return to (0,0)
N1S1 -> anything //I don't care how you evaluate this case
Sua saída pode ser de qualquer forma, desde que ela seja igual para qualquer valor de verdade ou falsey.
A entrada pode ser tomada como uma string ou como uma lista de caracteres, no formato S1N2E3
... ou SNNEEE
... Também não há limite rígido no tamanho da grade, mas assuma que a entrada não excederá nada. Desde que o código seja fundamentalmente sólido, não é crucial lidar com casos como esse N99999999999999
.
NOTA: Você pode avaliar os casos N1S1
, E1W1
, S1N1
, e W1E1
no entanto você gostaria. São caminhos tecnicamente válidos, mas vão contra o espírito "Tron" do desafio.
Pontuação
Isso é código-golfe , então a resposta mais curta vence!
fonte
N1S1
deve ser verdade que seja consistente com suas definições, pois atinge(0, 0)
duas e(0, 1)
uma vez, o que é válido na sua definição.N
como1j
,E
como1
,S
como-1j
eW
como-1
?N99999999999999
Respostas:
Pitão ,
4439 bytesConjunto de teste .
fonte
JavaScript,
247200 bytesn
é uma função da sequência de entradas
que retorna1
para verdadeiro e0
para falsoAqui está uma versão não destruída para referência / explicação:
fonte
contains
não é uma função em nenhum dialeto de javascript. Você poderia especificar o dialeto?Python 3 ,
236161150 bytesExperimente online!
-75 bytes graças ao Leaky Nun
-11 bytes graças ao Leaky Nun Ou, se pudermos receber informações como uma lista de números complexos decodificados pelo comprimento da execução:
Python 2 ,
8573 bytesExperimente online!
-12 bytes graças ao Sr. Xcoder / -9 bytes graças ao Leaky Nun (mesclado em uma edição)
Isso parece muito tempo para mim lol
fonte
Geléia ,
1412 bytesEsta é a minha primeira vez jogando golfe em Jelly. Sugestões são bem vindas.
A entrada é como uma matriz de
[direction, distance]
pares, onde a direção é dada como um número complexo.Explicação:
fonte
Retina , 86 bytes
Experimente online! O link inclui casos de teste. Explicação:
Converta os números para unários.
Duração decodificar as letras.
N111
precisa se transformarNNN
, então um é subtraído de cada número unário e, em seguida, cada 1 duplica a letra anterior.Gere todos os prefixos (ou seja, pontos no caminho) como linhas separadas. Um espaço é prefixado para evitar problemas com linhas vazias.
Classifique todas as letras em cada linha em ordem e exclua os pares correspondentes. Acabamos com um código único para qualquer ponto da grade.
Verifique uma das duas coisas: a) o último ponto não termina em um espaço (ou seja, o loop não foi fechado) ou dois pontos duplicados no caminho. Se o caminho for válido, todas as verificações falharão e o resultado será zero.
Inverta o resultado.
fonte
Perl, 140
Funciona com entrada de string. Talvez eu possa diminuir com a matriz, mas duvido. Feliz por qualquer ajuda adicional no golfe :)
fonte