(Esse desafio é muito semelhante, mas esse desafio atual tem complicações adicionais.)
Imagine uma sala bidimensional, onde as paredes são revestidas com espelhos planos.
De repente, um feixe de luz atinge a sala, onde um pedaço de parede está faltando! O raio de luz dança ao redor da sala, sendo refletido pelos espelhos da parede e, eventualmente, saindo da sala novamente.
A lógica
Está dada 5 variáveis: W, H, X, Y e Z .
Agora, o que eles significam?
W, H é o tamanho da sala (incluindo as paredes), com W sendo largura e H sendo altura.
X, Y é a coordenada em que a parede tem o furo. Você pode supor que isso esteja sempre localizado em um revestimento de parede. As coordenadas são baseadas em 0, com o eixo X apontando para a direita e o eixo Y apontando para baixo.
Z é um caractere único, representando a direção em que a luz cai na sala, seja \
ou /
.
A sala deve ser constituída pelos seguintes caracteres:
|
para parede horizontal-
para parede vertical+
para cantos
Exemplo: (W = 7, H = 4)
+-----+
| |
| |
+-----+
Agora que temos um quarto, vamos destruir um dos azulejos, para que um feixe de luz caia no quarto. Feixes de luz são linhas diagonais, representadas por \
e /
caracteres.
Vamos substituir o revestimento de parede em X = 2, Y = 0 por um \
feixe de luz.
+-\---+
| |
| |
+-----+
A luz que entra viaja na diagonal pela sala até atingir a parede do espelho. Se uma parede é atingida, a direção inverte-se ao longo do eixo da parede e o feixe viaja.
+-\---+
|\ \/\|
| \/\/|
+-----+
Neste exemplo, o feixe de luz chega a um ponto em que um canto da parede é atingido, o que provoca que o feixe seja revertido completamente e viaje todo o caminho de volta, eventualmente saindo da sala.
Sua tarefa
Escreva um programa que imprima a sala e todo o caminho do feixe de luz, até que saia da sala novamente ou se repita em um loop infinito.
Entrada
A entrada pode ser recebida em qualquer formato razoável, mas deve incluir os 4 números inteiros W, H, X, Y e o caractere Z, por exemplo [10, 8, 0, 3, \]
.
Você pode assumir que:
- W, H> = 3
- X, Y estão sempre localizados em uma parede
- Z só poderá conter os valores
\
e/
.
Resultado
Você pode decidir se retorna uma sequência ou saída diretamente para stdout
.
Ele deve incluir a parede da sala e o feixe de luz (definido pelos caracteres ASCII acima).
Regras
- As brechas padrão são proibidas.
- Isso é código-golfe , então o código mais curto em bytes, em qualquer idioma, vence.
- Todas as linguagens de codificação criadas antes da publicação deste desafio são permitidas.
Exemplos
Entrada: [5, 4, 2, 0, /]
+-/-+
|/ /|
|\/ |
+---+
Entrada: [20, 3, 0, 1, \]
+------------------+
\/\/\/\/\/\/\/\/\/\|
+------------------+
Entrada: [10, 8, 0, 3, \]
(Exemplo de um loop infinito que não sai da sala novamente.)
+--------+
|/\/\/\/\|
|\/\/\/\/|
\/\/\/\/\|
|\/\/\/\/|
|/\/\/\/\|
|\/\/\/\/|
+--------+
Boa sorte!
-v -sl
, na verdade, é o código sucinto traduzido, impresso, que é executado. Obviamente, isso depende do deverbosifier gerar o código sucinto correto, porque, se isso não acontecer, o código gerado falhará, mesmo que o código detalhado original estivesse tecnicamente correto.