Descargué POV-ray y rendericé este brillante estilo de esfera de metal de los años 90:
Su tarea es hacer lo mismo, pero hacerlo implementando el motor de representación usted mismo en la menor cantidad de bytes posible. No tiene que replicar esta imagen exacta; cualquier imagen de una esfera reflectante sobre un tablero de ajedrez infinito funcionará, siempre que cumpla con los criterios a continuación.
Reglas:
La imagen debe representar una esfera reflectante que se cierne sobre un tablero de ajedrez infinito. Tanto el tablero de ajedrez como su reflejo en la esfera deben mostrarse en la imagen. Debe quedar claro visualmente que esto es lo que estamos viendo. Más allá de esto, los detalles de la geometría, los colores, las propiedades del material, etc., dependen de usted.
Debe haber algo de iluminación en la escena: las partes de la esfera deberían ser más oscuras que otras, y visualmente debería ser posible decir aproximadamente de dónde proviene la luz. Más allá de eso, los detalles del modelo de iluminación dependen de usted. (Puede inventar su propio modelo de iluminación simplificado si lo desea). La esfera no tiene que proyectar una sombra.
Los dos criterios anteriores, si realmente se ve como una esfera brillante sobre un tablero de ajedrez iluminado por una fuente de luz, serán juzgados por la comunidad mediante la votación. Por lo tanto, una respuesta debe tener una puntuación positiva para poder ganar.
La salida debe ser de al menos 300x300 píxeles. Puede mostrarse en la pantalla o escribirse en un archivo, o está bien.
Su código debería ejecutarse en menos de una hora en una computadora moderna razonable. (Esto es generoso: POV-ray hace que la escena anterior sea prácticamente instantánea).
No se puede utilizar la funcionalidad de trazado de rayos incorporada; debe implementar el renderizador usted mismo.
Este es el código de golf , por lo que gana la entrada de puntuación positiva con el código más corto (en bytes). Sin embargo, también puedes jugar al metajuego de obtener la mayor cantidad de votos dibujando una imagen bonita (manteniendo el código corto, por supuesto).
Este desafío puede parecer ridículamente difícil, pero dado que la geometría es fija, el algoritmo para renderizar tal escena mediante el trazado de rayos es bastante sencillo. Realmente es solo un caso de iterar sobre cada píxel en la imagen de salida y evaluar una expresión matemática para ver de qué color debería ser, así que soy optimista de que veremos algunas buenas respuestas.
fuente
Respuestas:
Python 2,
484468467 bytesNota: después de que
if I>0:
haya una nueva línea seguida de un carácter de pestaña única antest=
...La ejecución del programa creará una imagen de 800x600 llamada s.pgm
Comenzó con fórmulas de trazado de rayos "reales" (modificadas un poco para jugar al golf).
El renderizado toma alrededor de 3 segundos en mi vieja PC muerta (0.7 segundos con pypy).
fuente
0000
cone4
todo.a if b else c
con(c,a)[b]
siempre que no se basan en cortocircuito para evitar por ejemplo, la división por cero errores. Tambiénif A:code;return B\nelse:return C
puedes reemplazar concode;return(C,B)[A]
.