Uma formiga caminha pelas bordas (não faces) de um cubo de estrutura de arame. Cada vértice encontrado apresenta um garfo do qual duas novas arestas se ramificam. A formiga escolhe qual caminho virar - left
ou right
. Essas direções são relativas à formiga, que está voltada para o vértice e está fora do cubo. Seu objetivo é determinar, a partir da sequência de left
/ right
escolhas que a formiga tomou, se termina na mesma posição em que foi iniciada.
Por exemplo, se a formiga virar à esquerda quatro vezes ( left left left left
), ela terá percorrido um quadrado no sentido anti-horário e terminado no mesmo local em que foi iniciado. Mas, se for left left left left right
, terminará em um local diferente no cubo. Além disso, se continuar left right right right left
, termina na aresta inicial, mas de frente para o vértice oposto, que não conta como a mesma posição.
O caminho da formiga pode repetir bordas, incluindo a borda em que começou, mas o que importa é onde termina após toda a sequência.
Escreva uma função nomeada que receba a sequência de voltas da formiga e produza se a formiga está de volta à sua posição inicial após a sequência. Atribuir uma função sem nome a uma variável é suficiente para torná-la uma função nomeada.
(Editar: se o seu idioma não puder criar uma função nomeada, ele poderá implementá-la com entradas e saídas através de STDIN / printing ou da pilha. Se isso não for possível, crie um trecho no qual a entrada e a saída são salvas em variáveis.)
Entrada
Uma sequência de left
/ right
decisões de comprimento 0
a 31
inclusivo, representada em um formato de sua escolha. Pode ser uma sequência de letras R
/ L
, uma lista de números 1
/ -1
ou uma matriz de booleanos. Nada extravagante como tê-los como nomes de métodos ou seqüências de caracteres úteis para o seu código.
Poste os casos de teste em seu formato, se for diferente dos casos de teste abaixo.
Saída
True
/ False
, 0
/ 1
, ou os análogos no seu idioma.
Critérios de vitória
Menos bytes ganha. Lembre-se, você precisa atribuir uma função nomeada. Você pode ter código fora da função, mas esses bytes também contam. Sua função deve se comportar corretamente se for chamada várias vezes.
Casos de teste
True
casos (um por linha, o segundo é lista vazia):
1 1 1 1
-1 -1 -1 -1
1 -1 1 -1 1 -1
1 1 -1 -1 1 1 -1 -1
-1 1 1 -1 -1 1 1 -1
1 1 1 -1 -1 -1 -1 1
1 -1 -1 1 -1 -1
1 1 1 1 -1 -1 -1 -1 1 -1 -1 1 -1 -1
-1 -1 -1 1 -1 -1 1 1 -1 1 -1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
False
casos (um por linha):
1
1 1
1 1 1
-1 1
1 -1 -1 -1 1
1 -1 -1 1 1
-1 1 -1 1
1 1 1 1 -1
-1 -1 1 -1 1 -1 -1 1
1 -1 1 1 1 1 -1 -1 -1 1 1 -1 -1 -1
Aqui estão os mesmos casos de teste com L
's e R
' s.
True
casos:
RRRR
LLLL
RLRLRL
RRLLRRLL
LRRLLRRL
RRRLLLLR
RLLRLL
RRRRLLLLRLLRLL
LLLRLLRRLRLRRRRRRRRRRRRRRRRR
False
casos:
R
RR
RRR
LR
RLLLR
RLLRR
LRLR
RRRRL
LLRLRLLR
RLRRRRLLLRRLLL
Desafio de crédito extra
A mesma coisa, mas com um dodecaedro em vez de um cubo. Veja Hunt the Wumpus para idéias.