J'ai téléchargé POV-ray et rendu ce style de sphère en métal brillant des années 90:
Votre tâche est de faire la même chose, mais de le faire en implémentant vous-même le moteur de rendu en aussi peu d'octets que possible. Vous n'avez pas à reproduire cette image exacte - n'importe quelle image d'une sphère réfléchissante au-dessus d'un damier infini fera l'affaire, tant qu'elle répond aux critères ci-dessous.
Règles:
L'image doit représenter une sphère réfléchissante planant au-dessus d'un damier infini. Le damier lui-même et son reflet dans la sphère doivent être représentés sur l'image. Il doit être clair visuellement que c'est ce que nous voyons. Au-delà de cela, les détails de la géométrie, des couleurs, des propriétés des matériaux, etc. sont à vous.
Il doit y avoir un certain éclairage dans la scène: les parties de la sphère doivent être plus sombres que les autres parties, et visuellement il devrait être possible de dire approximativement d'où vient la lumière. Au-delà de cela, les détails du modèle d'éclairage sont à vous. (Vous pouvez inventer votre propre modèle d'éclairage simplifié si vous le souhaitez.) La sphère n'a pas à projeter d'ombre.
Les deux critères ci-dessus - s'il ressemble vraiment à une sphère brillante au-dessus d'un damier éclairé par une source lumineuse - seront jugés par la communauté à l'aide du vote. Par conséquent, une réponse doit avoir un score positif pour être éligible à gagner.
La sortie doit être d'au moins 300x300 pixels. Il peut être affiché à l'écran ou écrit dans un fichier, c'est bien.
Votre code devrait fonctionner en moins d'une heure sur un ordinateur moderne raisonnable. (C'est généreux - POV-ray rend la scène ci-dessus presque instantanément.)
Aucune fonctionnalité de lancer de rayons intégrée ne peut être utilisée - vous devez implémenter le rendu vous-même.
Il s'agit de code-golf , donc l'entrée à score positif avec le code le plus court (en octets) l'emporte. Cependant, vous êtes également invité à jouer au méta-jeu pour obtenir le plus de votes en dessinant une jolie image (tout en gardant le code court bien sûr).
Ce défi peut sembler ridiculement difficile, mais comme la géométrie est fixe, l'algorithme de rendu d'une telle scène par lancer de rayons est assez simple. Il s'agit simplement d'itérer sur chaque pixel de l'image de sortie et d'évaluer une expression mathématique pour voir de quelle couleur elle devrait être, alors je suis optimiste que nous verrons de bonnes réponses.
la source
Réponses:
Python 2,
484468467 octetsRemarque: après
if I>0:
une nouvelle ligne suivie d'un caractère de tabulation unique avantt=
...L'exécution du programme créera une image 800x600 nommée s.pgm
Commencé à partir d'une "vraie" formule de ray tracer (peaufinée un peu pour le golf).
Le rendu prend environ 3 secondes sur mon vieux PC mort (0,7 seconde avec du gypse).
la source
0000
pare4
partout.a if b else c
par(c,a)[b]
tant que vous ne comptez pas sur les courts-circuits pour éviter, par exemple, la division par zéro erreur. En outre ,if A:code;return B\nelse:return C
vous pouvez remplacer parcode;return(C,B)[A]
.