ব্লুপ্রিন্ট একটি সিস্টিনা


19

একজন sestina কবিতার একটি বিন্যাসে একটি আকর্ষণীয় প্যাটার্ন যে আমরা তৈরি করতে পারেন অনুসরণ করা হয়। এর প্রতিটি ছয়টি লাইনের ছয়টি স্তন রয়েছে, যেখানে প্রথম স্তরের প্রতিটি লাইনের শেষ শব্দগুলি প্রতিটি ধারাবাহিক স্তরে রেখার সমাপ্তি তৈরি করে, সেট প্যাটার্নে ঘোরানো হয়। (শেষে একটি তিন-লাইনের স্তম্ভও রয়েছে, তবে আমরা সে সম্পর্কে উদ্বিগ্ন হব না)) এলিজাবেথ বিশপের সৃজনশীলভাবে নাম করা সেষ্টিনা নামের প্রথম তিনটি স্তম্ভটি একবার দেখুন :

সেপ্টেম্বর বৃষ্টি ঘরে পড়ে।
ব্যর্থ আলোতে বৃদ্ধ বৃদ্ধা ছোট্ট মার্ভেল স্টোভের পাশের
শিশুটির সাথে রান্নাঘরে বসে
পান্না
থেকে রসিকতা পড়েন,
হাসছেন এবং চোখের জল লুকিয়ে রাখতে কথা বলছিলেন।

তিনি মনে করেন যে তার স্বতঃস্ফূর্ত অশ্রু
এবং ঘরের ছাদে যে বৃষ্টি বয়ে যায়
তা উভয়ই প্যানাম্যাক দ্বারা ভবিষ্যদ্বাণী করা হয়েছিল,
তবে কেবল এক নানীর কাছেই এটি পরিচিত known
লোহার কেটলি চুলায় গেয়েছে।
সে কিছু রুটি কেটে শিশুটিকে বলে,

এখন চায়ের সময়; তবে শিশুটি গরম কালো চুলায় পাগলের মতো
চিকেটেলের ছোট্ট শক্ত অশ্রু
নাচতে দেখছে ,
বৃষ্টিকে ঘরে ঘরে যেভাবে নাচতে হবে।
শুকনো হয়ে বুড়ো ঠাকুরমা
চতুর প্যারাচুটি ঝুলিয়ে রেখেছিল

...

"ঘর," "দাদী," "শিশু," "চুলা," "প্যানাম্যাক," বা "চোখের জল" ছয়টি শব্দের মধ্যে প্রতিটি লাইন কীভাবে শেষ হয় তা নোট করুন। শুধু তাই নয়, শব্দগুলি পূর্ববর্তী স্তরের তুলনায় 6-1-15–2—4–3 প্যাটার্নে আদেশ করা হয়েছে। এটি সর্পিলের মতো দেখতে শেষ হয়:

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

আমরা প্রোগ্রাম্যালি একটি সম্পূর্ণ সিস্টিনা তৈরি করা থেকে এখনও কয়েক বছর দূরে রয়েছি, তবে প্রতিটি স্তরের শেষ শব্দটিকে যথাযথভাবে বিশিষ্ট বৈশিষ্ট্যযুক্ত একটি টেম্পলেট তৈরি করতে পারি। একটি প্রোগ্রাম বা ফাংশন লিখুন যা ছয় লাইনের শেষ শব্দের ভিত্তিতে এই নিয়মগুলি অনুসরণ করে একটি স্টিস্টিনার ব্লুপ্রিন্ট দেয়। ইনপুটটির প্রত্যাশিত ফলাফল এখানে house grandmother child stove almanac tears:

house
grandmother
child
stove
almanac
tears

tears
house
almanac
grandmother
stove
child

child
tears
stove
house
grandmother
almanac

almanac
child
grandmother
tears
house
stove

stove
almanac
house
child
tears
grandmother

grandmother
stove
tears
almanac
child
house

প্রথম স্তবকটি মূল ক্রমে শব্দগুলি হয়, দ্বিতীয় স্তবকটি প্রথম থেকে 6-1-5-2-2-3-3 ক্রমে থাকে। তৃতীয় স্তবটি হ'ল দ্বিতীয়টির সাথে সম্পর্কিত সেই আদেশটি এবং এরপরেই সমস্ত স্তরের an।

ধরে নিন যে ইনপুট শব্দগুলি সর্বদা কেবল বর্ণ, বড় হাতের বা ছোট হাতের অক্ষরে থাকবে। আপনি এগুলি স্ট্রিংগুলির অ্যারে বা একটি অক্ষরবিহীন অক্ষর (স্পেস, নিউলাইন ইত্যাদি) দ্বারা সীমিত একটি একক স্ট্রিং হিসাবে নিতে পারেন। আউটপুটে, লাইনগুলি নিউলাইনগুলি ( 0x0A) দ্বারা পৃথক করা হয় এবং স্টানজাস দুটি নিউলাইন দ্বারা পৃথক করা হয়। একটি পেছনের নতুন লাইন গ্রহণযোগ্য।

এটি , তাই বাইট জেতে সংক্ষিপ্ততম কোড। বলা হচ্ছে, পুরো কবিতার কাঠামো সংকুচিত করার জন্য এটি সংক্ষিপ্ত হতে পারে তবে আমি এমন কয়েকটি সমাধান দেখতে চাই যা প্রতিটি স্তরের উপরের ভিত্তিতে ভিত্তি করে।


ট্রেলিং নিউলাইন গ্রহণ করা হয়েছে?
লুইস মেন্ডো

এছাড়াও, বিভাজক রেখায় একটি স্থান থাকতে পারে?
লুইস মেন্ডো

@ লুইস মেন্ডো অবশ্যই, উভয়ই ঠিক আছে।
নিনজা বিয়ারমোনকি

আউটপুটটি কি স্ট্রিংয়ের আদেশযুক্ত তালিকার আদেশ তালিকা হতে পারে?
গ্রেগ মার্টিন

6
সেষ্টিনাসের জন্য +1, তবে আমি নিশ্চিত নই যে এটি natural-languageট্যাগটির যোগ্যতা রাখে । ইনপুটটি জিব্বারিশের ছয়টি স্ট্রিং হলেও অ্যালগরিদম একই।
DLosc

উত্তর:


1

জেলি , 15 14 বাইট

620œ?$ÐĿY€j⁷Ḥ¤

TryItOnline!

কিভাবে?

হ্যাঁ, জেলিতে আমার সংযোজনগুলির একটি ব্যবহার! ( œ?)

620œ?$ÐĿY€j⁷Ḥ¤ - Main link: list of words L
      ÐĿ       - loop until no longer unique, collecting intermediate results
     $         -     last two links as a monad
   œ?          -         permutation of right argument (initially L) at index
620            -         620
        Y€     - join with line feeds for €each (the words of each stanza)
          j    - join (the stanzas) with
             ¤ - nilad followed by link(s) as a nilad
           ⁷   -     a line feed
            Ḥ  -     double (two line feeds)

7

পাইথন, 72 64 বাইট

i,n=input(),'\n';exec"print n.join(i)+n;i=map(i.pop,[-1,0]*3);"*6

অতিরিক্ত ট্রেলিং নিউলাইন সহ পোস্টে বর্ণিত ফর্ম্যাটে str টি স্ট্রিং এবং আউটপুটগুলির একটি কমা দ্বারা বিচ্ছিন্ন অ্যারে হিসাবে STDIN এর মাধ্যমে ইনপুট নেয়।

এটি অনলাইন চেষ্টা করুন! (Ideone)

এছাড়াও, এটি করা ঠিক হয়েছে কিনা তা সম্পর্কে আমি নিশ্চিত নই, তবে এখানে 59 বাইটে একটি বেনাম ল্যাম্বডা ফাংশন আকারে একটি সংক্ষিপ্ত উত্তর দেওয়া হয়েছে যা উপরের উত্তরের মতো একই ফর্ম্যাটে ইনপুট নেয় এবং উত্পন্ন করার জন্য প্রয়োজনীয় প্রোগ্রামটি আউটপুট করে দেয় সঠিক আউটপুট:

lambda i,n='\n':"print n.join(i)+n;i=map(i.pop,[-1,0]*3);"*6

সুতরাং এটি অবশ্যই ফর্ম্যাটে কল করা উচিত exec(<Function Name>(<Array>))। আবার, আমি নিশ্চিত নই যে এটি করা ঠিক আছে কিনা, তাই আমি এটিকে অতিরিক্ত, পৃথক, প্রতিযোগিতামূলক উত্তর হিসাবে যুক্ত করছি যতক্ষণ না কেউ (সম্ভবত ওপি) আশাবাদী এটি ঠিক আছে কি না তা স্পষ্ট করতে পারে, যার সত্যই আমি প্রশংসা করব ।


2
আমি popকৌশলটি পছন্দ!
xnor

3

এমএটিএল , 18 17 বাইট

0ch5:"t[6l5H4I7])

বিন্যাসে ইনপুট স্ট্রিংগুলির একটি সেল অ্যারে

{'house' 'grandmother' 'child' 'stove' 'almanac' 'tears'}

এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা

0c          % Push string with a single space, to be used as separator
h           % Input array of 6 strings implicitly and append the above string
5:"         % Repeat 5 times
  t         %   Duplicate the array of strings (previous stanza plus separator)
  [6l5H4I7] %   Push array [6 1 5 2 4 3 7]. The 7th string is the separator, and stays
            %   at the end. The other strings are shuffled as required
  )         %   Index into the array of strings
            % End implicitly
            % Display implicitly

3

গণিত, 59 বাইট

r=Riffle;""<>Flatten@r[NestList[RotateRight,#,5],""]~r~"\n"&

এই নামবিহীন ফাংশনের মূলটি হ'ল NestList[RotateRight,#,5], যা দৈর্ঘ্যের 6 টির একটি ইনপুট তালিকা গ্রহণ করে এবং 6 টি তালিকার একটি তালিকা তৈরি করে, প্রতিটি স্টিস্টিনা উপায়ে ঘোরানো। প্রকৃতপক্ষে, যদি তালিকার অফ-স্ট্রিংগুলির একটি তালিকা গ্রহণযোগ্য আউটপুট NestList[RotateRight,#,5]&হয় তবে 26 বাইটে কাজটি করে ।

তারপরে, r[...,""]6 টি তালিকার প্রত্যেকটির মধ্যে একটি খালি স্ট্রিং সন্নিবেশ করানো হয়; Flattenপুরো জিনিসটিকে একক স্ট্রিংয়ের তালিকায় পরিণত করে; ~r~"\n"তারপরে str প্রতিটি স্ট্রিংয়ের মধ্যে একটি নতুন লাইন সন্নিবেশ করানো হয়; এবং ""<>পুরো জিনিসটিকে একক স্ট্রিংয়ে যুক্ত করে। সুতরাং অন্যান্য 33 বাইট কেবল স্ট্রাকচার্ড আউটপুটকে একক স্ট্রিংয়ে রূপান্তর করতে পারে।


2

ব্যাচ, 99 বাইট

@for %%w in (%*)do @if not .%%w==.%7 echo %%w
@echo(
@if not .%7==...... %0 %6 %1 %5 %2 %4 %3 .%7

ব্যাখ্যা: কমান্ড-লাইন প্যারামিটার হিসাবে ইনপুট নেয়। %0প্রায় লুপ থেকে এটি কারণ, সঁচায়ক .মূলত খালি 7th প্যারামিটারে গুলি। অতিরিক্তটি .হ'ল কারণ ifখালি স্ট্রিংগুলিতে কাজ করে না।


2

রুবি, 51 বাইট

->z{z.map{z[1],z[3],z[5],z[4],z[2],z[0]=z+[""]}*$/}

0..5নীচে হিসাবে সংখ্যাগুলি পুনরাবৃত্তি পরিবর্তে , আমরা এর উপাদানগুলির উপর পুনরাবৃত্তি করে 6 বার পুনরাবৃত্তি করি z। স্বাভাবিক ব্যবহারের সালে যেমন (0..5).map{|i|puts i}কোড {}সার্চ উপাদানের উপরে iterated। এই ক্ষেত্রে কোডের অভ্যন্তরে কোড দ্বারা প্রদত্ত {}ক্রিয়াকলাপগুলি পুনরায় পুনরুক্ত হওয়া উপাদানগুলি পড়বে না, সুতরাং আমরা অনুমতিগুলির zসাথে হস্তক্ষেপ না করে উপাদানগুলির উপর পুনরাবৃত্তি করতে পারি ।

রুবি, 56 বাইট

প্যারামিটার হিসাবে একটি 6 টি উপাদান অ্যারে নেয়

->z{(0..5).map{z[1],z[3],z[5],z[4],z[2],z[0]=z+[""]}*$/}

বিকল্প সংস্করণ 6 পরামিতি গ্রহণ করে

->a,b,c,d,e,f{(0..5).map{b,d,f,e,c,a=a,b,c,d,e,f,""}*$/}

mapআমরা প্রত্যেকে প্রতিটি পুনরাবৃত্তি সহ z। মূল সংস্করণ প্লাস এ ""স্তরের সাথে বিরতির প্রতিনিধিত্ব করতে আউটপুট হয়ে যায় map(এই সপ্তম অ্যারে উপাদানটি অ্যাসাইনমেন্টের দ্বারা প্রয়োজন হয় না তাই উপেক্ষা করা হয়)। *$/অ্যারেগুলিকে স্ট্রিংয়ে রূপান্তরিত করে, সমস্ত কিছুকে নতুন লাইনের সাথে যুক্ত করে।


2

র‌্যাকেট 115 বাইট

(let p((o(list l))(m 0))(if(> n m)(p(cons(map(λ(x)(list-ref(list-ref o 0)x))'(5 0 4 1 3 2))o)(+ 1 m))(reverse o)))

Ungolfed:

(define(f l n)
 (let loop ((ol (list l))
             (m 0))
    (if (> n m) 
        (loop
         (cons (map
                (λ (x) (list-ref (list-ref ol 0) x))
                '(5 0 4 1 3 2))
               ol)
         (add1 m))
        (reverse ol))))

পরীক্ষামূলক:

(f (list "house" "grandmother" "child" "stove" "almanac" "tears") 6)

আউটপুট:

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