Introdução
Jonny quer jogar Frogger. No entanto, ele não é muito bom. De fato, ele apenas tentará seguir em frente, e somente depois que as plataformas forem movidas.
Descubra se o sapo de Jonny consegue chegar ao fim do caminho ou se ele morre a caminho.
Desafio
O programa receberá como entrada uma grade Frogger composta por 0
s e 1
s, com o seguinte formato:
- A grade terá largura e comprimento aleatórios e pelo menos 3x3
1
representa plataformas0
representa águaF
representa a posição inicial do sapo- Cada primeira e última linha da grade será composta por apenas
1
s e não se moverá, e o sapoF
será colocado aleatoriamente na última linha - Cada camada intermediária estará sempre em movimento e terá um
<
ou>
no final de cada linha indicando se ela se move para a esquerda ou direita
É permitido substituir esses símbolos pelos seus, desde que sejam todos distintos e você especifique as substituições na sua resposta.
A entrada pode estar em qualquer formato compatível (string com quebras de linha, array de strings, array de caracteres, ...).
Regras do Desafio
- A cada turno, todas as plataformas se moverão um quadrado, com base na direção indicada pelo sinal
<
ou>
- As plataformas reaparecem no outro lado da grade se forem empurradas para fora da "tela"
- Se o sapo estiver em uma plataforma móvel, ele se moverá junto com ele
- Depois disso, o sapo pulará um quadrado em direção à linha superior. O sapo se move a cada turno.
- O sapo morre se pular na água (
0
) ou tocar o lado da grade junto com uma plataforma em movimento
Seu programa precisa gerar um valor verdadeiro se o sapo sobreviver e um valor falso caso contrário.
Isso é código-golfe , então a resposta mais curta em bytes vence. Aplicam-se brechas padrão.
Exemplos
Exemplo 1
Entrada
11111
00111>
00101<
1F111
Resultado
1
Execução
Turno 1:
11111
10011
01010
1F111
11111
10011
0F010
11111
Turno 2:
11111
11001
F0100
11111
11111
F1001
10100
11111
Turno 3:
11111
1F100
01001
11111
1F111
11100
01001
11111
Exemplo 2
Entrada
11111
00100<
00100<
1F111
Resultado
0
Execução
Turno 1:
11111
01000
01000
1F111
11111
01000
0F000
11111
Turno 2:
11111
10000
F0000
11111
11111
F0000
10000
11111
Turno 3:
11111
00001
00001
11111
<
ou >
no final.
0
na frente, ou vai esperar o próximo 1
? Se puder esperar, seguirá adiante em todos 1
, ou poderá esperar de maneira inteligente? 11111 00001< 00011< 11F11
Ou seja, com o caso de teste , será falsey porque pula na água ( pasta de passos ); será falsey porque se move fora do quadro ( pasta de passos ); ou será verdade porque aguarda com inteligência a segunda plataforma antes de pular para a frente ( pasta de passos )?
0
.
<
ou>
então podemos usar matrizes retangulares como entrada? A propósito, bom desafio!