Le défi consiste à mettre en œuvre un programme de traçage de rayons bidimensionnel, basé sur du texte.
Les sources de lumière blanche sont des @
symboles. R
, G
Et B
sont des filtres de lumière. /
et \
sont des miroirs avec une réflectivité de 80%. ?
est un capteur de lumière. >
, <
, ^
Et V
combiner la lumière dans la direction appropriée (par exemple , si un rouge et un vert est venu en >
la lumière serait émise vers la droite et il serait jaune). D'autres caractères non blancs absorbent toute la lumière. La lumière est émise par les @
symboles dans quatre directions.
Lorsque le programme est exécuté, il doit produire une sortie identique à l'entrée, mais avec des rayons tracés. Parce que c'est bidimensionnel et que je garantis dans l'entrée qu'aucun rayon ne traversera jamais, cela ne posera aucun problème. Chaque rayon doit être représenté par une lettre; r = rouge, g = vert, b = bleu, c = cyan, m = magenta, y = jaune, w = blanc. Il n'y aura jamais de couleurs ternaires. Le boîtier est important pour le différencier de l'entrée. Après cette sortie, les valeurs de lumière capturées par les points d'interrogation (dans l'ordre de leur apparence, de gauche à droite de haut en bas) doivent être sorties sous forme de pourcentages et de couleurs. Par exemple, cette entrée:
/ @
-
\R> ?
@B/
Devrait donner la sortie:
/wwwwwwwwwwwwwwwwww@w
w -
w\R>mmmmmmmmmmmmmmmmm?
w b
@B/
#1: 72% Magenta
Un autre point important à noter - lorsque deux couleurs sont combinées à l'aide d'un "prisme" (les flèches), la force de la lumière combinée devient la force moyenne des deux. La sortie doit être exactement telle que spécifiée (par exemple #x: [x] [x] x% Color ).
Si votre langue ne peut pas lire à partir de STDIN et écrire dans STDOUT, créez une fonction (anonyme ou lambda si disponible) qui accepte l'entrée comme argument et renvoie le résultat.
Les directives vers le compilateur, les structures requises ou recommandées pour tous ou la plupart des programmes créés dans le langage, etc. peuvent être omises. Par exemple, #include
et les using
directives (mais pas #define
) peuvent être supprimées dans les langages de style C, #/usr/bin/perl -options
en Perl et
Module Module1
Sub Main()
End Sub
End Module
dans VB.NET, par exemple. Si vous importez des espaces de noms ou ajoutez des directives include, veuillez les noter dans votre réponse.
Est-ce déjà assez difficile? :)
>
capture la lumière qui passe devant elle. Et si lew
haut passe par làR
, il en va de même pourb
le bas. Enfin (je pense), vous avez tort de ne pas traverser les rayons. Pour donner un exemple sur une ligne, quelle serait la sortie correcte@R> B@
?@
en bas à gauche émet de la lumière dans les quatre directions, n'est-ce pas? Donc, en particulier, cela émet celaw
. Et je n'ai rompu aucun espacement, du moins tel que rendu en chrome. En ce qui concerne le passage direct, mon montage peut clarifier cela.Réponses:
Python,
602559614 caractèresEdit: corrigé pour qu'il ne nécessite pas d'espaces de fin
la source
F#
la source