(Ce défi est très similaire, mais ce défi actuel a des complications supplémentaires.)
Imaginez une pièce à 2 dimensions, où les murs sont plaqués de miroirs plats.
Soudain, un faisceau de lumière entre dans la pièce, où il manque un morceau de mur! Le faisceau lumineux danse autour de la pièce, se reflétant dans les miroirs muraux, et quittant finalement la pièce.
La logique
On vous donne 5 variables: W, H, X, Y et Z .
Maintenant, que signifient-ils?
W, H est la taille de la pièce (y compris les murs), W étant la largeur et H étant la hauteur.
X, Y est la coordonnée où le mur a le trou. Vous pouvez supposer que cela se trouve toujours sur une tuile murale. Les coordonnées sont basées sur 0, l'axe X pointant vers la droite et l'axe Y pointant vers le bas.
Z est un caractère unique, représentant la direction dans laquelle la lumière tombe dans la pièce, soit \
ou /
.
La salle doit être constituée des personnages suivants:
|
pour murs horizontaux-
pour murs verticaux+
pour les coins
Exemple: (W = 7, H = 4)
+-----+
| |
| |
+-----+
Maintenant que nous avons une pièce, détruisons l'un des carreaux de mur, donc un faisceau de lumière tombe dans la pièce. Les faisceaux lumineux sont des lignes diagonales, représentées par des caractères \
et /
.
Remplaçons la tuile murale à X = 2, Y = 0 par un \
faisceau de lumière.
+-\---+
| |
| |
+-----+
La lumière entrante traverse la pièce en diagonale jusqu'à ce qu'elle heurte un mur de miroir. Si un mur est touché, la direction s'inverse le long de l'axe du mur et le faisceau se déplace.
+-\---+
|\ \/\|
| \/\/|
+-----+
Dans cet exemple, le faisceau lumineux atteint un point où un coin du mur est touché, ce qui inflige que le faisceau s'inverse complètement et se déplace complètement en arrière, pour finalement quitter la pièce.
Ta tâche
Écrivez un programme qui imprime la pièce et tout le trajet du faisceau lumineux, jusqu'à ce qu'il quitte à nouveau la pièce ou se répète en boucle infinie.
Contribution
L'entrée peut être reçue dans n'importe quel format raisonnable, mais elle doit inclure les 4 entiers W, H, X, Y et le caractère Z, par exemple [10, 8, 0, 3, \]
.
Vous pouvez supposer que:
- W, H> = 3
- X, Y sont toujours situés sur un mur
- Z ne pourra contenir que les valeurs
\
et/
.
Production
Vous pouvez décider si vous renvoyez une chaîne ou si vous la sortez directement stdout
.
Il doit inclure le mur de la pièce et le faisceau lumineux (défini par les caractères ASCII ci-dessus).
Règles
- Les failles standard sont interdites.
- C'est le code-golf , donc le code le plus court en octets, dans n'importe quelle langue, gagne.
- Tous les langages de codage créés avant la publication de ce défi sont autorisés.
Exemples
Contribution: [5, 4, 2, 0, /]
+-/-+
|/ /|
|\/ |
+---+
Contribution: [20, 3, 0, 1, \]
+------------------+
\/\/\/\/\/\/\/\/\/\|
+------------------+
Entrée: [10, 8, 0, 3, \]
(Exemple d'une boucle infinie qui ne quittera plus la pièce.)
+--------+
|/\/\/\/\|
|\/\/\/\/|
\/\/\/\/\|
|\/\/\/\/|
|/\/\/\/\|
|\/\/\/\/|
+--------+
Bonne chance!
-v -sl
c'est en fait le code succinct traduit tel qu'imprimé qui est exécuté. Cela dépend bien sûr du fait que le déverbosificateur génère un code succinct correct, car si ce n'est pas le cas, le code généré échoue, même si le code détaillé original était techniquement correct.