Joe vive en las Bahamas. Es invierno. Sus hijos están decepcionados porque no hay nieve. Joe necesita hacer nieve para sus hijos. Afortunadamente, tiene una impresora tridimensional. Planea hacer copos de nieve con él. Lamentablemente, no tiene idea de cómo se vería un copo de nieve. De hecho, ¡nunca ha visto un copo de nieve! Permítanos ayudarlo creando un programa que genere automáticamente una imagen 2D de un copo de nieve para él.
Entrada
El diámetro de la imagen (en píxeles), el porcentaje de la imagen que en realidad es un copo de nieve.
Salida
Una imagen de un copo de nieve con el diámetro requerido. Puede guardarse en un archivo o mostrarse al usuario.
Especificaciones
Crea una cuña que tenga un ángulo de 30 grados. Crea un árbol browniano con semilla inicial en el punto de la cuña. Refleje la cuña alrededor del centro de la imagen 12 veces para generar el resto de la imagen. El copo de nieve tiene el color Blanco. El fondo tiene el color negro.
Puntuación
Debido al hecho de que hay diferentes formas de generar un árbol browniano, el puntaje es 10 * número de votos a favor: puntaje de golf.
El puntaje de golf se define como el número de bytes en el programa con los siguientes bonos:
-20% Puede especificar arbitrariamente la simetría del copo de nieve.
-50% Puede especificar la forma del copo de nieve. (Al poder especificar la relación de las longitudes de los lados de la cuña).
La puntuación más alta gana.
Aquí hay una imagen de cuál sería la forma de la cuña con una relación de aproximadamente 2:
Marcador:
Martin Buttner: 10 * 14-409 = -269
Nimi: 10 * 1-733 * .5 = -356.5
Optimizador: 10 * 5 - 648 = -598
¡El ganador es Martin con puntaje -269!
fuente
Respuestas:
Mathematica, 409 bytes
Sin golf:
Esto espera ingresar el formulario
{n,p}
donden
está el tamaño de la imagen en píxeles, yp
es el porcentaje de la imagen que cubrirá el copo de nieve.Se necesita algo así como medio minuto para generar un copo de nieve con los parámetros dados. Puede acelerarlo cambiando el valor de
m
de999
a99
, pero luego el resultado parece un poco escaso. Del mismo modo, puede aumentar la calidad usando números más grandes, pero luego tomará mucho tiempo.Estoy formando el árbol browniano en una red de enteros, colocando nuevas partículas en
{999, 0}
, y moviendo al azar a la izquierda y arriba o abajo (no a la derecha), hasta que golpean las partículas existentes. También estoy restringiendo el movimiento a la cuña entre 0 y 30 grados. Finalmente, reflejo esa cuña en el eje x y la muestro con sus 5 rotaciones.Aquí hay algunos resultados (haga clic para una versión más grande):
Y aquí hay dos animaciones del crecimiento del árbol browniano (10 partículas por cuña por cuadro):
fuente
JavaScript, ES6,
799 740 695 658648Solo cuento las dos etiquetas de lienzo y la función
f
del fragmento a continuación como parte del recuento de bytes. El resto de las cosas es para demostración en vivoPara verlo en acción, simplemente ejecute el fragmento a continuación en un Firefox más reciente que proporcione el tamaño y la relación a través de los cuadros de entrada
Tenga en cuenta que tendrá que ocultar el resultado y luego volver a mostrarlo antes de un copo de nieve consecutivo
Aquí hay algunos ejemplos de renders con diferentes tamaños y porcentajes. El mejor se llama SkullFlake (primero en la lista). Haga clic en las imágenes para verlas en resolución completa.
Mucha ayuda y aportes de Martin y githubphagocyte.
fuente
Haskell,
781733BytesEl programa presenta la opción "especificar la relación de las longitudes de los lados de la cuña", por lo que debe llamarla con tres argumentos de línea de comando:
El argumento # 1 es el tamaño de la imagen, # 2 el% de píxeles en la cuña y # 3 la longitud (en%) del lado más corto de la cuña. La imagen se guarda en un archivo llamado "o.png".
150-50-40:
Mi programa produce copos de nieve con puntas de corte, porque los nuevos píxeles comienzan en el eje central de la cuña (punto verde, ver más abajo) y tienden a permanecer allí, porque se mueven igualmente al azar hacia la izquierda, arriba o abajo. A medida que se descartan los píxeles fuera de la cuña, aparecen líneas rectas en el límite de la cuña (flecha verde). Fui demasiado vago para probar otros caminos para los píxeles.
150-50-40:
Cuando la cuña es lo suficientemente grande (tercer argumento 100) las espigas en el eje medio pueden crecer y luego hay 12 de ellas.
150-40-100:
Pocos píxeles forman formas redondas (izquierda: 150-5-20; derecha 150-20-90).
El programa:
fuente
*-*-100
imagen, sus dos lados alcanzan el borde izquierdo de la imagen (vea la segunda imagen para ver la posición de la cuña). Hay píxeles en aproximadamente la mitad de los lados; las otras mitades están vacías.code style
. Edité mi publicación y configuré pestañas, pero aún aparecen como espacios. ¿Alguien sabe cómo arreglarlo?#
enlace hash en el que puedes hacer clic. Puede pegar su código con pestañas allí y vincularlo.code style
sangrando cada línea 4 espacios.Procesando 2 - 575 caracteres
Toma un archivo f cuya primera línea es el tamaño de la imagen y la segunda es el radio de las escamas. Cada vez que se coloca un nuevo punto, se gira alrededor del centro 12 veces. Esto crea un efecto muy similar al de una cuña girada, pero no exactamente el mismo.
puedes procesar aquí
fuente
color(255)
puede llegarcolor(-1)
a ahorrar un byte