Alguns gostos desonestos baseados em texto não permitem que você entre nas paredes e, se tentar, retrocede. Por que fazer isso quando você pode fazer o jogador se mover na direção válida mais próxima?
O desafio
Escreva um programa de função que, dada uma direção e uma grade de 3 por 3 caracteres, produz a mesma grade depois que o jogador der um passo.
Por exemplo,
9
#..
.@#
#.#
torna-se
#.@
..#
#.#
Entrada
A direção é dada por um único dígito de 1 a 9, cada um correspondendo a 8 direções cardinais e parado. Isso é derivado dos locais relativos dos números em um teclado:
NW N NE .. \ | / ... 7 8 9 W- 4 5 6 -E ... 1 2 3 ../ \ SW S SE
No entanto, você também pode usar os números 123, 456, 789 em vez de 789, 456, 123. Em outras palavras, você pode trocar as 2 linhas ou os números superior e inferior, se assim desejar. Essas são as únicas 2 combinações de índice aceitáveis.A grade 3 por 3 consistirá em 3 caracteres ASCII distintos e imprimíveis, representando piso, paredes e o player que podem ser percorridos. (Nos casos de teste,
.
é usado para piso,#
s são paredes e@
é o jogador)- Você pode escolher quais caracteres seu programa usa, mas você deve indicá-los em sua resposta e eles devem ser consistentes em várias tentativas.
- O personagem que representa o personagem sempre estará no meio da grade 3 por 3, e a direção sempre estará entre 1 e 9 (incl.)
- Você pode receber informações em qualquer ordem
- A grade 3 por 3 pode ser inserida como uma matriz de caracteres, uma matriz de strings, uma string de 9 comprimentos ou outra alternativa razoável.
Resultado
- Retorno de uma função ou saída para StdOut ou alternativa mais próxima
- Espaços à direita e novas linhas são permitidos
- Você deve usar as mesmas representações de caracteres que a entrada
- Os mesmos formatos permitidos para entradas são permitidos para saídas
Como o jogador se move
Se a direção especificada estiver bloqueada por uma parede (por exemplo, se o exemplo acima tiver a direção 6), observe as 2 direções mais próximas:
- Se uma (e apenas uma) direção estiver livre, mova o player nessa direção.
- Se nenhuma direção estiver livre, observe as próximas 2 direções mais próximas (excluindo a direção 5). Se você deu a volta e não encontrou nenhuma direção aberta (jogador cercado por paredes), não mova o jogador
- Se as duas direções estiverem abertas, escolha uma para mover aleatoriamente (embora não necessariamente uniformemente).
Se a direção dada for um 5, não mova o jogador
Casos de teste
( #
= parede, .
= piso, @
= jogador)
Entrada: 9 # .. . @ # #. # Resultado: #. @ .. # #. # Entrada: 3 # .. . @ # #. # Resultado: # .. .. # # @ # Entrada: 7 ##. # @ # .. # Resultado: ## @ ##. #. # ou #. # .. # @. # Entrada: 5 ... . @. ... Resultado: ... . @. ... Entrada: 2 ### # @ # ### Resultado: ### # @ # ###
Pontuação
Isso é código-golfe , então a resposta mais curta em bytes vence.
123;456;789
vez de 789;456;123
?
yuhjklbn
? DESCANSE EM PAZ.