Objectif
Dans ce concours, vous obtenez une chambre au hasard avec une bougie à l'intérieur. Le but est d'écrire le programme le plus court (c'est le golf) qui détermine quelles parties de la pièce sont illuminées par la bougie, en remplaçant les taches sombres par @
des. Le programme devrait prendre une pièce de STDIN, avec la sortie imprimée sur STDOUT.
Exemple d'entrée / pièce
+------+
| C |
| +--+
| \ |
+---------+
La bougie est représentée par une C
, et les murs / miroirs sont représentés avec |
, -
, /
ou \
. Les murs eux-mêmes sont des miroirs. Les coins de la pièce sont représentés par un +
.
Les pièces n'auront jamais de murs en diagonale et la lumière ne pourra jamais s'échapper de la pièce.
De plus, le premier personnage d'une ligne fera toujours partie du mur de la pièce. Le dernier caractère absolu sur chaque ligne sera le mur opposé de la pièce. Aucun personnage entre ces deux ne sera à l'extérieur de la pièce.
Lumière et réflexion
La bougie émet huit faisceaux de lumière (de type laser) dans huit directions de base: N, S, E, W, NE, SE, SW et NW. Ces rayons de lumière rebondissent sur les miroirs comme décrit ci-dessous:
Old Direction of Travel | Mirror | New Direction
N S E W NE SE SW NW / E W N S -- -- -- --
N S E W NE SE SW NW \ W E S N -- -- -- --
N S E W NE SE SW NW | - - - - NW SW NE SW
N S E W NE SE SW NW - - - - - SE NE SW NE
A -
représente la lumière absorbée. La lumière est toujours absorbée par les C ou les +. Il est important de noter que les lumières ne se réfléchissent sur un miroir que lorsqu'il occupe le même espace que le miroir. Ces règles sont beaucoup plus faciles à comprendre lorsque vous dessinez la réflexion sur papier.
Exemple de sortie
En sortie, le programme doit imprimer une image de la pièce éclairée, avec des taches sombres écrites en tant que @
, des taches claires laissées vides et des miroirs non affectés. Pour l'exemple ci-dessus, la sortie serait:
+------+
| C |
|@ @ +--+
| @\ |
+---------+
Cela signifie que si vous retirez les faisceaux de lumière, ils n'atteindront jamais les espaces marqués @
.
Plus d'exemples
Input:
+-----+
| |
| |
| C |
| |
| |
+-----+
Output:
+-----+
| @ @ |
|@ @|
| C |
|@ @|
| @ @ |
+-----+
Input:
+-----+
| \ |
|/ C \+-+
| |
| \ - ++
+------+
Output:
+-----+
| \ @|
|/ C \+-+
| @|
| @\ -@++
+------+
@
également?Réponses:
Python, 292 caractères
Lit dans la pièce, la rend rectangulaire, puis sort de la bougie dans toutes les directions. M contient les caractères miroirs actifs et leur effet (
/\
pour les directions cardinales,|-
pour les autres)Peut gérer des pièces jusqu'à 97 caractères de large.
la source
c - 504
Repose sur la fonction par défaut de K&R appelant la sémantique. Mise en œuvre très simple, sauf pour le violon avec rebondir les rayons.
Non golfé
Validation
la source