পেন্টাফ্লেক আঁকুন


25

সবার আগে ... আমি সবাইকে মেরি ক্রিসমাসের শুভেচ্ছা জানাতে চাই (দুঃখিত যদি আমি আপনার টাইমজোনটির জন্য একদিন দেরি করি)।

অনুষ্ঠানটি উদযাপন করতে আমরা একটি স্নোফ্লেক আঁকতে যাচ্ছি। কারণ বছর 201 হয় 5 এবং বড়দিন 2 হয় 5 (ব্যক্তি একটি বৃহৎ অংশ জন্য) ম, আমরা একটি টেনে আনব পঞ্চ থাক। পেন্টাফ্লেক পেন্টাগনগুলির সমন্বিত একটি সাধারণ ফ্র্যাক্টাল। এখানে কয়েকটি উদাহরণ দেওয়া হয়েছে (এখান থেকে নেওয়া) :এখানে চিত্র বর্ণনা লিখুন

প্রতিটি পেন্টাফ্লেকের একটি অর্ডার রয়েছে এন। অর্ডার 0 এর পেন্টাফ্লেক কেবল পেন্টাগন। অন্যান্য সমস্ত আদেশের জন্য এন, একটি পেন্টাফ্লেক পূর্ববর্তী আদেশের 6 তম পেন্টাফ্লেকের চারপাশে সাজানো পূর্ববর্তী ক্রমের 5 টি পেন্টাফ্লেক সমন্বয়ে গঠিত। উদাহরণস্বরূপ, সেন্ট্রাল পেন্টাগনের চারদিকে সাজানো 5 টি পেন্টাগন দিয়ে অর্ডার 1 এর একটি পেন্টাফ্লেক গঠিত।

ইনপুট

আদেশ n। এটি পূর্বনির্ধারিত পরিবর্তনশীল ব্যতীত অন্য কোনও উপায়ে দেওয়া যেতে পারে।

আউটপুট

অর্ডার nপেন্টাফ্লেকের একটি চিত্র । কমপক্ষে 100px প্রশস্ত এবং 100px দীর্ঘ হতে হবে। এটি কোনও ফাইলে সংরক্ষিত হতে পারে, ব্যবহারকারীর কাছে প্রদর্শিত হয় বা এতে আউটপুট হয় STDOUT। অন্য কোনও ফর্ম আউটপুট অনুমোদিত নয়। এই চ্যালেঞ্জের আগে বিদ্যমান সমস্ত চিত্র ফর্ম্যাটগুলি অনুমোদিত।

জয়লাভ

কোডগল্ফ হিসাবে, ন্যূনতম সংখ্যক বাইট জয়ী ব্যক্তি।


3
-1 কারণ স্নোফ্লেকে কেবল 6 টি ভাঁড়ের প্রতিসাম্য রয়েছে! = ডি
flawr

@ ফ্লোয়ার এই নিবন্ধ অনুসারে স্নোফ্লেকের প্রায় .1% আসলে 6- ভাটির প্রতিসাম্যতা বা মোটামুটি কোনও প্রতিসাম্য ধারণ করে। তবে যেসব স্নোফ্লেকের প্রতিসাম্য রয়েছে তাতে 6-
গুণযুক্ত

4
ভাল এই নিবন্ধটি সমস্ত তুষারকণ্ঠের থেকে .1% এর চেয়ে কম অধ্যয়ন করেছে এবং এটি যেভাবেই অর্থহীন, কারণ তারা কেবল আমেরিকান স্নোফ্লেকগুলিই অধ্যয়ন করেছিল। আমি বাজি ধরেছি মেট্রিক স্নোফ্লেকগুলি আরও বেশি প্রতিসাম্যিক! (পিএস: সুন্দর চিত্রগুলি! স্নোফ্লেক # 167 বিশেষ আকর্ষণীয় !) (আমি কেবল লক্ষ্য করেছি যে মেট্রিক স্নোফ্লেকের অবশ্যই 10-ভাঁজ প্রতিসাম্য থাকতে হবে))
flawr

1
উপরের যে কোনও একটি পদ্ধতি ব্যবহার করে এটি আউটপুট হবে ততক্ষণ ঠিক থাকবে। তবে nআপনার স্ক্রিপ্ট ফাইলে পূর্বনির্ধারিত করা যায় না। আপনি এটির কাছ nথেকে পড়তে পারেন STDIN, এটি ব্যবহারকারীর কাছ থেকে অনুরোধ করতে পারেন , এটি একটি ফাংশন / কমড লাইনের যুক্তি হিসাবে গ্রহণ করতে পারেন ... মূলত আপনার কোডটিতে সরাসরি এম্বেড করা ব্যতীত আপনি যা কিছু করতে চান তা করতে পারেন।
TheNumberOne

1
এটি +1 করতে চান না কারণ এটিতে 25 :( আছে
The_Basset_Hound

উত্তর:


14

মতলব, 226

function P(M);function c(L,X,Y,O);hold on;F=.5+5^.5/2;a=2*pi*(1:5)/5;b=a(1)/2;C=F^(2*L);x=cos(a+O*b)/C;y=sin(a+O*b)/C;if L<M;c(L+1,X,Y,~O);for k=1:5;c(L+1,X+x(k),Y+y(k),O);end;else;fill(X+x*F, Y+y*F,'k');end;end;c(0,0,0,0);end

Ungolfed:

function P(M);                
function c(L,X,Y,O);          %recursive function
hold on;
F=.5+5^.5/2;                  %golden ratio
a=2*pi*(1:5)/5;               %full circle divided in 5 parts (angles)
b=a(1)/2;
C=F^(2*L);
x=cos(a+O*b)/C;               %calculate the relative position ofnext iteration
y=sin(a+O*b)/C;
if L<M;                       %current recursion (L) < Maximum (M)? recurse
    c(L+1,X,Y,~O);            %call recursion for inner pentagon
    for k=1:5;
        c(L+1,X+x(k),Y+y(k),O)%call recursion for the outer pentagons
    end; 
else;                         %draw
    fill(X+x*F, Y+y*F,'k');  
end;
end;
c(0,0,0,0);
end

পঞ্চম পুনরাবৃত্তি (ইতিমধ্যে রেন্ডার করতে বেশ খানিকটা সময় নিয়েছে)।

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

কোডের সামান্য পরিবর্তন (দুর্ভাগ্যক্রমে আরও বাইটস) এর ফলে এই সৌন্দর্যের ফলস্বরূপ =)

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

ওহ, এবং অন্য একটি:

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


আমাকে এই চ্যালেঞ্জের দিকে ইঙ্গিত করার জন্য ধন্যবাদ, আমি গিয়ে আরও একটি সমাধান যুক্ত করেছি, আশা করি আপনার আপত্তি নেই;) যাইহোক, আমি নিরাপদে আপনার বাইট-গণনা থেকে দূরে রয়েছি, আমি খুব মিস করেছি এটি খুব আকর্ষণীয় বলে মনে করেছি।
আন্দ্রেস ডেক

7

গণিত, 200 বাইট

a=RotationTransform
b=Range
r@k_:={Re[t=I^(4k/5)],Im@t}
R@k_:=a[Pi,(r@k+r[k+1])/2]
Graphics@Nest[GeometricTransformation[#,ScalingTransform[{1,1}(Sqrt@5-3)/2]@*#&/@Append[R/@b@5,a@0]]&,Polygon[r/@b@5],#]&

শেষ লাইনটি একটি ফাংশন যা কোনও পূর্ণসংখ্যার জন্য প্রয়োগ করা যেতে পারে n

গণিতের ফাংশনগুলির নাম দীর্ঘ। কারও উচিত তাদের এন্ট্রপি-এনকোড এবং এ থেকে একটি নতুন ভাষা করা উচিত। :)

প্রয়োগ করা হলে 1:

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

প্রয়োগ করা হলে 2:

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


6

ম্যাটল্যাব, 235 233 217 বাইট

আপডেট: @ ফ্লোয়ারের একগুচ্ছ পরামর্শ আমাকে 16 বাইট হারাতে সহায়তা করেছে। যেহেতু কেবল এটিই আমাকে ফ্লাওয়ারের সমাধানগুলিকে হারাতে সক্ষম করেছিল এবং আমি flawr এর সহায়তা না করে চ্যালেঞ্জটি প্রথম স্থানে খুঁজে পেতাম না, এটি আমাদের দ্বারা যৌথ জমা দেওয়ার বিষয়টি বিবেচনা করুন :)

N=input('');f=2*pi/5;c=1.5+5^.5/2;g=0:f:6;p=[cos(g);sin(g)];R=[p(:,2),[-p(2,2);p(1,2)]];for n=1:N,t=p;q=[];for l=0:4,q=[q R^l*[c-1+t(1,:);t(2,:)]/c];end,p=[q -t/c];end,p=reshape(p',5,[],2);fill(p(:,:,1),p(:,:,2),'k');

এটি অন্য একটি ম্যাটল্যাব সমাধান, এটি পুনরাবৃত্ত ফাংশন সিস্টেমগুলির দর্শনের উপর ভিত্তি করে। আমি বেশিরভাগই নিজেই অ্যালগরিদম বিকাশে আগ্রহী ছিলাম, এবং সমাধানটিতে আমি খুব বেশি গল্ফ করিনি। উন্নতির নিশ্চয়ই জায়গা আছে। (আমি এর জন্য একটি হার্ড-কোডেড ফিক্স-পয়েন্টের সান্নিধ্য ব্যবহার করে ভাবছিলাম c, তবে এটি ভাল লাগবে না))

অবরুদ্ধ সংস্করণ:

N=input('');                                % read order from stdin

f=2*pi/5;                                   % angle of 5-fold rotation
c=1.5+5^.5/2;                               % scaling factor for contraction

g=0:f:6;
p=[cos(g);sin(g)];                          % starting pentagon, outer radius 1
R=[p(:,2),[-p(2,2);p(1,2)]];                % 2d rotation matrix with angle f

for n=1:N,                                  % iterate the points
    t=p;
    q=[];
    for l=0:4,
       q=[q R^l*[c-1+t(1,:);t(2,:)]/c];     % add contracted-rotated points
    end,
    p=[q -t/c];                             % add contracted middle block
end,

p=reshape(p',5,[],2);                 % reshape to 5x[]x2 matrix to separate pentagons
fill(p(:,:,1),p(:,:,2),'k');          % plot pentagons

এর জন্য ফলাফল N=5(পরবর্তীকালে axis equal offপ্রাকদৃষ্টির জন্য, তবে আমি আশা করি যে এটি বাই-ওয়াইস হিসাবে গণনা করা হবে না):

এন = 5 পেন্টাফ্লেক


1
আমি মনে করি আপনি ব্যবহার করে R=[p(:,2),[-p(2,2);p(1,2)]];(এবং পূর্ববর্তীটি মুছে ফেলা R,C,S) কয়েকটি বাইট সংরক্ষণ করতে পারেন q=[q R^l*[c-1+t(1,:);t(2,:)]/c]এবং আপনি ব্যবহার করতে পারেন এবং আমি মনে করিc=1.5+5^.5/2;
flawr

@ ফ্লোয়ার স্পষ্টতই আপনি ঠিক বলেছেন :) ১. রোটেশন ম্যাট্রিক্সের জন্য ধন্যবাদ, ২. নতুনের জন্য ধন্যবাদ q, আমি সেখানে একটি অনর্থক জোড়া বন্ধনীও পেয়েছিলাম ... ৩. ধন্যবাদ, তবে এই যাদুটি কি ??: D ৪. যেহেতু সমাধানটি এখন আপনার মূলের চেয়ে ছোট, তাই আমি এটি আংশিকভাবে আপনার জমা হিসাবেও বিবেচনা করি।
আন্দ্রেস ডেক

6

গণিত, 124 বাইট tes

ম্যাথামেটিকা Tableসংস্করণ 10: এর জন্য নতুন সিনট্যাক্স সমর্থন করে : Table[expr, n]যা অন্য বাইট সংরক্ষণ করে। Table[expr, n]সমতূল্য Table[expr, {n}]

f@n_:=(p=E^Array[π.4I#&,5];Graphics@Map[Polygon,ReIm@Fold[{g,s}~Function~Join[.62(.62g#+#&/@s),{-.39g}],p,p~Table~n],{-3}])

এই ফাংশনের মূলটি জটিল সংখ্যার ব্যবহার করে ট্রান্সফর্মেশনগুলি করতে এবং তারপরে সেগুলি পয়েন্টে রূপান্তর করে ReIm

পরীক্ষা ক্ষেত্রে:

f[4]

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


1
πইউটিএফ -8 এ দুটি বাইট নেয়, সুতরাং আপনি মোট 125 বাইটে চলে আসুন।
2012compion

ওএমএফজি এটি কী
ডাম্পস্টারডুফাস

3

ম্যাথামেটিকাল, 199 196 বাইট

চুল দিয়ে পিটার রিখটারের উত্তরটি সরিয়ে দেওয়া, এখানে আমার নিজের একটি। এটি গ্রাফিক্স কার্যকারিতার উপর প্রচুর ঝুঁকির সাথে গণিত এবং এফপি-তে কম। সার্কেলপয়েন্টস অন্তর্নির্মিত 10.1 এ নতুন

c=CirclePoints;g=GeometricTransformation;
p@0=Polygon@c[{1,0},5];
p@n_:=GraphicsGroup@{
        p[n-1],
        g[
          p[n-1]~g~RotationTransform[Pi/5],
          TranslationTransform/@{GoldenRatio^(2n-1),n*Pi/5}~c~5
        ]
      };
f=Graphics@*p

সম্পাদনা করুন: গোল্ডেনরটিওর জন্য ডাম্পস্টারডুফাসকে ধন্যবাদ


আপনি প্রতিস্থাপন 3 বাইট সংরক্ষণ করতে পারবেন ((1+Sqrt@5)/2)সঙ্গে GoldenRatio। দ্বিতীয় লাইনেও আমি মনে করি এটির p@0=Polygon@c[{1,0},5];পরিবর্তে হওয়া উচিত p@0=Polygon@cp[{1,0},5];। (বিটিডব্লিউ আমি আসলে পিটার, আমার কাছে দুটি প্রোফাইল লোল)।
ডাম্পস্টারডুফাস

হ্যাঁ! ভাল কল. আমি টাইপও স্পট করেছি, তবে এটি ঠিক করতে ভুলে গেছি। ডি'ও,
এইচওয়াইপোটেনউজার

2

গণিত, ১৩০ বাইট

r=Exp[Pi.4I Range@5]
p=1/GoldenRatio
f@0={r}
f@n_:=Join@@Outer[1##&,r,p(f[n-1]p+1),1]~Join~{-f[n-1]p^2}
Graphics@*Polygon@*ReIm@*f

আমি এনজিপিপোরগানের উত্তরে অনুরূপ কৌশল ব্যবহার করেছি (আসলে আমি তার চুরি করেছি)2Pi I/5 == Pi.4I কৌশলটি ), তবে পুনরাবৃত্তির কাজ হিসাবে প্রয়োগ করা হয়েছে।

ব্যবহারের উদাহরণ ( %শেষ লাইনে আউটপুট ছিল এমন বেনামে ফাংশনটি অ্যাক্সেস করতে ব্যবহার করে):

 %[5]

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

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.