Alphys, o Cientista Real do Underground, terminou um protótipo para um novo quebra-cabeça. No entanto, ela não consegue encontrar alguém disposto a testá-lo.
As regras de seu quebra-cabeça são as seguintes:
O objetivo é chegar ao lado direito, a partir do bloco mais central do lado esquerdo. Para quebra-cabeças com alturas de número par, comece na parte inferior das duas peças centrais. (Exemplos: em uma matriz 4x4 indexada a zero, a posição inicial seria [2,0] - linha 2, coluna 0. Em uma matriz 5x5 indexada a zero, a posição inicial seria [2,0] - linha 2, coluna 0.)
Cada ladrilho colorido tem sua própria função "sádica":
- Ladrilhos rosa e verde (representados como "P" e "G") não fazem nada
- Azulejos vermelhos e amarelos ("R", "Y") são intransitáveis.
- Ladrilhos laranja ("O") fazem o jogador cheirar a laranja
- Ladrilhos roxos ("U") forçam o jogador para o próximo ladrilho na direção em que estão voltados e os fazem cheirar a limões
- Azulejos azuis ("B") são aceitáveis desde que o jogador não cheire a laranja.
Para esclarecer a mecânica do sabor, o cheiro de um jogador persistirá indefinidamente ou até ser substituído por um ladrilho com cheiro diferente, ou seja, se um jogador pisar em um ladrilho laranja, ele sentirá o cheiro de laranja até pisar em um ladrilho roxo.
Além disso, um ladrilho amarelo colocado vertical ou horizontalmente adjacente a um ladrilho azul fará com que o ladrilho azul também fique intransitável.
Sua tarefa é escrever um programa ou função que aceite uma matriz de caracteres bidimensional (ou matriz de cordas 1D ou algum outro formato válido) representando o layout do quebra-cabeça como entrada e produza o quebra-cabeça original e o quebra-cabeça resolvido, com asteriscos ou alguns outro caractere mostrando o caminho correto. Suponha que o quebra-cabeça fornecido seja solucionável.
Use este quebra-cabeça como um exemplo:
BGYBG
PGPBG
PUBPB
OUGYB
PPOPP
Seu programa produziria:
BGYBG
PGPBG
PUBPB
OUGYB
PPOPP
BGYBG
PGPBG
*****
OUGYB
PPOPP
Qualquer quebra-cabeça usado deve ser gerado usando isso .
Aplicam-se regras de código padrão de golfe. As melhores respostas serão as mais curtas para cada idioma. As respostas devem conter o idioma, número de bytes e três casos de teste. Os dois primeiros podem ser qualquer layout que você escolher, mas o terceiro deve ser:
RRRR
RPPR
PUOR
RPBP
fonte
Respostas:
Bytes de C 529
Abordamos o quebra-cabeça dando um primeiro passo para a direita, desde que não fiquemos bloqueados, tentando subir, depois descendo e finalmente voltando para a esquerda. A pesquisa é recursiva e, quando identificamos um caminho bem-sucedido, marcamos os espaços em nossa matriz e retornamos.
Experimente Online
Ungolfed
Exemplo de saída 1
Exemplo de saída 2
Exemplo de saída 3
fonte