Dibuja la curva de punta de flecha de Sierpinski


14

Introducción

La curva de punta de flecha de Sierpinski es una curva cuyo límite es el triángulo de Sierpinski.

Primero comienza así:

 _
/ \

Luego, cada línea se reemplaza con una versión girada de la primera:

  _
 / \
 \ /
_/ \_

Próximo:

     _
    / \
    \ /
   _/ \_
  /     \
  \_   _/
 _  \ /  _
/ \_/ \_/ \

Evolución de la curva de punta de flecha de Sierpinski

Tu tarea

Dado un número n , la salida de la n iteración-ésimo de la punta de flecha de la curva de Sierpinski.

Puede elegir 0 o 1 índice, pero especifique en su respuesta.

Puede generar una imagen o usar Ascii Art en el formato que tengo arriba.

No puede usar las funciones integradas para generar esta curva.

Recuerde, esto es , por lo que gana el código con la menor cantidad de bytes.

Respuestas:


14

Octava, 240236221 bytes

Esto se hizo con la misma idea utilizada aquí, pero tuve que cambiarla para que se ajuste a la curva de punta de flecha sierpinsky.

m=input(0);g=2*pi/6;u=cos(g);v=sin(g);A=[1,0];B=[u,v];C=[-u,v];D=-A;E=-B;F=-C;for k=1:m;f=[E;F;A];b=[A;B;C];A=[B;A;F];d=[C;D;E];C=[D;C;B];E=[F;E;D];B=b;D=d;F=f;end;A=[0,0;cumsum(A)];plot(A(:,1),A(:,2));axis off;axis equal

ingrese la descripción de la imagen aquí


u=.5;v=3^u/2;B=[u,v];C=[-u,v];A=C<0;es 16 bytes más corto :) También puede hacer axis off equalpara guardar otros 5 bytes.
Stewie Griffin

3

Diagramas Haskell +, 176 bytes

import Diagrams.Prelude
import Diagrams.Backend.SVG
g n=renderSVG"a"(mkWidth 99).strokeT.a n
a 0=hrule 1
a n|b<-a(n-1)=b%6<>b<>b%(-6);a%n=rotateBy(1/n).reflectY$a::Trail V2 Double

Crea un archivo svg con fondo transparente llamado "a".

g 0da salida a una línea horizontal, g 1es /¯\.

ingrese la descripción de la imagen aquí


¡Genial, no lo sabía Diagrams!
flawr

@flawr, es genial, pero se aplican las advertencias habituales del programa gráfico Haskell. Sería genial llamar al equivalente de plot() para abrir una ventana.
Angs

2

MSWLogo (Versión 6.5b), 102 bytes

Toma las dos funciones shapeL, shapeRdadas aquí y las fusiona agregando un argumento adicional :a, que llama a la función opuesta cuando se niega.

to s :n :a :l
if :n=0[fd :l stop]
rt :a
s :n-1(-:a):l
lt :a
s :n-1 :a :l
lt :a
s :n-1(-:a):l
rt :a
end

Se sdefine una función , que toma varias iteraciones :n(basadas en 1), ángulo :a, longitud :l. Es recursivo, llamando a una iteración más baja de sí mismo con el ángulo :anegado en dos casos para obtener la orientación correcta.

  • rt :a, lt :agire la tortuga (cosita triangular cuyo camino se traza) derecha, izquierda en :agrados.
  • fd :lmueve la tortuga hacia adelante por :lpasos.

La función se llamará con :aigual a 60.

Puntas de flecha

Aquí, repeates esencialmente un bucle FOR, con contador incorporado repcount. puy pdsignifica "pluma hacia arriba" y "pluma hacia abajo", que impiden que la tortuga dibuje mientras se establece su posición setxy.

Los dibujos de cada iteración se han llamado con una longitud :ligual a power 2 (7-repcount), que disminuye exponencialmente; Esto se debe a que la definición usa lo mismo :len el paso recursivo, por lo que con fijo :lel tamaño total de la salida aumentará exponencialmente con :n.


Este es el idioma adecuado para el trabajo, pero técnicamente las respuestas no tienen datos adicionales, por lo que idealmente codificaría los 60 en su respuesta.
Neil

@Neil Entonces, ¿acabo de incluir 60en el recuento de bytes?
u54112

No estoy seguro de que sea así de simple, pero yo mismo no sé el idioma.
Neil

1

Python 2, 124 bytes

Basado en el código del artículo de Wikipedia.

from turtle import*
def c(o,a):
 if o:o-=1;c(o,-a);lt(a);c(o,a);lt(a);c(o,-a)
 else:fd(9)
n=input()
if n%2==0:lt(60)
c(n,60)

El orden 0 es una línea recta.


Debe cambiar su código para usar un ángulo de 60 grados, de lo contrario no se aproximará al triángulo de Sierpinsky. Además, la orientación cambia según el orden, lo que no creo que sea correcto. trinket.io/python/a803546939
mbomb007

La respuesta del logotipo también ofrece una función que toma el ángulo como parámetro, por lo que creo que está bien. En cuanto a la orientación, sigue siendo la misma curva, solo girada.
BookOwl

Sin embargo, la respuesta del logotipo es siempre la misma rotación. La suya es una rotación diferente para cada orden, y no son todos iguales. Esto no esta bien. Mira las fotos que contiene la pregunta.
mbomb007

¿Dónde dice el desafío que las rotaciones tienen que ser las mismas?
BookOwl

1
Cualquier estudiante de matemáticas puede decirte que un límite debe converger. El tuyo no.
mbomb007

1

Mathematica / Wolfram Language 73 bytes

s=1;Region@Line@AnglePath[Nest[Join@@({#,s=-s,s}&/@#)&,{#~Mod~2},#]Pi/3]&

Explicación simple:
AnglePath [{θ1, θ2, θ3, ...}] proporciona la lista de coordenadas 2D correspondientes a una ruta que comienza en {0,0}, luego toma una serie de pasos de longitud unitaria en ángulos relativos sucesivos θi.

n = 1

Graphics@Line@AnglePath[60°{1,-1,-1}]

n = 2

Graphics@Line@AnglePath[60°{0,1,1, -1,-1,-1, -1,1,1}]

n = 3

Graphics@Line@AnglePath[60°{1,-1,-1, 1,1,1, 1,-1,-1, -1,1,1, -1,-1,-1, -1,1,1, -1,-1,-1, 1,1,1, 1,-1,-1}]

ingrese la descripción de la imagen aquí ingrese la descripción de la imagen aquí


0

Mathematica, 62 bytes

Graphics@Line@AnglePath[Pi/3Nest[Flatten@{-#,1,#,1,-#}&,0,#]]&

¿Cómo funciona?
BookOwl

0

JavaScript (ES6), 180 bytes

f=(n,d=0,r=n=>` `.repeat(n))=>n?f(--n,d=3-d%3).map(s=>r([l=s.length/2,0,1,~n&1][d]+l)+s+r([,1,0,~n&1][d]+l)).concat(f(n,d+1).map(s=>s+r(!(d%3))+a.shift(),a=f(n,d+2))):[`_/\\`[d%3]]
<input type=number min=1 oninput=o.textContent=f(this.value).join`\n`><pre id=o>

Devuelve una matriz de cadenas. ¡Lograr el espacio correcto fue la parte más difícil! Versión de cadena pura para 205 bytes:

f=(n,d=0,r=n=>` `.repeat(n))=>n?f(--n,d=3-d%3).replace(/.+/g,s=>r([l=s.length/2,0,1,~n&1][d]+l)+s+r([,1,0,~n&1][d]+l))+`\n`+f(n,d+1).replace(/.+/g,s=>s+r(!(d%3))+a.shift(),a=f(n,d+2).split`\n`):`_/\\`[d%3]
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.