কোনও রুবিকের কিউব অ্যালগরিদমকে বিপরীত করুন


19

আপনি যখনই কোনও রুবিকের কিউবে একটি পদক্ষেপ নেন, সেখানে একটি বিপরীত পদক্ষেপ থাকে যা প্রথম পদক্ষেপটিকে পূর্বাবস্থায় ফেলে দেয়। এ কারণে, প্রতিটি অ্যালগরিদম (চলনের সেট) এর বিপরীত অ্যালগরিদম থাকে যা প্রথম অ্যালগরিদমকে পূর্বাবস্থায় ফেলে।

এই চ্যালেঞ্জটির লক্ষ্য একটি প্রদত্ত অ্যালগরিদমের বিপরীত সন্ধান করা।

স্পেসিফিকেশন:

ইনপুটটিতে স্বতন্ত্র পদক্ষেপের একটি অ্যারে থাকে। প্রতিটি পদক্ষেপ 1 বা 2 দৈর্ঘ্যের একটি স্ট্রিং অবশ্যই, আপনি যে কোনও ইনপুট ফর্ম্যাটটি আপনার ভাষায় সর্বাধিক বোধ করে তা আপনি ব্যবহার করতে পারেন। প্রতিটি পদক্ষেপে কাঠামো Xবা X'বা X2যেখানে Xবড় হাতের অক্ষর বা ছোট হাতের অক্ষর থাকে।

বিপরীতে X, কেবল এটির সাথে প্রতিস্থাপন করুন X'। তেমনি, X'হয়ে যায় XX2অন্যদিকে পরিবর্তন হয় না।

আউটপুট তৈরি করতে, প্রতিটি পদক্ষেপ বিপরীত করুন এবং তারপরে অ্যারেটি বিপরীত করুন।

উদাহরণ (স্পেস দ্বারা পৃথক স্ট্রিং):

R => R'

D U' => U D'

S T A C K => K' C' A' T' S'

A2 B2 => B2 A2

স্কোরিং:

এটি কোড-গল্ফ, তাই বাইটের সংখ্যা সবচেয়ে কম। স্ট্যান্ডার্ড লুফোলগুলি অনুমোদিত নয়।


হয় R2> - R2'বা B-> B3মঞ্জুরিপ্রাপ্ত?
ক্যালকুলেটরফলাইন

2
হ্যান্ডেল করা X3বা X1চ্যালেঞ্জের একটি দুর্দান্ত সংযোজন ছিল।
শেগি

1
"এই কারণে, প্রতিটি অ্যালগরিদম (চলনের সেট) এর একটি বিপরীত অ্যালগরিদম থাকে যা প্রথম অ্যালগরিদমকে পূর্বাবস্থায় ফেলে দেয়" প্রতিটি অ্যালগরিদমের জন্য এটি কি সত্য ?? কারণ আমি মনে করি হ্যাশিং অ্যালগরিদমগুলি একটি উপায়। মানে এর কোনও বিপরীত অ্যালগরিদম নেই, তাই না? দয়া করে আমাকে জানান
অবਿਸ਼েক সাহা

4
@ অ্যাভিশেকসাহা: রুবিকের কিউব সমস্যাগুলির জন্য, "অ্যালগরিদম" "" আপনি কিউবের উপরে চালনাগুলির ক্রম "অর্থ সীমাবদ্ধ। এই অর্থে, কিউবে ওয়ান-ওয়ে হ্যাশিং অ্যালগরিদম বলে কিছুই নেই।
রস প্রেসার

5
D2R2একটি পরীক্ষার কেস হিসাবে থাকা উচিত ছিল ...
নীল

উত্তর:


7

পাইথন 2 , 71 57 54 53 বাইট

-15 বাইট ধন্যবাদ ওভেসকে! -3 বাইট রড ধন্যবাদ।

lambda l:[i.strip("'")+" '"[len(i):]for i in l[::-1]]

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

স্ট্রিং আই / ও, 70 বাইট

lambda s:' '.join(i.strip("'")+"'"*(len(i)<2)for i in s.split()[::-1])

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



7

ভি , 13 10 বাইট

æGÇä/á'Ó''

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

3 বাইট সংরক্ষিত @nmjmcman ধন্যবাদ আমার প্রিয় বৈশিষ্ট্যটি নির্দেশ করে। ব্যাখ্যা:

æG          " Revere the order of every line
  Ç         " On every line not containing...
   ä/       " a digit:
     á'     "   Append an '
       Ó    "   Remove every instance on this line
        ''  "     Of two single quotes

äভিমে সংকলন করার সময় কি কোনও রেজেক্সকে প্রতিনিধিত্ব করে?
ডাউনগোট

@ ডাউনগোট হ্যাঁ! এটা করে. :g!/\d/norm A'<CR>:%s/''//g<CR>gg:g/^/m0<CR>
ভিমে

@ ডিজেএমসিএমহেম আপনার প্রিয় বৈশিষ্ট্যের মতো অন্তর্নিহিত শেষ নয়? এটি অনলাইন চেষ্টা করুন!
nmjcman101

3
আমি জানি এটি বেশ দেরি হয়ে গেছে তবে এটি আমার পক্ষে কার্যকর হয় না। এটি একটি আর 2 কে 2আর রূপান্তরিত করে, যা বৈধ নয়
জেমি স্যানোর্ন

7

রেটিনা 0.8.2 , 27 26 বাইট

\w
$&'
''

'2'
2
O$^`.'?2?

এটি অনলাইন চেষ্টা করুন! লিঙ্কে পরীক্ষার কেস অন্তর্ভুক্ত রয়েছে। ব্যাখ্যা: প্রথম পর্যায়ে প্রতিটি বর্ণানুক্রমিকের পরে অ্যাডাস্ট্রোফ যুক্ত হয়। এর ফলস্বরূপ ডাবল অ্যাডাস্টোফেস (অন্তর্ভুক্ত 2 সহ বা ছাড়া) যা অপসারণ করা দরকার। চূড়ান্ত পর্যায়ে চালগুলি বিপরীত।


এটি কি রেটিনা 1.0 প্রকাশের সাথে আরও উন্নত করা যেতে পারে ?
এমডি এক্সএফ

@ এমডিএক্সএফ মনে হচ্ছে O$^ম্যাচগুলির তালিকার বিপরীত করার পক্ষে এখনও এটি সর্বোত্তম উপায়, সুতরাং বাইট গণনাটি আসলে রেটিনা ১ এ অপরিবর্তিত রয়েছে
নীল

5

জাভাস্ক্রিপ্ট (ES6), 45 বাইট

s=>s.map(([a,b])=>b?+b?a+b:a:a+"'").reverse()

সবচেয়ে সংক্ষিপ্ত সমাধানটি অ্যারে আইও নেওয়া। যুক্তি ধ্বংসের সহজ এবং যথাযথ ব্যবহার।

স্ট্রিং আউটপুট এর জন্য +8 বাইট .join` `

স্ট্রিং ইনপুট, অ্যারে আউটপুট: 69 বাইট

(s,k=[])=>s.replace(/\S\S?/g,([a,b])=>k.unshift(b?+b?a+b:a:a+"'"))&&k

f=

(s,k=[])=>s.replace(/\S\S?/g,([a,b])=>k.unshift(b?+b?a+b:a:a+"'"))&&k

;

console.log(["R", "D U'", "S T A C K", "A2 B2"].map(e => `${e} => ${f(e)}`));
<textarea oninput="out.value=(f(this.value)||[]).join` `" placeholder="input here"></textarea>
<textarea id="out" readonly></textarea>


সুন্দর. আমি কেন কখনও ফাংশন প্যারামিটারগুলি বিন্যাস করতে ভাবি না ?! :(
শেগি

আপনি 1 বাইট সংরক্ষণের .reverse()সাথে প্রতিস্থাপন করতে সক্ষম হবেন ::reverseতবে ES7 তৈরি করুন
ডাউনগোট

@ ডাউনওয়েট এমন কোনও জায়গা যেখানে আমি ES7 পরীক্ষা করতে পারি?
কনর

@ কনরও ব্রায়ান আপনি অনলাইনে রিফেল ব্যবহার করতে পারেন (এক্সিকিউট করা এবং সমস্ত বৈশিষ্ট্যের জন্য সমস্ত প্রসেট
ডাউনগোট

4

জেলি , 11 বাইট

ḟ;ċ?”'ḣ2µ€Ṛ

অক্ষরগুলির তালিকার একটি তালিকা ("স্ট্রিংগুলির" একটি "অ্যারে") ফেরত নেওয়া একটি মোনাডিক লিঙ্ক।

এটি অনলাইন চেষ্টা করুন! (পাদলেখগুলি ফাঁকা স্থানের সাথে তালিকার বিভাজন প্রদর্শন করে আউটপুটকে টুকরো টুকরো করা এড়ায়)

কিভাবে?

ḟ;ċ?”'ḣ2µ€Ṛ - Link: list of lists of characters             e.g. ["F'", "D2" , "R"]
        µ€  - perform the chain to the left for €ach turn instruction:
    ”'      -   literal "'" character
   ?        -   if:
  ċ         -     count (number of "'" in the instruction) i.e.:  1   , 0    , 0
ḟ           -   then: filter out                                  "F"
 ;          -   else: concatenate                                       "D2'", "R'"
      ḣ2    -   head to index 2                                   "F" , "D2" , "R'"
          Ṛ - reverse                                            ["R'", "D2" , "F"]

নতুন জেলির সাথে 10 বাইট।
ব্যবহারকারী 202729

4

জাভাস্ক্রিপ্ট (ES6), 46 বাইট

চালনার অ্যারে হিসাবে ইনপুট নেয়।

a=>a.map(m=>m[1]?+m[1]?m:m[0]:m+"'").reverse()

এটা পরীক্ষা করো

কমা দ্বারা পৃথক করা পদক্ষেপের তালিকা প্রবেশ করান।

o.innerText=(f=
a=>a.map(m=>m[1]?+m[1]?m:m[0]:m+"'").reverse()
)((i.value="S,T,A,C,K").split`,`);oninput=_=>o.innerText=f(i.value.split`,`)
<input id=i><pre id=o>


ব্যাখ্যা

a=>

প্যারামিটারের মাধ্যমে আর্গুমেন্ট হিসাবে পদক্ষেপের অ্যারে গ্রহণ করে বেনামে ফাংশন a

a.map(m=>                       )

অ্যারের উপরে মানচিত্র, প্রতিটি স্ট্রিং একটি ক্রিয়াকলাপের মধ্য দিয়ে চলেছে, যেখানে mবর্তমান স্ট্রিং।

 m[1]?

স্ট্রিংটিতে একটি দ্বিতীয় দ্বিতীয় অক্ষর ( "'"বা "2") রয়েছে কিনা তা পরীক্ষা করুন ।

+m[1]?

যদি এটি একটি পূর্ণসংখ্যার সাথে অক্ষরটির স্ট্রিং কাস্ট করার চেষ্টা করে। যদি স্ট্রিং হয় "2", এটি হয়ে যায় 2, যা সত্য। যদি স্ট্রিং হয় "'", এটি হয়ে যায় NaN, যা মিথ্যা।

m

পূর্ববর্তী পরীক্ষাটি সত্যবাদী হলে কেবল ফিরে আসুন m

:m[0]

অন্যথায় এর প্রথম চরিত্রটি ফিরিয়ে দিন m

:m+"'"

যদি স্ট্রিংটিতে একটি দ্বিতীয় অক্ষর না থাকে তবে একটি mদিয়ে যুক্ত হওয়াটি ফিরিয়ে দিন '

.reverse()

পরিবর্তিত অ্যারে বিপরীত।


দুঃখিত, আমি এটি দেখেছি। আমার নিজের উত্তরটি আপনার অনুরূপ: পি
কনর

2

পাইথন ,  51  48 বাইট

lambda a:[(v+"'")[:2-("'"in v)]for v in a[::-1]]

একটি নামবিহীন ফাংশন স্ট্রিংয়ের তালিকা গ্রহণ এবং ফিরিয়ে আনছে।

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

এর সাথে ইনপুট তালিকার বিপরীত হয় a[::-1]; এর 'সাথে প্রতিটি প্রবেশে একটি সংযোজন v+"'"; মূলটির সাথে একটি 'আছে বা না রয়েছে তার উপর নির্ভর করে প্রতিটি 1 বা 2 টি অক্ষর শিরোনাম করে [:2-("'"in v)]


2

পাইথন 3 , 91 89 72 70 69 65 বাইট

lambda s:[i[0]+(len(i)-2and"'"or"2"*("2"==i[1]))for i in s[::-1]]

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

স্পষ্টতই আপনাকে স্ট্রিং হিসাবে ইনপুট এবং আউটপুট নেওয়ার দরকার নেই, সুতরাং একটি 69 বাইট সমাধান সম্ভব


আফাইক আপনি স্থানটি মুছতে পারবেনlen(i)==1
স্টিফেন

@ স্টেপহেন হু, জানেন না যে এটি অনুমোদিত ছিল (জানতেন যে কিছু অনুবাদক এটির অনুমতি দিয়েছেন, কেবল কোডগল্ফে এটির অনুমতি রয়েছে তা জানেন না)
sagiksp

2
ভাষাগুলি এখানে তাদের দোভাষী দ্বারা সংজ্ঞায়িত করা হয়েছে, সুতরাং এটি যদি কোনও একটি দোভাষীর সাথে কাজ করে তবে তা বৈধ।
শেগি

দোভাষী যদি এটির অনুমতি দেয় তবে আপনি এটি করতে পারেন। এগুলি সমস্ত কোড-গল্ফকেই যত্ন করে;)
স্টিফেন

len(i)-2এর চেয়ে ছোট len(i)==1(মনে রাখবেন 0 টি মিথ্যা)
স্টিফেন




1

জে, 25 বাইট

জে এটিকে খুব ভালভাবে পরিচালনা করে, একক উদ্ধৃতি উপস্থাপনের জন্য প্রয়োজনীয় দুর্ভাগ্যজনক পালানোর ক্রম ছাড়া:

|.,&''''`}:@.(''''={:)&.>

আমাদের বাক্সযুক্ত ডেটা ব্যবহার করে তালিকাটি উপস্থাপন করতে হবে, কারণ এটি এক এবং দুটি চরিত্রের আইটেমের মিশ্রণ, তাই:

  • &.> - "আনবক্সের অধীনে", যার অর্থ প্রতিটি উপাদানকে আনবক্স করুন, নিম্নলিখিত ক্রিয়াকলাপটি সম্পাদন করুন (উদাহরণস্বরূপ, নীচে বর্ণিত প্রতীকগুলি) এবং তারপরে পুনরায় বাক্স করুন
  • (''''={:) "২ য় অক্ষরটি যদি একক উদ্ধৃতি হয়" ....
  • @. (জেদের এজেন্ডা ক্রিয়া, এক ধরণের সাধারণ ত্রৈমাসিক বিবৃতি, বা কেস স্টেটমেন্ট) "তারপরে এজেন্ডা তালিকার ২ য় আইটেমটি সম্পাদন করুন, অন্যথায় প্রথমটি সম্পাদন করুন"
  • }: (এজেন্ডা তালিকার ২ য় আইটেম), "শেষ চরিত্রটি সরিয়ে ফেলুন", অর্থাৎ একক উদ্ধৃতি
  • J (জে এর টাই ক্রিয়া) আপনি এটি এজেন্ডা আইটেম বিভাজক হিসাবে ভাবতে পারেন
  • ,&'''' (এজেন্ডা তালিকার প্রথম আইটেম) "শেষে একক উদ্ধৃতি যুক্ত করুন"
  • |. "বিপরীত"

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




0

জাভা 8, 141 128 126 বাইট

a->new StringBuffer(a.replaceAll("(.)","$1'").replace("'''","").replaceAll("(.)'","'$1").replaceAll("'(.)'2","2$1")).reverse()

Stringফাঁকা স্থান (যেমন RUR'URU2R'U) ছাড়াই একক হিসাবে ইনপুট নেয় ।

ব্যাখ্যা:

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

a->new StringBuffer(           // Method with String parameter and StringBuffer return-type
  a.replaceAll("(.)","$1'")    //1  Add an apostrophe after every character
   .replace("'''","")          //2  Remove all occurrences of three adjacent apostrophes
   .replaceAll("(.)'","'$1")   //3  Reverse letter+apostrophe to apostrophe+letter
   .replaceAll("'(.)'2","2$1") //4  Reverse letter+2 to 2+letter and remove aphostrophes
  ).reverse()                  //5 Reverse everything

প্রদত্ত ইনপুট সহ উপরের পদক্ষেপগুলির উদাহরণ: RUR'URU2R'U

  1. RUR'URU2R'UR'U'R'''U'R'U'2'R'''U'
  2. R'U'R'''U'R'U'2'R'''U'R'U'RU'R'U'2'RU'
  3. R'U'RU'R'U'2'RU''R'UR'U'R'U'2R'U
  4. 'R'UR'U'R'U'2R'U'R'UR'U'R2UR'U
  5. 'R'UR'U'R2UR'UU'RU2R'U'RU'R'
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.