... así que este es un desafío para hacerme un árbol.
Produzca un programa o función llamado árbol que tome un solo argumento entero, N y dibuje un árbol de Pitágoras N niveles profundos, donde el nivel 0 es solo el tronco.
Cada unión del árbol debe colocar el vértice del triángulo en un punto aleatorio en el perímetro (este punto debe estar distribuido uniformemente en al menos 5 puntos igualmente espaciados, o uniformemente en todo el semicírculo).
Opcionalmente, su árbol puede ser 3d, ser colorido o estar iluminado según la hora del día. Sin embargo, este es el código de golf, por lo que gana el archivo más pequeño.
EDITAR: cerraré el concurso y aceptaré la respuesta más pequeña cuando tenga una semana
code-golf
graphical-output
alexander-brett
fuente
fuente
Respuestas:
Mathematica,
246234221 caracteresCiertamente, esta no es la forma más elegante / más corta de hacer esto.
Uso:
f[8]
Y aquí hay ejemplos de salidas para
f[6]
yf[10]
respectivamente.Algo descabellado:
fuente
Show
allí, yModule
también es innecesario.Show
pista, pero ¿cómo puedo deshacerme de élModule
? Si no declarop
local, se sobrescribirá en las llamadas recursivas, por lo que no podría hacer ambas llamadas con el mismop
, ¿verdad?Block
, que es más corto queModule
.CFDG, 134 caracteres
Este no es exactamente válido, porque no puede limitar la profundidad de recursión. Pero el problema solo requiere una solución en este caso . :)
Los resultados se parecen a esto
Para otros 46 caracteres ( 180 caracteres en total), incluso puede colorearlo:
fuente
Postdata,
322270Editar: Parece que
realtime
no se puede usar como semilla generadora aleatoria adecuada. Por lo tanto, utilizaremos la variable de entorno para este propósito y ejecutaremos el programa así:o
Ahora nuestros árboles son menos predecibles. Se agregan 14 bytes al recuento total. Otros cambios: 1) El argumento del programa ahora se pasa en la línea de comando. 2) No hay contador de iteraciones explícito: el tamaño de la pila sirve para este propósito (el ángulo de rotación de la rama izquierda se almacena en la pila, para dibujar la rama derecha, más adelante). 3) No hay una variable con nombre para la profundidad requerida: el tamaño de la pila es su desplazamiento, en la pila. Se deja allí en la salida, es decir, no se consume.
Creo que es bastante obvio: el estado de los gráficos está preparado y el
f
procedimiento se llama recursivamente para cada nivel consecutivo de profundidad, dos veces, para las ramas 'izquierda' y 'derecha'. Trabajar con un rectángulo de1x1
tamaño (ver escala original) ahorra la molestia de multiplicar por la longitud del lado. El ángulo de rotación de la rama izquierda es aleatorio: se usa una de las 5 divisiones aleatorias equidistantes. Creo que evita posibles casos feos de aleatoriedad uniforme.Puede ser lento para una profundidad requerida de más de 20 o menos.
La siguiente es la versión de golf, que utiliza tokens binarios codificados en ASCII (consulte la respuesta de luser droog del tema vinculado). Nota,
cos
,sin
,rand
no puede utilizar esta notación..
fuente
-dGraphicsAlphaBits
es un indicador de salida anti-alias para evitar bordes irregulares de cuadrados más grandes, puede omitirse (u 'ocultarse' en, por ejemplo, la variable de entorno). A algunas personas les puede gustar más sin esta bandera (las hojas de los árboles obtienen más 'volumen'). Bueno, esos 20 bytes no son tan importantes. Yo diría que 20-25% de descuento usando tokens binarios codificados en ascii (a juzgar por la respuesta del tema vinculado). Tal vez 50% de descuento sin codificación ascii, 2 bytes binarios por token de nombre del sistema. Se verá como algunos idiomas generalmente ganadores;)Coffeescript
377B352BMe siento sucio escribiendo coffeescript pero no puedo encontrar un paquete de dibujo decente para python3: - /
Javascript
393B385BUn poco más bonito en javascript y estoy mucho más feliz con el bucle for pero sin la sintaxis [x, y, z] = A, simplemente no puedo acortarlo lo suficiente como para superar el coffeescript
Tengo que decir que estoy un poco molesto, esto es casi el doble que la solución matemática: - / verlo en acción: http://jsfiddle.net/FK2NX/3/
fuente
X
cambioX
, puede encadenarlos. Y puede guardar otro buen grupo de caracteres guardandoM.sin
yM.cos
en variables de un solo carácter.s=M.sin
.rotate
usathis
, ysin
no. Tendría que hacer algo comoR=X.rotate.bind(X)
eso, pero probablemente ya no valga la pena.