ফ্লেক্সাগোনাল নমনীয়তা


9

প্রোগ্রামার হওয়া, আমাদের ফ্লেক্স দেখা খুব আকর্ষণীয় নয়। আজ আমরা যে পরিবর্তন! এই চ্যালেঞ্জটিতে আপনি লেক্স এবং হেক্সাফ্লেক্সাগনগুলিকে ফ্লেক্স করবেন।

সম্পর্কিত

একটি ভিডিও সূচনার জন্য , ফ্লেক্সাগনগুলিতে ভাইহার্ট ভিডিও (গুলি) দেখুন

ফ্লেক্সাগন এমন একটি আকৃতি যা আপনি উপরের এবং নীচের অংশের বাইরে অন্য মুখগুলি প্রকাশ করতে নমনীয় করতে পারেন; আমরা একটি হেক্সাহেেক্সাফ্লেক্সন তৈরি করছি, যার 6 টি মুখ রয়েছে। কাগজের স্ট্রিপ থেকে কীভাবে একটি হেক্সাহেেক্সাফ্লেক্সনকে ভাঁজ করতে হবে তার নীচের চিত্রটি দেখুন।

হেক্সাহেএক্সফ্লেক্সন নির্মাণ

Aফালা উভয় পক্ষ দেখায়। দুটি সাদা ত্রিভুজ একসাথে আটকানো হয়। এইভাবে আপনি এটি নমনীয় হবে:

ফ্লেক্সাগন নমনীয়

নীচে সম্ভাব্য রাজ্য এবং তাদের সম্পর্কের একটি চিত্র রয়েছে:

চিত্র v6

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

ব্যাকগ্রাউন্ডে ধূসর চেনাশোনা প্রতিনিধিত্ব কিভাবে আপনি কোনো রাজ্যের আপনার flexagon আনমন করতে পারেন: এটা আনমন 4 বিভিন্ন উপায় আছে, আমরা এই কল Left, Right, Upএবং Down। আপনি এই দিকগুলিতে আসলে নমনীয় হন না, গুরুত্বপূর্ণ বিষয়টি হ'ল কিছু কিছু একে অপরের বিপরীতে থাকে।
আপনি যদি কেন্দ্রে থাকেন তবে আপনি ব্যবহার করতে পারেন Leftএবং Rightঅন্য কেন্দ্রে যেতে পারেন। কেন্দ্র থেকে বেরিয়ে আসতে আপনি Upএবং ব্যবহার করেন Down। আপনি যদি কেন্দ্রে না থাকেন তবে আপনি ব্যবহার করতে পারবেন নাLeftবা Right

Left/Down = clockwise
Right/Up  = anti-clockwise

চ্যালেঞ্জ

একটি ফাংশন বা প্রোগ্রাম তৈরি করুন যা 18 সামনের মুখ এবং 18 ফ্লেক্সাগনের 18 পিছনের মুখগুলি, বাম, ডান, উপরে এবং নীচে ফ্লেক্সগুলির ক্রম থাকা উচিত এবং ইনফ্লেক্সগুলির পরে 8 দৃশ্যমান মুখগুলি ফিরিয়ে আনুন input

বিস্তারিত উদাহরণ গণনা:

flex "hexaflexaperplexia" 
     "flexagationdevices" 
     [Right, Right, Left]

Divide a strip of paper into 18 triangles:
1/2\3/1\2/3\1/2\3/1\2/3\1/2\3/1\2/3   Front
4/4\5/5\6/6\4/4\5/5\6/6\4/4\5/5\6/6   Back

Write "hexaflexaperplexia" on the front of the paper strip:
1/2\3/1\2/3\1/2\3/1\2/3\1/2\3/1\2/3

hexaflexaperplexia
123123123123123123
h  a  e  p  p  x     Face 1, Initially the front face
 e  f  x  e  l  i    Face 2, Initially the back face
  x  l  a  r  e  a   Face 3, Initially hidden


Write "flexagationdevices" on the back of the paperstrip:
4/4\5/5\6/6\4/4\5/5\6/6\4/4\5/5\6/6

flexagationdevices
445566445566445566
fl    at    ev       Face 4, up from 3
  ex    io    ic     Face 5, up from 2
    ag    nd    es   Face 6, up from 1


Flex it [Right, Right, Left]
  The initial visible face is 1: "haeppx"
  flexing Right ..
  The current visible face is 2: "efxeli"
  flexing Right ..
  The current visible face is 3: "xlarea"
  flexing Left ..
  The current visible face is 2: "efxeli"
  flexed [Right, Right, Left]!

outputting "efxeli"

উদাহরণ প্রয়োগ: http://jdoodle.com/a/18A

ইনপুট এবং প্রত্যাশিত আউটপুট:

> hexaflexaperplexia flexagationdevices RRL
= efxeli

> loremipsumdolorsit hexaflexamexicania RUU
= riuort

> abcdefghijklmnopqr stuvwxyz1234567890 UL
= I can't flex that way :(

> abcdefghijklmnopqr stuvwxyz1234567890 RRRRLLUDDUUUULDD
= uv1278

বিধি

  • আপনি কোনও যুক্তিসঙ্গত উপায়ে ইনপুট এবং রিটার্ন আউটপুট নিতে পারেন
  • যদি ইনপুটটি অসম্ভব হয় তবে আপনার এমন কোনওভাবে নির্দেশ করা উচিত যা নিয়মিত আউটপুট থেকে পৃথক
  • স্ট্যান্ডার্ড লুফোলস প্রযোজ্য
  • এই Codegolf। বাইট জিতে সংক্ষিপ্ত কোড।

উত্তর:


2

হাস্কেল (ল্যাম্বডাবোট), 270 234 বাইট

(!)=((map(snd<$>).groupBy((.fst).(==).fst).sortOn fst).).zip.cycle
o n(a,b)|n>1||b<1=(mod(a+[-1,1,0,0]!!n)3,mod(b+[0,0,-1,1]!!n)3)
(x&y)d|(g,h)<-foldl(flip(.))id(o<$>d)(0,0)=([0,1,2]!x++[3,3,4,4,5,5]!y)!!([0,5,1,1,4,2,2,3,0]!!(3*g+h))

ব্যবহার:

> (&) "hexaflexaperplexia" "flexagationdevices" [1,3]
"exioic"

[0,1,2,3] = [বাম, ডান, উপরে, নীচে]

প্রচুর বাইটের জন্য @ ড্যামিয়েনকে ধন্যবাদ!


1
এর ব্যবহার কী |b/=0=[]!!1? আপনি পয়েন্টফ্রি শৈলীতে কিছু ফাংশন পুনর্লিখন কয়েক বাইট সংরক্ষণ করতে পারেন: \(a,_)(b,_)->a==b-> (.fst).(==).fst,(!)=(q.).zip.cycle
ড্যামিয়েন

|b/=0=[]!!1আপনি যদি একটি অসম্ভব ফ্লেক্স করার চেষ্টা করেন তবে ডামিয়েন কেবল একটি ব্যতিক্রম ছুঁড়েছেন
ব্ল্যাকক্যাপ

1
ঠিক আছে, আপনি এটিকে সহজ করে তুলতে পারবেন এটি o n(a,b)|n>1||b<1=(z$a+[-1,1,0,0]!!n,z$b+[0,0,-1,1]!!n)একটি অ-বহনযোগ্য নিদর্শন ব্যতিক্রম ছুঁড়ে ফেলবে
ড্যামিয়েন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.