রুবিকের কিউবে সনাক্তকরণের ক্রম


32

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

এর মধ্যে কিছু পরিচয় ক্রম নির্ধারণ করা স্পষ্ট, পছন্দ U2 R R' U2বা পছন্দ করে U D2 U' D2। প্রথমটিতে দুটি এলোমেলো পদক্ষেপগুলি করা হয় U2 Rএবং পরে তত্ক্ষণাত পূর্বাবস্থায় ফিরে যায় R' U2। দ্বিতীয়টিও একই রকম। প্রথমে দুটি এলোমেলো পদক্ষেপ U D2এবং তারপরে এগুলি পূর্বাবস্থায় ফিরে আসে তবে বিপরীত ক্রমে U' D2। এটি কেবলমাত্র কাজ করে, কারণ সরানো Uকেবলমাত্র উপরের স্তরটির D2টুকরাগুলিকে প্রভাবিত করে এবং চলটি কেবল নীচের স্তরের টুকরোকেই প্রভাবিত করে। আপনি এই দুটি সরানো ক্রমের একটি দৃশ্য দেখতে পারেন।

ইউ 2 আরআর 'ইউ 2 ইউ ডি 2 ইউ 'ডি 2

অন্যান্য পরিচয় ক্রমগুলি এখুনি সুস্পষ্ট নাও হতে পারে। উদাহরণস্বরূপ ক্রম R' U' R' F' U F U' R' F R F' U' R U2 R। এটি বেশ দীর্ঘ, তবে কিউবে কোনও প্রভাব নেই।

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

নোটেশন সরান

একটি পদক্ষেপ কিউবের ছয়টি মুখের একটির একটি স্তরের পালা বর্ণনা করে। একটি পদক্ষেপ মুখের প্রতিনিধিত্ব করে এমন একটি অক্ষর নিয়ে গঠিত এবং তারপরে বাঁক কোণটি উপস্থাপন করে optionচ্ছিক প্রত্যয় by

বর্ণগুলি এবং তাদের সম্পর্কিত মুখগুলি হ'ল ইউ (উপরে - উপরে দিকে মুখ করে), ডি (নীচে - নীচের দিকে মুখ করা), আর (ডানদিকে - ডান দিকে মুখ করা), এল (বাম দিকে - বাম দিকে মুখ করা) , এফ (সামনে - আপনার মুখোমুখি পক্ষ) এবং বি (পিছনে - পাশটি আপনার থেকে দূরে মুখোমুখি)।

যদি প্রত্যয় না থাকে তবে মুখটি 90-ডিগ্রি ঘড়ির কাঁটার দিকে পরিণত হয়, প্রত্যয়টির 'অর্থ, মুখটি 90-ডিগ্রি ঘড়ির কাঁটার দিকে পরিণত হয় এবং প্রত্যয়টির 2অর্থ, মুখটি 180 ডিগ্রি ঘড়ির কাঁটার দিকে পরিণত হয়।

স্বীকৃতিতে এটি আপনার কোনও সমস্যা রয়েছে, কেবলমাত্র http://alg.cubing.net ব্যবহার করুন , যেখানে আপনি এই জাতীয় চলনক্রমগুলি কল্পনা করতে পারেন।

চ্যালেঞ্জ

আপনার কাজটি একটি প্রোগ্রাম লিখতে হয়, এটি নির্ধারণ করে যে মুভ সিকোয়েন্সগুলি একটি পরিচয় কিনা।

আপনি একটি সম্পূর্ণ প্রোগ্রাম বা একটি ফাংশন লিখতে পারেন। এটি স্ট্রিপ সিকোয়েন্স সহ একটি স্ট্রিং গ্রহণ করতে পারে (চালগুলি স্পেস দ্বারা পৃথক করা হয়) ইনপুট হিসাবে (এসটিডিআইএন, কমান্ড-লাইন আর্গুমেন্ট, প্রম্পট বা ফাংশন আর্গুমেন্টের মাধ্যমে), এবং আউটপুট (রিটার্ন মান বা এসটিডিআউট মাধ্যমে) একটি বুলিয়ান মান বা সংশ্লিষ্ট পূর্ণসংখ্যা ( সত্য - 1 - পরিচয় ক্রম / মিথ্যা - 0 - পরিচয় ক্রম নয়)।

যদি আপনি প্রত্যয়টি 'আপনার প্রোগ্রামিং ভাষায় সমস্যা তৈরি করে থাকেন তবে আপনি আলাদা চিহ্ন ব্যবহার করতে পারেন, তবে অঙ্কে নয়। R F2 U3অনুমোদিত নয়।

এটি কোডগল্ফ, তাই সংক্ষিপ্ততম কোড (বাইটে) জিতেছে।

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

"" -> True
"U2 R R' U2" -> True
"U D2 U' D2" -> True
"U2 R U2 R'" -> False
"R' U' R' F' U F U' R' F R F' U' R U2 R" -> True
"L'" -> False
"B B2 B' B2" -> True
"D D2 D'" -> False
"R F' D2 U B' F2 B' U2 D2 F2 B2 U F R'" -> True
"D2 U' R2 U F2 D2 U' R2 U' B' L2 R' B' D2 U B2 L' D' R2" -> False
"R U R' U' R' F R2 U' R' U' R U R' F' R2 U R2 U' R2 U' D R2 U' R2 U R2 D'" -> True
"R U R' U' R' F R2 U' R' U' R U R' F' R2 U' R2 U R2 U' D R2 U' R2 U R2 D'" -> False
"B2 F2 U' F2 U R2 F2 U2 B D' R' D' R2 D' F2 U' F U R2 U R B D B D2 L2 D' F2 U D' R' D B R2 D2 F2 R' F2 D2" -> True
"R U2 R' U R' U2 R U2 R U R' U' R' U R U2" -> False
"U F B' R' U F' R U' F' B L U' F L'" -> False
"R2 U' R' U' R U R U R U' R" -> False
"R' F R' B2 R F' R' B2 R2" -> False

এর সাথে কী হয়েছে R F2 U3?
জন ডিভোরাক

2
আমি কেবল এটি নিশ্চিত করতে চাই যে, প্রত্যেকেরই পূর্ব শর্ত রয়েছে। আমি যদি অনুমতি দিই U3, আপনি কেবলমাত্র একটি অঙ্কে প্রত্যয়টি ফেলে দিতে পারেন।
জাকুবে

3
আমি টি-টপ, বি-বটম এবং পি-পোস্টেরিয়ের (পিছনে) ব্যবহার করে এমন স্বরলিপিটিতে আরও বেশি অভ্যস্ত। লোকেরা সম্ভবত সিকোয়েন্সটি দেখে পছন্দ করেছে R2 D2
mbomb007

2
@ mbomb007 আমি টি শীর্ষের জন্য বুঝতে পারি, তবে আমি পশ্চিমা অংশের জন্য পি কখনই দেখিনি এবং এটির মন্তব্যের জন্য যদি তা না হয় তবে আমি এর অর্থ বুঝতে পারি না ...
জন ডভোরাক

2
@ mbomb007 আমি এটি স্বরলিপিটিও দেখেছি, তবে এটি মূল সিংমাস্টার স্বরলিপি হিসাবে এতটা সাধারণ বা পুরানো নয় এবং কেন লোকেরা মূলটির সাথে গোলযোগ করতে চান তা আমি জানি না। যদিও ডেভিড সিংমাস্টার (যতদূর আমি জানি) এটি উল্লেখ না করে, আমি লক্ষ্য করেছি যে সমস্ত মুখগুলি পুরোপুরি সামঞ্জস্যপূর্ণ এবং কোনও অবস্থানের পরিবর্তে দিকনির্দেশ হিসাবে বিবেচিত হলে কোনও সংঘাত নেই। That is F(orward), B(ackward), L(eft), R(ight), U(p), D(own)
স্তর নদী সেন্ট

উত্তর:


14

হাস্কেল, 263 261 247 243 টি অক্ষর

c[x]=[x]
c(x:"2")=[x,x]
c(x:_)=[x,x,x]
s!a@[x,y,z]=case s of
 'R'|x>0->[x,-z,y]
 'B'|y>0->[z,y,-x]
 'U'|z>0->[-y,x,z]
 'L'|x<0->[x,z,-y]
 'F'|y<0->[-z,y,x]
 'D'|z<0->[y,-x,z]
 _->a
r=[-2..2]
i=mapM id[r,r,r]
f w=i==foldr(map.(!))i(c=<<words w)

বরং স্ট্রেটওয়ারওয়ার্ড অ্যালগরিদম; প্রতিটি কিউবলেটটি 1,2,4 বা 8 টি অংশ থেকে তৈরি করা হয় যার অবস্থান এবং দিকনির্দেশকে এনকোডিং করছে; প্রান্তে কিউবলেট প্রতি 4 हिस्सा, কর্নার কিউবলেট প্রতি 8, 7 কিউবলেট স্থিতিশীল।

c সি ইনপুটটির প্রতিটি শব্দকে সিডাব্লু টার্নের অনুক্রমে আটকায় এবং প্রতিটি খণ্ডকে !একটি মোড় অনুসারে প্রেরণ করে। iহয় আমি dentity অবস্থান। fপ্রধান unction হয়।

আমি chomp ফাংশন নিয়ে খুব খুশি নই , তবে এটির সংক্ষিপ্ত করার কোনও উপায় আমি খুঁজে পাচ্ছি না (তবে নিমিমি করেছিলেন, তবে)


কীভাবে c(x:"2")=[x,x]এবং c(x:_)=[x,x,x]। 2 বাইট সঞ্চয়
নিমিম

আপনি যদি ব্যবহার করেন i=sequence[s,s,s]এবং সমস্ত টিপলকে তালিকায় পরিবর্তন করেন (যেমন: (x,y,z)হয়ে যায় [x,y,z]) - এটি ~ 9 টি অক্ষর সংরক্ষণ করবে। এটি ইনলাইন করা আরও 4 টি সঞ্চয় করে। ড্রপ _মামলা থেকে !অন্য 11. সংরক্ষণ
MtnViewMark

@ এমটিএনভিউমার্ক সম্পন্ন হয়েছে এবং উন্নত হয়েছে i, ধন্যবাদ। ইনলাইন iকরে আপনি কী বোঝাতে চাইছেন তা নিশ্চিত নন - দয়া করে নোট করুন এটি এর সংজ্ঞাতে দুবার প্রদর্শিত হয়েছে f। আপনি কেসটি ফেলে দেওয়ার অর্থ কী তা নিশ্চিত নন _- _->aপুরোপুরি ছেড়ে চলে যাওয়া বা শীর্ষে স্থানান্তরিত করার ফলে একটি বহির্মুখী বিন্যাসের ব্যতিক্রম পাওয়া যায় এবং এটিকে শীর্ষে স্থানান্তর করা কোনওরকম অক্ষর সংরক্ষণ করে না। আমি সেখানে 5 টি অক্ষর সংরক্ষণ করার ব্যবস্থা করেছিলাম।
জন ডিভোরাক

দুর্দান্ত সমাধান। আমি সমস্ত পরীক্ষার কেস চেক করেছি।
জাকুব

আবার, আপনার সমাধানের জন্য অভিনন্দন। আপনি যেহেতু সংক্ষিপ্ততম কোডটি উপস্থাপন করেছেন তাই আপনি 100 টি খ্যাতি অর্জন করেন।
জাকুব

4

কিউবিকভাবে , 6 4 বাইট

¶=8%

আমি জিতলাম: পি

¶=8%
¶     read a string, evaluate as Cubically code
 =8   set notepad to (notepad == 8th face)
   %  print notepad

নোটপ্যাডটি শূন্যে শুরু করা হয়েছে। 8 তম "মুখ" 1 টি কিউবটি অমীমাংসিত থাকলে এবং অন্যথায় 0 থাকে।

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


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

2
@ জাকুব আমি সম্মত হই যে, এটি চূড়ান্ত হওয়ার পরে এত দেরিতে পোস্ট করা রুবিকের কিউব বিল্টিনগুলির সাথে একটি ভাষা এবং অন্য উত্তরগুলি পুরোপুরি ডেসিমেট করার কারণে এটি গ্রহণ করা উচিত নয়। তবে এটি মেটা অনুযায়ী বিজয়ী হওয়ার জন্য প্রযুক্তিগতভাবে যোগ্য (অ-প্রতিদ্বন্দ্বী বিধিটি কিছুটা বাতিল করা হয়েছিল)।
MDXF

3

জে - 232, 220, 381, 315 296 বাইট

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

সম্পাদনা করুন : আরও কিছু গল্ফ করছে

f=:+/~6&*
r=:4 :'y f&.>(]{^:x~)&.C.;/i.2 4'"0
t=:((r~0),_4<\44#.inv 1478253772705907911x)&C.&.
Y=:(C.(,0 2 r 4 5),;/4 f&i.8)&{^:t
X=:((,1 1 0 2 r 2 4 3 1)C.C.;/0 4 2 5 f i.8)&{^:t
61".@A."1'=: ',"#~6 3$'D0XR1YF1XU2YB3XL3Y'
T=:[:(_2".@}.'(i.48)-:'&(,,[))[:(,'^:',])/&.>@|.&.;:[:''''&=@{.`]},:&'3'

পূর্ববর্তী চেষ্টা ছাড়া, এই নেই একাউন্টে কোণ ঘূর্ণন নিতে।

fশুধুমাত্র একটি সহায়ক ফাংশন। rএক মুখ ঘোরানো হয়। একটি মুখ নিম্নলিখিতভাবে এনকোড করা হয়েছে:

  1. 6 ধাপে সমস্ত কোণ
  2. ছয়টি ধাপে সমস্ত প্রান্ত

এই আদেশটি আবর্তন এবং মোচড়গুলির এনকোডিংকে সহায়তা করে। tএমন একটি ক্রিয়া বিশেষণ যা মুখকে একটি নির্দিষ্ট ঘনক্ষেত্রের আবর্তনের অধীনে মোচড় দেয়।

Xএবং Yএমন ক্রিয়াকলাপগুলি যা পুরো ঘনক্ষেত্রের দিকের বাম দিকটিকে যুক্ত সংখ্যা হিসাবে গ্রহণ করে।

পরবর্তী লাইনটি সমস্ত ঘূর্ণনকে সংজ্ঞায়িত করে: প্রতি ঘোরা প্রতি 3 টি অক্ষর: নাম, আবর্তনের সংখ্যা এবং দিক।

শেষ লাইনটি পরীক্ষার ক্রিয়াটি সংজ্ঞায়িত করে T3 এবং 'পাওয়ার নোটেশনে রূপান্তর করে, পরীক্ষা ভেক্টর সংযোজন পরিচালনের ক্রমটি উল্টিয়ে এবং পুরো বিষয়টি পুরোপুরি উত্তেজিত করে।

অনুরোধের উপর আরও বিশদ।

tests =: (] ;. _2) 0 : 0

 U2 R R' U2
 U D2 U' D2
 U2 R2 R'
 R' U' R' F' U F U' R' F R F' U' R U2 R
 L'
 B B2 B' B2
 D D2 D'
 R F' D2 U B' F2 B' U2 D2 F2 B2 U F R'
 D2 U' R2 U F2 D2 U' R2 U' B' L2 R' B' D2 U B2 L' D' R2
 R U R' U' R' F R2 U' R' U' R U R' F' R2 U R2 U' R2 U' D R2 U' R2 U R2 D'
 R U R' U' R' F R2 U' R' U' R U R' F' R2 U' R2 U R2 U' D R2 U' R2 U R2 D'
 B2 F2 U' F2 U R2 F2 U2 B D' R' D' R2 D' F2 U' F U R2 U R B D B D2 L2 D' F2 U D' R' D B R2 D2 F2 R' F2 D2
 R U2 R' U R' U2 R U2 R U R' U' R' U R U2
 U F B' R' U F' R U' F' B L U' F L'
 R2 U' R' U' R U R U R U' R
 R' F R' B2 R F' R' B2 R2
)
res =: 1 1 1 0 1 0 1 0 1 0 1 0 1 0 0 0 0
res ([,],:=) T"1 tests NB. passes all tests.
1 1 1 0 1 0 1 0 1 0 1 0 1 0 0 0 0
1 1 1 0 1 0 1 0 1 0 1 0 1 0 0 0 0
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

NB. some handy display methods:
dispOrig=: (". ;._2) 0 :0
   _   _   _   5  29  11   _   _   _   _   _   _
   _   _   _  47  _1  35   _   _   _   _   _   _
   _   _   _  23  41  17   _   _   _   _   _   _
   3  27   9   0  24   6   1  25   7   2  26   8
  45  _3  33  42  _6  30  43  _5  31  44  _4  32
  21  39  15  18  36  12  19  37  13  20  38  14
   _   _   _   4  28  10   _   _   _   _   _   _
   _   _   _  46  _2  34   _   _   _   _   _   _
   _   _   _  22  40  16   _   _   _   _   _   _
)
ind =: dispOrig i.&, i. 48 NB. indices of i.48 in the original display

disp =: (9 12$(,dispOrig) ind}~ ])
changed =: 1 : '(u ~:&disp ]) i.48' NB. use to debug permutation verbs: L ch
vch =: 1 :'disp  ((]+_*=) u)'
NB. viewmat integration RGB
cm =: 255 * 1 0 0 , 1 1 1, 0 1 0, 1 1 0, 1 0.5 0, 0 0 1,: 0 0 0 NB. colormap
NB. use as:  "cube i. 48" for seeing a nice folded out cube.
cube =: cm viewmat (>&7 + >&15 + >&23 + >&31 + >& 39 + >&47)@|@disp@]

11
"যেহেতু আমার পরীক্ষার ফলাফল প্রদত্তগুলির সাথে মিলে না ..." যেমন রয়েছে, আপনার সমাধান কাজ করে না? আমি তখন এটি পোস্ট করতাম না ...
জন ডিভোরাক

তুমি ঠিক বলছো. এটি এখনই স্থির করুন।
jpjacobs

আমি অতিরিক্ত 4 টি পরীক্ষার মামলা যুক্ত করেছি। এর মধ্যে দু'জন এখনও মিথ্যা ফল দেয়। দেখে মনে হচ্ছে আপনি কোণগুলির ওরিয়েন্টেশনকে উপেক্ষা করছেন।
জাকুব

@jpjacobs এখন প্রশ্নে 100 টি রেপ বন্টি রয়েছে। আপনার কোড সংশোধন করতে চান?
জাকুবে

ভয়েলা, হয়ে গেছে। এখন শুধু এটি হ্রাস।
jpjacobs

2

পাইথন 3: 280 অক্ষর

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

def f(a):
 s=t="UF UR UB UL DF DR DB DL FR FL BR BL UFR URB UBL ULF DRF DFL DLB DBR".split()
 for m in a.split():q="FLBR FRBL FDBU FUBD URDL ULDR".split()['UDLRFB'.index(m[0])];n=2+"2'".find(m[-1]);s=[[p,p.translate(str.maketrans(q,q[n:]+q[:n]))][m[0]in p]for p in s]
 return s==t

এর পিছনে ধারণাটি নিম্নলিখিত is sটুকরা অবস্থান প্রতিনিধিত্ব করে UF, UR, এবং তাই। উদাহরণস্বরূপ: এর s = ['DF', 'BL', ...]অর্থ, টুকরাটি UFঅবস্থানে রয়েছে DF, টুকরাটি URঅবস্থানে রয়েছে BL...

টুকরোটির অবস্থান কীভাবে পরিবর্তিত হয়, যখন কোনও পদক্ষেপ নেওয়ার সময়। আপনি যদি কিছু-কিছু Uসরান, Uসামনের মুখের মুখী, খেলোয়াড়ের সমস্ত স্টিকার (রঙ) বাম মুখের দিকে যান। বাম মুখের স্টিকারগুলি পিছনে চলে যায়, এগুলি ডানদিকে এবং এগুলি সামনের মুখের দিকে। দ্বারা এনকোডেড FLBR। কিছু উদাহরণ: UFসরানো UL, আরও UFRসরানো ULFএবং আরও। অতএব, একটি পদক্ষেপ প্রয়োগ করা সহজভাবে সংশ্লিষ্ট স্তরের টুকরাগুলির মুখগুলি অনুবাদ করে ting

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