Sierpinski Arrowhead Curve ड्रा करें


14

परिचय

सिएरपिन्स्की Arrowhead वक्र एक वक्र है कि सीमा सिएरपिन्स्की त्रिभुज है।

यह पहली बार इस तरह शुरू होता है:

 _
/ \

फिर, प्रत्येक पंक्ति को पहले वाले के घुमाए गए संस्करण से बदल दिया जाता है:

  _
 / \
 \ /
_/ \_

आगे:

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

Sierpinski Arrowhead वक्र विकास

आपका कार्य

एक संख्या n को देखते हुए , Sierpinski Arrowhead Curve की n -th पुनरावृत्ति को आउटपुट करती है ।

आप 0- या 1-इंडेक्स चुन सकते हैं, लेकिन कृपया अपने उत्तर में निर्दिष्ट करें।

आप एक छवि उत्पन्न कर सकते हैं, या ऊपर दिए गए प्रारूप में असिसी आर्ट का उपयोग कर सकते हैं।

आप इस वक्र को बनाने के लिए बिल्ट-इन का उपयोग नहीं कर सकते हैं।

याद रखें, यह , इसलिए सबसे कम बाइट्स वाला कोड जीत जाता है।

जवाबों:


14

ऑक्टेव, 240 236 221 बाइट्स

यह यहाँ उपयोग किए गए एक ही विचार के साथ बनाया गया है लेकिन मुझे इसे सिरिंप्स्की एरोहेड वक्र फिट करने के लिए बदलना पड़ा।

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

यहाँ छवि विवरण दर्ज करें


u=.5;v=3^u/2;B=[u,v];C=[-u,v];A=C<0;16 बाइट्स कम है :) आप axis off equalएक और 5 बाइट्स बचाने के लिए भी कर सकते हैं ।
स्टीवी ग्रिफिन

3

हास्केल + आरेख, 176 बाइट्स

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

पारदर्शी पृष्ठभूमि वाली एक svg फ़ाइल बनाता है जिसे "a" कहा जाता है।

g 0एक क्षैतिज रेखा को आउटपुट करता है, g 1है /¯\

यहाँ छवि विवरण दर्ज करें


महान, मुझे पता नहीं था Diagrams!
दोष

@flawr, यह बहुत अच्छा है लेकिन सामान्य हास्केल ग्राफिकल प्रोग्राम कैविएट लागू होता है। यह plot() एक खिड़की खोलने के बराबर के लिए कॉल करने के लिए बहुत अच्छा होगा ।
Angs

2

MSWLogo (संस्करण 6.5 बी), 102 बाइट्स

यहां दिए गए दो कार्यों को लेता है shapeL, और एक अतिरिक्त तर्क जोड़कर उन्हें विलय कर देता है , जो नकारात्मक होने पर विपरीत कार्य को बुलाता है।shapeR:a

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

एक फ़ंक्शन sपरिभाषित किया गया है, जो पुनरावृत्तियों :n(1-आधारित), कोण :a, लंबाई की संख्या लेता है :l। यह पुनरावर्ती है, :aअभिविन्यास को सही करने के लिए दो उदाहरणों में उपेक्षित कोण के साथ स्वयं के निचले पुनरावृत्ति को बुलाता है ।

  • rt :a, lt :aकछुए को घुमाएं (त्रिभुज वाली बात जिसका रास्ता पता लगाया गया है) दाएं, बाएं, :aडिग्री द्वारा ।
  • fd :lकछुए को कदमों से आगे बढ़ाता है :l

फ़ंक्शन :aको 60 के बराबर के साथ बुलाया जाना है ।

तीर

यहां repeatबिल्ट-इन काउंटर के साथ अनिवार्य रूप से एक लूप है repcountpuऔर pd"पेन अप" और "पेन डाउन" का मतलब है, जो कछुए को ड्राइंग से रोकते हैं जबकि इसकी स्थिति का उपयोग करके सेट किया जा रहा है setxy

प्रत्येक पुनरावृत्ति के आरेखण को लंबाई के :lबराबर कहा जाता है power 2 (7-repcount), जो तेजी से घटता है; इसका कारण यह है कि परिभाषा :lपुनरावर्ती चरण में समान का उपयोग करती है , इसलिए निश्चित :lके साथ आउटपुट का समग्र आकार तेजी से बढ़ेगा :n


यह नौकरी के लिए सही भाषा है, लेकिन तकनीकी रूप से उत्तर के लिए अतिरिक्त डेटा की अनुमति नहीं है, इसलिए आदर्श रूप से आप अपने उत्तर में 60 को कूटबद्ध करेंगे।
नील

@ नील तो मैं सिर्फ 60बाइट की गिनती में शामिल हूं ?
मोनिका

मुझे यकीन नहीं है कि यह इतना आसान है, लेकिन मैं खुद भाषा नहीं जानता।
नील

1

पायथन 2, 124 बाइट्स

विकिपीडिया लेख में कोड के आधार पर।

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)

आदेश 0 एक सीधी रेखा है।


60 डिग्री के कोण का उपयोग करने के लिए आपको अपना कोड बदलना होगा, अन्यथा यह Sierpinsky त्रिभुज को अनुमानित नहीं करेगा। इसके अलावा, ओरिएंटेशन ऑर्डर के आधार पर बदलता है, जो मुझे नहीं लगता कि सही है। trinket.io/python/a803546939
mbomb007

लोगो उत्तर भी एक फ़ंक्शन देता है जो कोण को एक पैरामीटर के रूप में लेता है, इसलिए मुझे लगता है कि यह ठीक है। जहां तक ​​अभिविन्यास जाता है, यह अभी भी वही वक्र है, बस घुमाया गया।
बुकऑव्ल

लोगो जवाब हमेशा एक ही रोटेशन है, हालांकि। आपका प्रत्येक आदेश के लिए एक अलग रोटेशन है, और वे सभी समान नहीं हैं। यह ठीक नहीं है। उन तस्वीरों को देखें जिनमें सवाल है।
mbomb007

चुनौती कहां कहती है कि घुमाव एक ही होना है?
बुकऑव्ल

1
कोई भी गणित प्रमुख आपको बता सकता है कि एक सीमा को परिवर्तित करना होगा। तुम्हारा नहीं है।
mbomb007 20

1

गणितज्ञ / वुल्फ्राम भाषा 73 बाइट्स

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

सरल विवरण,
AnglePath [{ :1 , ,2, …3,…}] 2 डी निर्देशांक की सूची को एक पथ के अनुरूप देता है जो {0,0} से शुरू होता है, फिर क्रमिक सापेक्ष कोणों पर इकाई लंबाई के चरणों की एक श्रृंखला लेता है।

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}]

यहाँ छवि विवरण दर्ज करें यहाँ छवि विवरण दर्ज करें



0

जावास्क्रिप्ट (ईएस 6), 180 बाइट्स

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>

स्ट्रिंग्स की एक सरणी देता है। रिक्ति सही हो रही सबसे कठिन हिस्सा था! 205 बाइट्स के लिए शुद्ध स्ट्रिंग संस्करण:

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]
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.