Introdução
Vamos jogar mini-golfe! A bola de golfe é representada por a .
e o buraco por a O
. Você quer fazer um buraco em cada buraco, mas não é bom em colocar. De fato, você se recusa a tentar colocar na diagonal! Apenas para cima, para baixo e para os lados.
Você planeja trapacear colocando pára \
- choques extras /
para poder colocar a bola com apenas um tiro. A bola ricocheteia nos pára-choques em ângulo reto, como mostrado nesta figura.
Lembre-se de chamar a sua chance! Diga-nos em que direção você está colocando.
Furos
1: O primeiro buraco é fácil, um tiro certeiro! Não é necessário colocar pára-choques aqui.
Entrada:
. O
Resultado:
right
. O
2: Outro básico, um turno curto. A bola é atingida pelo para-choque no buraco.
Entrada:
.
O
Resultado:
left
/ .
O
ou
down
.
O /
3: Alguns orifícios já possuem pára-choques!
Entrada:
. \O
Resultado:
right
. \O
\/
ou
right
/ \
. /\O
4: Alguns buracos são excessivamente complexos!
Entrada:
/ \ \ /
/ . \ \ /
/ /\/ /\ \ /
/ / / \ \/
/ / /\ \ / \ /
\ \ / \ \/ \/
\ / /
/\ \//\ \ /
/ \ / \ \ \/
\ /\ \ / \ \
\/ \ \/ \ O/ \
/ \/
Saída: (uma solução possível, mais existe)
down
/ \ \ /
/ . \ \ /
/ /\/ /\ \ /
/ / / \ \/
/ / /\ \ / \ /
\ \ / \ \/ \/
/ \ / /
/\ \//\ \ /
\/ \ / \ \ \/
\ /\ \ / \ / \
\/ \ \/ \ O/ \
/ \ \/
\ /
Regras
- A entrada é o buraco do mini-golfe
STDIN
. - A saída é a direção em que você bate na bola e no buraco do mini-golfe com os pára-choques recém-colocados
STDOUT
. - Pára-choques existentes não podem ser movidos.
- Você pode adicionar qualquer número de pára-choques para resolver um buraco.
- Suponha que existam locais válidos para os pára-choques a serem colocados, o que permitirá que o percurso seja resolvido em uma tacada leve.
- O furo de saída pode ser maior que a entrada.
- A entrada pode ser preenchida com espaço em branco à direita, mas especifique na sua resposta se você fizer isso.
- A saída deve parecer correta, mas pode ter espaços em branco à esquerda ou à direita.
- Seu programa deve funcionar para qualquer furo válido. Sinta-se à vontade para postar seus casos de teste também!
Pontuação
Isso é código-golfe . Sua pontuação é o número de caracteres no seu programa. Menor pontuação ganha!
right
, o exemplo 1 # 3 deve serdown
e o exemplo 2 # 2 deve serup
. Desafio interessante, no entanto!.
é a bola que você está batendo eO
é o buraco. Eu errei no # 2 exemplo 1, mas eles devem estar bons agora.Respostas:
Javascript (ES6) - 651 bytes
Cria uma função
G
que aceita uma string (campo de golfe) como entrada e retorna a solução de colocação solicitada. A sequência de entrada pode ou não ter linhas iniciais, linhas finais e espaços em branco finais. A saída não terá espaços em branco à esquerda ou à direita.O código expandido é:
O solucionador opera com a premissa de que qualquer caminho da bola (buraco)
Traçamos o caminho da bola nas quatro direções. Se encontrarmos o caso 3, o problema está resolvido. Se encontrarmos o caso 2, marcamos o local de saída da bola. Se todas as quatro direções resultarem no caso 1, converteremos o primeiro espaço não-pára-choques ao longo de qualquer trajetória em um pára-choques (se o problema for solucionável, é garantido que sempre existe esse espaço) e tentaremos novamente. O para-choque para o qual convertermos terá o mesmo tipo que o último para-choque que nossa trajetória encontrou *. Se a bola ainda estiver presa em um loop, repetimos o processo quantas vezes for necessário. Se o problema for solucionável, é garantido que esse procedimento levará ao resultado 2 ou 3.
(* Observe que, se simplesmente convertermos em um para-choque fixo [por exemplo
\
], existem casos extremamente inventados, mas ainda assim possíveis , onde existe uma solução, mas não conseguimos encontrá-la.)Realizamos um traço semelhante a partir do buraco, levando ao resultado 2 ou 3.
Se o rastreamento da bola e o rastreamento do buraco resultarem no resultado 2, colocamos pára-choques na periferia do percurso que vincula os dois pontos de saída (de fato, esses pára-choques periféricos são colocados independentemente dos resultados do rastreamento, para encurtar o código). Isso completa a solução.
Casos de teste e saídas
Dentro
Fora
Dentro
Fora
Dentro
Fora
fonte
"/\\/\\\n\\.//\n// \\\n\\/ \no \\/"