সিয়েরপিনস্কি অ্যারোহেড কার্ভ আঁকুন


14

ভূমিকা

Sierpinski তীরের সম্মুখভাগের কার্ভ একটি বক্ররেখা যে সীমা Sierpinski এর ট্রাইএঙ্গল হয়।

এটি প্রথম এটির মতো শুরু হয়:

 _
/ \

তারপরে, প্রতিটি লাইনটি প্রথমটির একটি ঘোরানো সংস্করণ দিয়ে প্রতিস্থাপন করা হয়:

  _
 / \
 \ /
_/ \_

পরবর্তী:

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

সিয়েরপিনস্কি অ্যারোহেড কার্ভ বিবর্তন

তোমার কাজ

একটি নম্বর এন দেওয়া হয়েছে , সিয়েরপিনস্কি অ্যারোহেড কার্ভের 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

"A" নামে স্বচ্ছ ব্যাকগ্রাউন্ড সহ একটি এসভিজি ফাইল তৈরি করে।

g 0একটি অনুভূমিক রেখা আউটপুট দেয়, g 1হয় /¯\

এখানে চিত্র বর্ণনা লিখুন


দুর্দান্ত, আমি জানতাম না Diagrams!
flawr

@ ফ্লোয়ার, এটি দুর্দান্ত তবে সাধারণ হাস্কেল গ্রাফিকাল প্রোগ্রামের ক্যাভ্যাটগুলি প্রয়োগ হয়। plot() উইন্ডো খোলার সমতুল্য কল করা দুর্দান্ত হবে ।
এঙ্গস

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ধাপে এগিয়ে নিয়ে যায়।

ফাংশনটি :a60 এর সমান দিয়ে ডাকা হবে ।

Arrowheads

এখানে 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 ডিগ্রি কোণ ব্যবহার করতে আপনাকে আপনার কোডটি পরিবর্তন করতে হবে, অন্যথায় এটি সিয়েরপিনস্কি ত্রিভুজটির আনুমানিক হবে না। এছাড়াও, ক্রমটির উপর নির্ভর করে ওরিয়েন্টেশন পরিবর্তিত হয়, যা আমি সঠিক বলে মনে করি না। trinket.io/python/a803546939
mbomb007

লোগো উত্তরটি একটি ফাংশন দেয় যা কোণকে প্যারামিটার হিসাবে গ্রহণ করে, তাই আমি মনে করি এটি ঠিক আছে। ওরিয়েন্টেশন যতদূর যায়, এটি এখনও একই বাঁকানো, কেবল ঘোরানো।
বুকআল

যদিও লোগো উত্তর সর্বদা একই ঘূর্ণন হয়। আপনার প্রতিটি আদেশের জন্য আলাদা ঘূর্ণন, এবং সেগুলি সমস্ত এক নয়। এটা ঠিক নেই। প্রশ্নে থাকা ছবিগুলি দেখুন।
mbomb007

চ্যালেঞ্জটি কোথায় বলে যে ঘূর্ণন একই হতে হবে?
BookOwl

1
যে কোনও গণিত মেজর আপনাকে বলতে পারে যে একটি সীমা অবশ্যই রূপান্তর করতে পারে। আপনার না।
mbomb007

1

গণিত / ওল্ফ্রাম ভাষা 73 বাইট

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

সাধারণ ব্যাখ্যা :
অ্যাঙ্গেলপথ [{θ1, θ2, θ3,…}] 2D স্থানাঙ্কের একটি তালিকা দেয় যা {0,0 at থেকে শুরু হয়, তারপরে ধারাবাহিক আপেক্ষিক কোণগুলিতে একক দৈর্ঘ্যের এক ধাপ এগিয়ে যায় θi।

এন = 1

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

এন = 2

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

এন = 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

জাভাস্ক্রিপ্ট (ES6), 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]
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.