একটি পাদোভান সর্পিল উত্পাদন করুন


34

ভূমিকা

ফিবোনাচি সিকোয়েন্সের অনুরূপ, প্যাডোভান সিকোয়েন্স ( ওইআইএস এ 1000931 ) হ'ল সংখ্যার ক্রম যা ক্রমটিতে পূর্ববর্তী পদগুলি যুক্ত করে উত্পাদিত হয়। প্রাথমিক মানগুলি হিসাবে সংজ্ঞায়িত করা হয়:

P(0) = P(1) = P(2) = 1

0 তম, 1 ম এবং 2 য় পদগুলি সমস্ত 1 The পুনরাবৃত্তির সম্পর্কটি নীচে বর্ণিত:

P(n) = P(n - 2) + P(n - 3)

সুতরাং, এটি নিম্নলিখিত ক্রম উত্পাদন করে:

1, 1, 1, 2, 2, 3, 4, 5, 7, 9, 12, 16, 21, 28, 37, 49, 65, 86, 114, 151, 200, 265, 351, ...

এই সংখ্যাগুলি সমান্তরাল ত্রিভুজগুলির দৈর্ঘ্য হিসাবে ব্যবহার করা একটি দুর্দান্ত সর্পিল দেয় যখন আপনি সেগুলি সমস্ত একসাথে রাখেন, অনেকটা ফিবোনাচি সর্পিলের মতো:

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

উইকিপিডিয়ায় চিত্র সৌজন্যে


কার্য

আপনার টাস্কটি এমন একটি প্রোগ্রাম লিখতে হবে যা কোনও শব্দটির সাথে সম্পর্কিত ইনপুট সহ গ্রাফিকাল আউটপুট দ্বারা এই সর্পিলটিকে পুনরায় তৈরি করে ates

বিধি

  • আপনার জমাটি অবশ্যই কমপক্ষে দশম মেয়াদ পর্যন্ত পরিচালনা করতে সক্ষম হবে (9)
  • আপনার জমাটি অবশ্যই একটি সম্পূর্ণ প্রোগ্রাম বা ফাংশন হতে পারে যা ইনপুট নেয় এবং গ্রাফিকাল ফলাফল প্রদর্শন করে (হয় কোনও চিত্র বা গ্রাফ আউটপুট দেয়))
  • আপনার জমা দেওয়ার ক্ষেত্রে আপনাকে অবশ্যই গ্রাফিকাল আউটপুটের প্রমাণ দেখাতে হবে
  • একই প্রতিনিধিত্ব সহ 60 ডিগ্রি গুণায় আউটপুট আবর্তনের অনুমতি দেওয়া হয়
  • ঘড়ির কাঁটার বিপরীতে যাওয়ার অনুমতিও রয়েছে
  • স্ট্যান্ডার্ড লুফোলগুলি নিষিদ্ধ

আপনি ধরে নিতে পারেন যে ইনপুটটি> 0 হবে এবং ইনপুটটির সেই সঠিক ফর্ম্যাটটি দেওয়া হবে।

স্কোরিং

এটি , তাই বাইটের মধ্যে সংক্ষিপ্ততম কোডটি জয়ী। সবাইকে শুভ নববর্ষ!


লাইনের অনুমতি দেওয়ার পরেও কি স্থান অনুসরণ করতে হবে?
পাভেল

@ পাভেল হ্যাঁ আমাকে এটি যোগ করতে দাও
অ্যান্ড্রু লি

আউটপুট কি উদাহরণের মতো হতে পারে বা প্রতিবিম্ব এবং ঘূর্ণন (60 ডিগ্রির গুণক) অনুমোদিত?
স্তর নদী সেন্ট

পছন্দ করুন আমাকে পোস্টে এটি স্পষ্ট করা যাক।
অ্যান্ড্রু লি

3
একই চ্যালেঞ্জে ASCII আর্ট এবং গ্রাফিকাল আউটপুট উভয়কেই অনুমতি দেওয়ার ভক্ত নয়। তারা খুব আলাদা কাজ, এবং তাদের একসাথে মিশ্রিত করা উত্তর দুটি পৃথক সম্ভাবনার সমাধান সম্পূর্ণ অপূরণীয় করে তোলে। দুটি পৃথক চ্যালেঞ্জ থাকা আরও ভাল হবে, একটি ASCII আর্টের জন্য এবং একটি গ্রাফিকাল আউটপুট জন্য।
মার্টিন এন্ডার

উত্তর:


12

গণিত, 119 108 বাইট

11 বাইট সংরক্ষণের জন্য মার্টিন ইন্ডারকে ধন্যবাদ!

±n_:=If[n<4,1,±(n-2)+±(n-3)];Graphics@Line@ReIm@Accumulate@Flatten@{0,z=I^(2/3),±# z^(#+{2,4,1})&~Array~#}&@

একটি ইতিবাচক পূর্ণসংখ্যার যুক্তি (1-ইনডেক্সড) গ্রহণ এবং গ্রাফিক্স আউটপুট ফিরিয়ে দেওয়া নামহীন ফাংশন। ইনপুট জন্য উদাহরণ আউটপুট 16:

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

Flawr এর মতলব উত্তরের সাথে নকশায় অনেক মিল - এমনকি unityক্যেরI^(2/3) ষষ্ঠ মূলের সংজ্ঞা সহ একযোগে বিকাশ ঘটে ! সহজেই পঠনযোগ্য সংস্করণ:

1  (±n_:=If[n<4,1,±(n-2)+±(n-3)];
2   Graphics@Line@ReIm@
3   Accumulate@Flatten@
4   {0,z=I^(2/3),±# z^(#+{2,4,1})&~Array~#}
5  ])&

লাইন 1 প্যাডোভান ক্রম সংজ্ঞায়িত করে ±n = P(n)। লাইন 4 জটিল সংখ্যার নেস্টেড অ্যারে তৈরি করে, zপথের সাথে সংজ্ঞা দেয়; শেষ অংশটি ±# z^(#+{2,4,1})&~Array~#অনেকগুলি ট্রিপল উত্পন্ন করে, যার মধ্যে প্রতিটি ভেক্টরগুলির সাথে মিল রেখে আমাদের সংশ্লিষ্ট ত্রিভুজটি সম্পূর্ণ করতে আঁকতে হবে ( দিকনির্দেশগুলি নিয়ন্ত্রণ করার ±#সময় দৈর্ঘ্য z^(#+{2,4,1})নিয়ন্ত্রণ করে)। লাইন 3 তালিকা নীড়ের তালিকা থেকে মুক্তি পেয়েছে এবং তারপরে ভেক্টর থেকে খাঁটি স্থানাঙ্কে রূপান্তর করতে জটিল সংখ্যার চলমান মোট গণনা করে; লাইন 2 তারপরে জটিল সংখ্যাকে সত্যিকারের সংখ্যার জোড় জোড়ায় রূপান্তরিত করে, এবং এটি বহুভুজ রেখাটিকে আউটপুট দেয়।


1
এই অংশটি কিছুই মনে করছিল না কেবল আমি বোকা হয়েছি।
মার্টিন ইন্ডার

9

মতলব, 202 190 বাইট

N=input('');e=i^(2/3);f=1/e;s=[0,e,1,f,-e,e-2];l=[1,1,1,2];M=N+9;T=[l,2:M-3;2:M+1;3:M+2];for k=5:N;l(k)=l(k-2)+l(k-3);s(k+2)=s(k+1)+e*l(k);e=e*f;end;T=[T;T(1,:)];plot(s(T(:,1:N)));axis equal

N=19(1-ভিত্তিক সূচক) এর আউটপুট :

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

ব্যাখ্যা

মোটামুটি ধারণাটি মূলত জটিল সংখ্যা নিয়ে কাজ করে। তারপরে ত্রিভুজগুলির কিনারা সর্বদা unityক্যের ষষ্ঠ মূলের দিকে নির্দেশ করে।

N=input('');                         % Fetch input
e=i^(2/3);                           % 6th root of unity
f=1/e;                               %  "
s=[0,e,1,f,-e,e-2];                  % "s" is a list of vertices in the order as the spiral is defined
l=[1,1,1,2];                         % "l" is a list of edge-lengths of the triangles
for k=5:N;                           % if we need more values in "l"/"s" we calculate those
    l(k)=l(k-2)+l(k-3);
    s(k+2)=s(k+1)+e*l(k);
    e=e*f;
end;
M=N+9;
T=[[1,1,1,2,2:M-3];2:M+1;3:M+2]';    % this matrix describes which vertices from s are needed for each triangle (the cannonical way how meshes of triangles are stored)
trimesh(T(1:N,:),real(s),imag(s));   % plotting the mesh, according to "T"
axis equal

সুন্দর কাজ! কোনও ব্যাখ্যা দেওয়ার কোনও সম্ভাবনা আছে কি?
অ্যান্ড্রু লি

ব্যাখ্যা যোগ!
flawr

এখানে জটিল সংখ্যার ব্যবহারকে পছন্দ করুন।
উজ্জ্বল

7

পিএইচপি + এসভিজি, 738 বাইট

<?php
$a=[1,1,1];
for($i=0;$i<99;)$a[]=$a[$i]+$a[++$i];
$d=$e=$f=$g=$x=$y=0;
$c=[333,999];
$z="";
foreach($a as$k=>$v){
if($k==$_GET['n'])break;
$h=$v/2*sqrt(3);
if($k%6<1){$r=$x+$v/2;$s=$y+$h;$t=$r-$v;$u=$s;}
if($k%6==1){$r=$x-$v/2;$s=$y+$h;$t=$x-$v;$u=$y;}
if($k%6==2){$r=$x-$v;$s=$y;$t=$r+$v/2;$u=$y-$h;}
if($k%6==3){$r=$x-$v/2;$s=$y-$h;$t=$r+$v;$u=$s;}
if($k%6==4){$r=$x+$v/2;$s=$y-$h;$t=$r+$v/2;$u=$y;}
if($k%6>4){$r=$x+$v;$s=$y;$t=$r-$v/2;$u=$y+$h;}
$d=min([$d,$r,$t]);
$e=max([$e,$r,$t]);
$f=min([$f,$s,$u]);
$g=max([$g,$s,$u]); 
$p="M$x,{$y}L$r,{$s}L$t,{$u}Z";
$z.="<path d=$p fill=#{$c[$k%2]} />";
$x=$r;
$y=$s;
}
?>
<svg viewBox=<?="$d,$f,".($e-$d).",".($g-$f)?> width=100% height=100%>
<?=$z?>
</svg>

16 এর জন্য আউটপুট

<svg viewBox=-53,-12.124355652982,75.5,42.435244785437 width=100% height=100%>
<path d=M0,0L0.5,0.86602540378444L-0.5,0.86602540378444Z fill=#333 /><path d=M0.5,0.86602540378444L0,1.7320508075689L-0.5,0.86602540378444Z fill=#999 /><path d=M0,1.7320508075689L-1,1.7320508075689L-0.5,0.86602540378444Z fill=#333 /><path d=M-1,1.7320508075689L-2,0L0,0Z fill=#999 /><path d=M-2,0L-1,-1.7320508075689L0,0Z fill=#333 /><path d=M-1,-1.7320508075689L2,-1.7320508075689L0.5,0.86602540378444Z fill=#999 /><path d=M2,-1.7320508075689L4,1.7320508075689L0,1.7320508075689Z fill=#333 /><path d=M4,1.7320508075689L1.5,6.0621778264911L-1,1.7320508075689Z fill=#999 /><path d=M1.5,6.0621778264911L-5.5,6.0621778264911L-2,-8.8817841970013E-16Z fill=#333 /><path d=M-5.5,6.0621778264911L-10,-1.7320508075689L-1,-1.7320508075689Z fill=#999 /><path d=M-10,-1.7320508075689L-4,-12.124355652982L2,-1.7320508075689Z fill=#333 /><path d=M-4,-12.124355652982L12,-12.124355652982L4,1.7320508075689Z fill=#999 /><path d=M12,-12.124355652982L22.5,6.0621778264911L1.5,6.0621778264911Z fill=#333 /><path d=M22.5,6.0621778264911L8.5,30.310889132455L-5.5,6.0621778264911Z fill=#999 /><path d=M8.5,30.310889132455L-28.5,30.310889132455L-10,-1.7320508075689Z fill=#333 /><path d=M-28.5,30.310889132455L-53,-12.124355652982L-4,-12.124355652982Z fill=#999 /></svg>


1
গল্ফ দুটি ছোট জিনিস: $k%6==0হতে পারে $k%6<1এবং $k%6==5হতে পারে $k%6>4
কেভিন ক্রুইজসেন

4

পাইথন 3, 280 , 262 বাইট

18 বাইট ovs ধন্যবাদ সংরক্ষণ করা

Golfed:

import turtle
P=lambda n:n<4or P(n-3)+P(n-2)
N=int(input())
M=9
t=turtle.Turtle()
Q=range
R=t.right
L=t.left
F=t.forward
S=[P(x)*M for x in Q(N,0,-1)]
A=S[0]
F(A)
R(120)
F(A)
R(120)
F(A)
L(120)
i=1
while i<N:
 A=S[i]
 for j in Q(3):F(A);L(120)
 F(A)
 L(60)
 i+=1

কিছু মন্তব্য সহ একই জিনিস:

import turtle

# P(n) returns nth term in the sequence
P=lambda n:n<4or P(n-3)+P(n-2)

# M: scales the triangle side-length
M=9
# N: show triangles from 1 to (and including) N from sequence
N=int(input())
t=turtle.Turtle()
Q=range
R=t.right # R(a) -> turn right "a" degrees
L=t.left  # L(a) -> turn left "a" degrees
F=t.forward # F(l) -> move forward "l" units

# S: M*P(N),M*P(N-1), ... M*P(1)
S=[P(x)*M for x in Q(N,0,-1)]

# draw the largest triangle
A=S[0]
F(A)
R(120)
F(A)
R(120)
F(A)
L(120)
i=1

# draw the next N-1 smaller triangles
while i<N:
 A=S[i]
 for j in Q(3):F(A);L(120)
 F(A)
 L(60)
 i+=1

এর জন্য স্ক্রিনশট N=9:

এন = 9


2

দ্বৈত 151

s=(n)=>{P=(N)=>N<3||P(N-3)+P(N-2)
for(a=i=0,X=Y=500,x.moveTo(X,Y);i<n*4;i++)k=9*P(i/4),x.lineTo(X+=C(a)
*k,Y+=S(a)*k),x.stroke(),a+=i%4>2?1.047:2.094}

http://dwitter.net এ পরীক্ষা করা যেতে পারে (পূর্ণস্ক্রিন ব্যবহার করুন)

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

বেসিক ধারণা লোগো টার্টল, গল্ফড। উপর থেকে পি () ফানক চুরি!

আমি কল্পনা করি আরও পুনরাবৃত্তি দ্বারা গল্ফ করা যায় তবে এটি খারাপ নয়।


1

লোগো, ১১৯ বাইট

to s:n
make"x 10
make"y:x
make"z:y
bk:z
repeat:n[lt 60
fw:z
rt 120
fw:z
bk:z
make"w:y+:z
make"z:y
make"y:x
make"x:w]end

ব্যবহার করার জন্য, ভালো কিছু করতে এই :

reset
lt 150
s 12

নমুনা আউটপুট (এম্বেড করতে পারে না কারণ এটি HTTPS নয় এবং এটি ইমগুয়ারে আপলোড করতে ব্যর্থ হয়েছে)

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