Genera un copo de nieve Koch
Un copo de nieve Koch es un triángulo que para cada uno n
, se agrega otro punto equilátero en el medio de cada lado: http://en.wikipedia.org/wiki/Koch_snowflake#Properties
Ya teníamos un Kolmogrov complejidad desafío Koch copo de nieve para n=4
. El nuevo desafío es dibujar un copo de nieve Koch con cualquier n
entre 1
y 10
.
Reglas
Es posible que los copos de nieve no estén codificados en el programa o en los archivos; deben ser generados por su programa.
Su programa debe admitir todos los tamaños
n
entre 1 y 10.El número de lados debe ser ingresado por el usuario a través de std-in.
Debe imprimir una representación gráfica del copo de nieve en la pantalla.
Muestra de copos de nieve Koch con la n
igualdad de 1, 2, 3 y 4 (líneas verdes solo para mayor claridad, no las reproduzca):
En el caso de un desempate, el programa con el mayor número de votos positivos gana (concurso pop).
fuente
n=7
, no puede ver los triángulos recién agregados en el copo de nieve en la pantalla de una computadora. ¿Hay algún "mejor esfuerzo" aquí? ¿Existe una resolución mínima para las soluciones basadas en píxeles?Respuestas:
Mathematica 72
n = 3
Gracias por alephalpha.
fuente
AnglePath
en Mathematica 10.1.Graphics@Line@AnglePath[Nest[Join@@({-1,2,-1,#}&/@#)&,{2,2,2},Input[]-1]Pi/3]
ListLinePlot@AnglePath[Nest[Join@@({#,1,4,1}&/@#)&,{4,4,4},Input[]-1]π/3]
MATLAB,
119115En un giro inusual de los acontecimientos, descubrí que este programa realmente funcionaba mejor mientras jugaba al golf. Primero, se hizo mucho más rápido debido a la vectorización. Ahora, muestra un mensaje útil que le
~n:~
recuerda al usuario qué cantidad ingresar.Las nuevas líneas no son parte del programa.
n = 9:
o
es una cadena arbitraria que es igual al[0 2 4 0]
módulo 6. e iπ / 3 elevado a estas potencias da los vértices de un triángulo equilátero en el plano complejo. El primerokron
se usa para hacer una copia de la lista de puntos con cada uno duplicado 4 veces.~~o
es la forma conveniente de obtener un vector de 4 unos. En segundo lugar,diff(P)
encuentra el vector entre cada par de puntos consecutivos. Los múltiplos de este vector (0, 1/3, (1 + e -iπ / 3 ) / 3 y 2/3) se suman a cada uno de los puntos anteriores.fuente
T-SQL: 686 (sin formato)
Para SQL Server 2012+.
Aunque esto nunca será un contendiente, tuve que ver si podía hacerlo en T-SQL. Se ha ido el enfoque de comenzar con los tres bordes iniciales, luego recurrir a través de cada borde y reemplazarlos con 4 bordes para cada nivel. Finalmente uniendo todo en una sola geometría para el nivel especificado para @i
fuente
LOGOTIPO: 95
Define la función
k
con un parámetro de nivel único.Editar
En este editor en línea http://www.calormen.com/jslogo/ puede agregar
k readword
para usar el indicador de entrada, pero por alguna razón este comando no admite la abreviatura estándarrw
.La solución de 102 caracteres a continuación funciona en USBLogo con entrada estándar como se especifica en la pregunta. Sin embargo, el código necesitaba ligeros cambios ya que UCBLogo tiene un analizador extraño. Requiere
to
yend
estar en líneas y espacios separados antes de que:
sea necesario, pero por otro lado:
son opcionales.fuente
BBC BASIC, 179
REV 1
Como antes, pero en blanco y negro, en versiones sin golf (pero aerodinámicas) y de golf. No es un ganador, a pesar de que hacerlo de esta manera evita la necesidad de un tratamiento especial para n = 1.
REV 0
De acuerdo con la respuesta del OP a @xnor, los copos de nieve rellenos están bien. Esta respuesta fue inspirada por el comentario de xnor. Los colores son solo por diversión y para mostrar la forma en que está construido. Tome un triángulo (magenta en este caso) y superplot con 6 triángulos 1/3 de la base.
fuente
Mathematica - 177
Clip de bonificación de variar el ángulo de la pieza central
fuente
Python 3 - 139
Utiliza la biblioteca de gráficos de tortugas.
fuente
"G">j
,"Q"<j
y utilizarfd(9/b)
para guardar 3 bytes? Además, puede evitar que lasif
declaraciones se multipliquen, por ejemplo,("G">j)
con el argumento9/b
y ponerlas todas en una línea detrásfor
. Oh! Entonces incluso puedes combinarrt
ylt
usar120*(...)-60*(...)
Python 3, 117 bytes
Método:
n
esinput - 1
0000
, unimos todos sus caracteres con101
n
tiempos iterativamente con el truco eval (gracias a @xnor por eso).1
o0
) y luego avanzamos una longitud (99/3^n
) que garantiza un tamaño similar para todosn
.0
en la cadena será inútil, pero solo vuelve a dibujar la misma línea que los primeros0
dibujos.Ejemplo de salida para
input = 3
:fuente
R:
240175Debido a que estoy tratando de entender a R, aquí hay otra versión. Es probable que haya formas mucho mejores de hacer esto y estoy feliz de recibir sugerencias. Lo que he hecho parece muy complicado.
fuente
Sabio fwom youw gwave ...
Sabía que me gustaría intentar implementar esto en Befunge-98 usando TURT, pero no pude averiguar cómo hacerlo y me quedé sentado durante varios meses. ¡Ahora, recientemente, descubrí una forma de hacerlo sin usar la auto-modificación! Y entonces...
Befunge-98 con la huella digital TURT, 103
Primero saquemos algunos detalles de implementación:
I
"imprima" la imagen en un archivo SVG. Si ejecuta esto en CCBI sin el argumento de comando--turt-line=PATH
, aparecerá como un archivo llamado CCBI_TURT.svg por defecto. Esto es lo más cerca que pude llegar a "imprimir una representación gráfica del copo de nieve en la pantalla" con los intérpretes de Funge disponibles que pude encontrar. Tal vez algún día haya un mejor intérprete que tenga una pantalla gráfica para la tortuga, pero por ahora ...Básicamente, esto funciona usando la pila como una especie de sistema L improvisado y expandiéndolo sobre la marcha. En cada pase, si el número superior en la pila es:
f
en la última línea);n-1, -1, n-1, 0, n-1, -1, n-1
.Para
n = 10
, este proceso lleva mucho tiempo (un par de minutos en mi sistema), y el SVG resultante es de ~ 10 MB de tamaño e invisible cuando se ve en el navegador porque no puede ajustar el tamaño del pincel con TURT. IrfanView parece funcionar decentemente si tiene los complementos correctos. No estoy muy familiarizado con SVG, así que no sé cuál es el método preferido para ver esos archivos (especialmente cuando son realmente grandes).Oye, al menos funciona , lo cual, considerando que es Befunge, es algo por lo que estar agradecido por sí solo.
fuente
Python 2, 127 bytes
fuente