Vẽ đường cong mũi tên Sierpinki


14

Giới thiệu

Các Sierpinski Arrowhead Đường cong là một đường cong đó là giới hạn là Tam giác Sierpinski của.

Đầu tiên nó bắt đầu như thế này:

 _
/ \

Sau đó, mỗi dòng được thay thế bằng một phiên bản xoay của cái đầu tiên:

  _
 / \
 \ /
_/ \_

Kế tiếp:

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

Sierpinki Mũi tên tiến hóa

Nhiệm vụ của bạn

Cho một số n , xuất ra lần lặp thứ n của Đường cong mũi tên Sierpinki.

Bạn có thể chọn 0- hoặc 1 chỉ mục, nhưng vui lòng ghi rõ trong câu trả lời của bạn.

Bạn có thể tạo một hình ảnh, hoặc sử dụng Nghệ thuật Ascii theo định dạng tôi có ở trên.

Bạn không thể sử dụng tích hợp để tạo đường cong này.

Hãy nhớ rằng, đây là , vì vậy mã có ít byte nhất sẽ thắng.

Câu trả lời:


14

Octave, 240 236 221 byte

Điều này được thực hiện với cùng một ý tưởng được sử dụng ở đây nhưng tôi đã phải thay đổi nó để phù hợp với đường cong đầu mũi tên sierpinky.

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

nhập mô tả hình ảnh ở đây


u=.5;v=3^u/2;B=[u,v];C=[-u,v];A=C<0;ngắn hơn 16 byte :) Bạn cũng có thể làm axis off equalđể lưu thêm 5 byte.
Stewie Griffin

3

Sơ đồ Haskell +, 176 byte

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

Làm cho một tập tin svg với nền trong suốt được gọi là "a".

g 0xuất ra một đường ngang, g 1/¯\.

nhập mô tả hình ảnh ở đây


Tuyệt, tôi không biết về Diagrams!
flawr

@flawr, thật tuyệt nhưng các chương trình đồ họa Haskell thông thường được áp dụng. Sẽ thật tuyệt nếu chỉ gọi tương đương plot() với để mở một cửa sổ.
Angs

2

MSWLogo (Phiên bản 6.5b), 102 byte

Thực hiện hai hàm shapeL, shapeRđược đưa ra ở đây và hợp nhất chúng bằng cách thêm một đối số phụ :a, gọi hàm ngược lại khi bị phủ định.

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

Một hàm sđược định nghĩa, trong đó có số lần lặp :n(dựa trên 1), góc :a, độ dài :l. Nó là đệ quy, gọi một lần lặp thấp hơn của chính nó với góc :abị phủ định trong hai trường hợp để có được định hướng chính xác.

  • rt :a, lt :axoay con rùa (hình tam giác có đường đi được) bên phải, bên trái theo :ađộ.
  • fd :ldi chuyển rùa về phía trước theo :lcác bước.

Hàm được gọi :abằng 60.

Đầu mũi tên

Ở đây, repeatvề cơ bản là một vòng lặp FOR, với bộ đếm tích hợp repcount. pupdcó nghĩa là "bút lên" và "bút xuống", ngăn rùa vẽ trong khi vị trí của nó đang được đặt bằng cách sử dụngsetxy .

Các bản vẽ của mỗi lần lặp đã được gọi với chiều dài :lbằng power 2 (7-repcount), giảm theo cấp số nhân; điều này là do định nghĩa sử dụng tương tự :ltrong bước đệ quy, vì vậy với việc cố định :lkích thước tổng thể của đầu ra sẽ tăng theo cấp số nhân với :n.


Đây là ngôn ngữ phù hợp cho công việc, nhưng về mặt kỹ thuật, câu trả lời không cho phép thêm dữ liệu, vì vậy lý tưởng nhất là bạn sẽ mã hóa 60 trong câu trả lời của mình.
Neil

@Neil Vì vậy, tôi chỉ bao gồm 60trong số byte?
u54112

Tôi không chắc rằng nó đơn giản, nhưng tôi không biết ngôn ngữ.
Neil

1

Python 2, 124 byte

Dựa trên mã trong bài viết 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)

Lệnh 0 là một đường thẳng.


Bạn phải thay đổi mã của mình để sử dụng góc 60 độ, nếu không, nó sẽ không gần đúng với tam giác Sierpinky. Ngoài ra, định hướng thay đổi tùy theo thứ tự mà tôi không nghĩ là chính xác. trinket.io/python/a803546939
mbomb007

Câu trả lời logo cũng đưa ra một chức năng lấy góc làm tham số, vì vậy tôi nghĩ rằng nó ổn. Theo định hướng, nó vẫn là cùng một đường cong, chỉ xoay.
BookOwl

Câu trả lời logo luôn luôn là cùng một vòng quay, mặc dù. Của bạn là một vòng quay khác nhau cho mỗi đơn hàng, và chúng không giống nhau. Điều này không ổn. Nhìn vào hình ảnh câu hỏi chứa.
mbomb007

Trường hợp nào thách thức nói rằng các phép quay phải giống nhau?
BookOwl

1
Bất kỳ chuyên ngành toán học nào cũng có thể cho bạn biết rằng một giới hạn phải hội tụ. Bạn thì không.
mbomb007

0

Toán học, 62 byte

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

Làm thế nào mà làm việc?
BookOwl

0

JavaScript (ES6), 180 byte

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>

Trả về một chuỗi các chuỗi. Bắt đúng khoảng cách là phần khó nhất! Phiên bản chuỗi thuần cho 205 byte:

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]
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.