পুনরাবৃত্ত স্টিনার চেইনস


11

স্টেইনার চেইনগুলি এন চেনাশোনাগুলির একটি সেট যেখানে প্রতিটি চেনাশোনাটি 2 টি অন্যান্য ছেদ না করে এমন চেনাশোনাগুলির পাশাপাশি চেইনের আগের এবং পরবর্তী বৃত্তগুলিতে স্পর্শকাতর থাকে যেমন নীচের চিত্রগুলিতে দেখা যায়:

অর্ডার 3 অর্ডার 5 অর্ডার 7

এই চ্যালেঞ্জটিতে আপনি এমন একটি প্রোগ্রাম / ফাংশন লিখবেন যা স্টাইনার চেইনগুলি পুনরাবৃত্তভাবে আঁকবে, অর্থাত্ প্রদত্ত শৃঙ্খলার বৃত্তগুলি চেইনের অন্য পুনরাবৃত্তির বেস বৃত্ত হবে:

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

চ্যালেঞ্জ

এমন একটি প্রোগ্রাম / ফাংশন লিখুন যা প্রতিচ্ছবিগুলির প্রতিটি ধারাবাহিক পুনরাবৃত্তিতে চেনাশোনাগুলির স্তরকে চিত্রের মাত্রা এবং পূর্ণসংখ্যার একটি তালিকা স্বীকার করে এবং এটিতে টানা পুনরাবৃত্ত স্টেইনার চেইনের সাহায্যে একটি চিত্র আউটপুট দেয়।

ইনপুট

আপনার প্রোগ্রাম / ফাংশন 2 টি আর্গুমেন্ট গ্রহণ করবে:

  • s - চিত্রের প্রস্থ এবং উচ্চতা
  • ls - শীর্ষে-চেইন থেকে নীচে-সবচেয়ে শৃঙ্খলে ক্রমযুক্ত ক্রমের প্রতিটি ধারাবাহিক পুনরাবৃত্তিতে উপস্থিত চেনাশোনাগুলির সংখ্যা চিহ্নিত করে ধনাত্মক পূর্ণসংখ্যার তালিকা

আউটপুট

আপনার প্রোগ্রাম / ফাংশনটি রিকিউসিভ স্টেইনার চেইনটি প্রদর্শন করে মাত্রা sx এর একটি চিত্র আউটপুট দেবে s

  • শীর্ষ স্তরের বেস বৃত্তটি ব্যাসের সাথে চিত্রের মতো বৃহত্তর, চিত্রের sঅভ্যন্তরে কেন্দ্রে থাকবে
  • জিনিসগুলিকে সহজ করার জন্য, স্টেইনার চেইনের 2 বেস চেনাশোনাগুলি কেন্দ্রীভূত হবে, অর্থাৎ 2 বেসলাইন বৃত্তের কেন্দ্রবিন্দু একই হবে
  • একটি বাইরের ব্যাসার্ধ, প্রদত্ত R, এবং একটি চেন চেনাশোনা নম্বর, Nভিতরের ব্যাসার্ধ জন্য সূত্র R'হলR' = (R-R*sin(pi/N))/(sin(pi/N)+1)
  • চেনের চেনাশোনাগুলির পাশাপাশি অভ্যন্তরীণ বেস বৃত্তগুলি চেইনের পরবর্তী পুনরাবৃত্তির বাইরের বেস বৃত্ত হবে
  • চেন চেনাশোনাগুলির মাধ্যমে পুনরাবৃত্তি করার সময়, পরবর্তী চেইনের ক্রমটি পরবর্তী মানের সাথে মিলিত হওয়া উচিত ls
  • চেইনের অভ্যন্তরীণ বৃত্তটি দিয়ে পুনরাবৃত্তি করার সময়, ক্রমটি তার পিতামাতার আদেশের মতো হওয়া উচিত (উদাহরণস্বরূপ [5,2]):
  • আদেশ 5.2
  • সমস্ত চেইনের দৈর্ঘ্যের গভীরতায় পুনরাবৃত্তি শেষ করা উচিত ls
  • চেইনগুলির ঘূর্ণন কোনও বিষয় নয়:
  • ঘূর্ণন ঘ ঘূর্ণন 2
  • যাইহোক, তাদের পিতামাতার সেন্টারপয়েন্টের সাথে সম্পর্কিত পুনরাবৃত্ত চেইনের ঘূর্ণন একই হওয়া উচিত:
  • আদেশ 5.2 অবৈধ আদেশ 5.2
  • সমস্ত চেনাশোনাগুলি একটি রূপরেখা বা কঠিন ভরাট দিয়ে আঁকা উচিত
  • রঙ পছন্দটি বাস্তবায়নের জন্য রেখে দেওয়া হয়েছে, লুফোলের জন্য সংরক্ষণ করুন (উদাহরণস্বরূপ, একই রঙ দিয়ে সমস্ত কিছু পূরণ করা)

উদাহরণ রান

নিম্নলিখিত উদাহরণগুলিতে, রঙ দ্বারা নির্ধারিত হয় (depth of the recursion)^4

আপনি এখানে উত্স খুঁজে পেতে পারেন ।

chain(600,[5,4,3])

5.4.3

chain(600,[11,1,1,1,1,1,1])

11.1.1.1.1.1.1

chain(600,[5,6,7,8,9])

5.6.7.8.9


উত্তর:


4

জাভাস্ক্রিপ্ট ES6, 379 বাইট

এই সমাধানটি প্রশ্নটিতে উদাহরণ তৈরি করার জন্য ব্যবহৃত হয়েছিল।

f=(s,ls)=>{with(V=document.createElement`canvas`)with(getContext`2d`)with(Math)return(width=height=s,translate(s/=2,s),(S=(o,d=0,n=ls[d],i=(o-o*sin(PI/n))/(sin(PI/n)+1),r=0)=>{fillStyle=`rgba(0,0,0,${pow(d/ls.length,4)})`;beginPath(),arc(0,0,o,-PI,PI),fill();if(d++<ls.length){S(i,d,n);for(;r<n;++r){save();translate(0,(o+i)/2);S((o-i)/2,d);restore();rotate((2*PI)/n);}}})(s),V)}

Ungolfed:

f=(s,ls)=>{                                        // define function that accepts image dimensions and a list of orders
 with(V=document.createElement`canvas`)            // create canvas to draw on, bring its functions into current scope chain
 with(getContext`2d`)                              // bring graphics functions into current scope chain
 with(Math)return(                                 // bring Math functions into current scope chain
  width=height=s,                                  // set width and height of image
  translate(s/=2,s),                               // center the transform on image
   (S=(o,d=0,                                      // define recursive function that accepts outer radius, depth, and optionally order
       n=ls[d],                                    // default chain order to corresponding order in input list
       i=(o-o*sin(PI/n))/(sin(PI/n)+1),            // calculate inner base circle radius
       r=0)=>{                                     // initialize for loop var
    fillStyle=`rgba(0,0,0,${pow(d/ls.length,4)})`; // fill based on depth
    beginPath(),arc(0,0,o,-PI,PI),fill();          // draw circle
    if(d++<ls.length){                             // if within recursion limit
     S(i,d,n);                                     //   recurse on inner circle
     for(;r<n;++r){                                //   loop through all circles of the chain
      save();                                      //   save transform
      translate(0,(o+i)/2);                        //   translate origin to middle of the 2 base circles
      S((o-i)/2,d);                                //   recurse on chain circle
      restore();                                   //   restore transform
      rotate((2*PI)/n);                            //   rotate transform to next circle in chain
   }}})(s),                                        // begin the recursion
 V)}                                               // return the canvas

দ্রষ্টব্য: fএকটি ক্যানভাস প্রদান করে।

উদাহরণ রান (ধরে নেওয়া যায় যে এতে <body>সংযোজন করার দরকার আছে):

document.body.appendChild(f(600,[13,7,11,5,3]))

নিম্নলিখিত চিত্রটি পৃষ্ঠায় ফেলে দেওয়া উচিত:

আউটপুট

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