এই পুনরাবৃত্তি দ্বারা অঙ্কিত হয়?


13

সমস্যা:

দাবাতে, পুনরাবৃত্তি দ্বারা অঙ্কন সম্পর্কে কিছুটা সুপরিচিত নিয়ম রয়েছে। যদি একই পজিশনটি 3 বার পুনরুক্ত করা হয় (বা আরও বেশি) তবে প্লেয়ারটি এমন পদক্ষেপ তৈরি করতে চায় যা এই পুনরাবৃত্তিটি একটি ড্র দাবি করতে পারে।

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

এই চ্যালেঞ্জের মধ্যে সমস্যাটি হ'ল দাবিযুক্ত অবস্থানটি পুনরাবৃত্তি দ্বারা অঙ্কিত করা হয় (3 বার বা তার বেশিবার দেখা হয়েছে) এবং দাবিযুক্ত অবস্থানটি পুনরাবৃত্তি দ্বারা আঁকানো না হলে একটি মিথ্যা মান, স্থানাঙ্কিত স্বরলিপিতে পদক্ষেপের একটি তালিকা দেওয়া হয় নীচে বর্ণিত হিসাবে বা আপনার পছন্দের কোনও স্বরলিপি (তবে আপনাকে পরীক্ষার কেসগুলি রূপান্তর করতে হবে)।


পজিশন কী?

একটি বাস্তব বিশ্বের দৃশ্যে, পজিশন কোনও জিনিস দ্বারা প্রভাবিত হবে যেমন কোনও খেলোয়াড় দুর্গ করতে পারে বা এন-পাসেন্ট সম্ভব কিনা; সমস্যার সমাধানে আপনার এগুলি বিবেচনা করা উচিত নয় । এই সমস্যায় বোর্ডের টুকরোগুলির কনফিগারেশন দ্বারা একটি অবস্থানকে সংজ্ঞায়িত করা হয়। সুতরাং, এই সমস্যার প্রয়োজনে, দুটি বোর্ডের প্রতিটি বর্গক্ষেত্র একই রঙের টুকরা একই ধরণের দ্বারা দখল করা হলে দুটি অবস্থান একই হতে দেখা যায়। উদাহরণস্বরূপ, সাদা নাইটগুলি স্কোয়ারগুলি অদলবদল করতে পারে এবং অন্য সমস্ত টুকরা যদি মানদণ্ডগুলি পূরণ করে তবে এটি একই অবস্থান হতে পারে।


একটি বৈধ স্বরলিপি দেখতে কেমন?

যদিও আমি সমন্বিত স্বরলিপিটি ব্যাখ্যা করতে যাব, আপনি চয়ন করেছেন এমন একটি স্বরলিপি সিস্টেমের মাধ্যমে আপনি ইনপুট নিতে পারবেন। প্রদত্ত যে:

  • স্বরলিপি প্রতিটি আইটেম যে কোনও বা সমস্ত বর্ণনা: টুকরা / টুকরা জড়িত; চেক, চেকমেট, ডাবল চেক, চেকমেট বা অচলাবস্থা সরবরাহ করা হয়েছে কিনা; যদি এন-পাসেন্ট ক্যাপচার ঘটেছে; প্রাথমিক অবস্থান; চূড়ান্ত অবস্থান।
  • আপনি পারে না আপনার স্বরলিপি পুনরাবৃত্তি সম্পর্কে তথ্য আছে।

সুতরাং যতক্ষণ এই মানদণ্ডগুলি পূরণ করা হয় আমি ততক্ষণ মেনে নিতে পেরে খুশি, যতক্ষণ আপনি নিজের উত্তরে উল্লেখ করেছেন ততক্ষণ আপনার নোটেশন সিস্টেম। এটি উদাহরণস্বরূপ 0 সূচকযুক্ত সারি, কলাম টিপলস বা আপনার প্রোগ্রামটির জন্য যা কিছু বোঝায় তা হতে পারে।


সমন্বয় নোটেশন

স্থানাঙ্ক স্বরলিপি হ'ল একটি স্বরলিপি যা স্থানাঙ্কের ব্যবস্থা হিসাবে বিশুদ্ধভাবে চলনগুলির বর্ণনা দেয়।

প্রথমে সেট থেকে প্রাথমিক স্থানাঙ্ক {A1-H8}এবং তারপরে একই সেট থেকে গন্তব্য স্থানাঙ্ক হিসাবে একটি পদক্ষেপ বর্ণনা করা হয়। সুতরাং রাজার গাম্বিট দেখতে দেখতে (স্ট্রিংয়ের সংগ্রহ হিসাবে)

{"E2-E4","E7-E5","F2-F4"}

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


নিয়মাবলী:

  • কোনও অবস্থান বা পদক্ষেপ বৈধ কিনা তা আপনাকে বিবেচনা করা উচিত নয় , কেবল এটির কারণে পুনরাবৃত্তি ঘটে
  • আপনি ধরে নিতে পারেন যে কাস্টলিং এবং প্যাড প্রচার হবে না
  • আপনার ইনপুট হিসাবে স্ট্রিংগুলির একটি তালিকা নেওয়া উচিত এবং চূড়ান্ত পদক্ষেপে তৃতীয় (বা আরও) পুনরাবৃত্তি ঘটেছে কিনা তার সাথে সম্পর্কিত সত্যবাদী বা মিথ্যা মান আউটপুট করা উচিত
  • খেলাটি সর্বদা দাবা জন্য স্ট্যান্ডার্ড শুরুর অবস্থানে শুরু হয়। প্রাথমিক অবস্থান পুনরাবৃত্তির দিকে গুনতে পারে।
  • চূড়ান্ত পদক্ষেপের দ্বারা পজিশনের পুনরাবৃত্তি না হলে পুনরাবৃত্তি দ্বারা অঙ্কন ঘটে না has

সাধারণ নিয়ম:

  • এটি , তাই বাইট জেতে সংক্ষিপ্ত উত্তর।
    কোড-গল্ফ ভাষাগুলি আপনাকে নন-কোডগলফিং ভাষার সাথে উত্তর পোস্ট করতে নিরুৎসাহিত করবেন না। 'যে কোনও' প্রোগ্রামিং ভাষার জন্য যতটা সম্ভব সংক্ষিপ্ত উত্তর নিয়ে আসার চেষ্টা করুন।
  • আপনার উত্তরটির জন্য ডিফল্ট আই / ও বিধিগুলি সহ মানক বিধিগুলি প্রযোজ্য , সুতরাং আপনাকে সঠিক পরামিতি এবং ফিরতি-টাইপ, সম্পূর্ণ প্রোগ্রাম সহ STDIN / STDOUT, ফাংশন / পদ্ধতি ব্যবহারের অনুমতি দেওয়া হবে। আপনার কল
  • ডিফল্ট লুফোলগুলি নিষিদ্ধ।
  • যদি সম্ভব হয় তবে দয়া করে আপনার কোডের (যেমন টিআইও ) একটি পরীক্ষার সাথে একটি লিঙ্ক যুক্ত করুন ।
  • এছাড়াও, আপনার উত্তরের জন্য একটি ব্যাখ্যা যুক্ত করা অত্যন্ত প্রস্তাবিত।

পরীক্ষার কেস

আপনার জন্য সত্যবাদী মানগুলি ফেরত দেওয়া উচিত:

{"B1-C3","B8-C6","C3-B1","C6-B8","B1-C3","B8-C6","C3-B1","C6-B8"} 
{"B1-C3","B8-C6","C3-B1","C6-B8","B1-C3","B8-C6","C3-B1","C6-B8","B1-C3","B8-C6","C3-B1","C6-B8"}
{"B1-C3","B8-C6","D2-D4","D7-D5","D1-D3","D8-D6","C3-B1","C6-B8","B1-C3","B8-C6","D3-D1","D6-D8","D1-D3","D8-D6"}
{"D2-D4","B8-C6","E2-E4","C6-D4","D1-E2","D4-E6","E2-F3","E6-D4","F3-D1","D4-C6","D1-E2","C6-D4","E1-D1","D4-C6","D1-E1","C6-D4"}
{"B1-C3","B8-C6","C3-B1","C6-B8","B1-C3","B8-C6","C3-B1","C6-B8","B1-C3","B8-C6","C3-B1","C6-B8","B1-C3"}

এবং এর জন্য ভুয়া মানগুলি:

{}
{"E2-E4","E7-E5","F2-F4"}
{"B1-C3","B8-C6","C3-B1","C6-B8","B1-C3","B8-C6","C3-B1","C6-B8","F2-F4","F7-F5"}
{"E2-E4","E7-E5","G1-F3","B8-C6","F1-C4","G8-F6","F3-G5","D7-D5","E4-D5","F6-D5","G5-F7"}
{"D2-D4","B8-C6","E2-E4","C6-D4","D1-E2","D4-C6","E2-D1","C6-D4","D1-E2","D4-C6","E2-D1"}
{"B1-C3","B8-C6","C3-B5","C6-B4","B5-D4","B4-D5","D4-C6","D5-C3","C6-B8","C3-B1","B8-C6","B1-C3","C6-B8","C3-B1"}
{"E2-E4","E7-E5","D1-E2","E8-E7","E1-D1","D8-E8","E2-E1","E7-D8","E1-E2","E8-E7","E2-E1","E7-E8"}

আমরা কীভাবে ইনপুটটি গ্রহণ করতে পারি, বলুন, পুরোপুরি দাবা থেকে মুক্তি পেয়ে সারি-প্রধান ক্রমে সংখ্যায়িত স্কোয়ারগুলির জোড়া তালিকার একটি তালিকা? সমন্বয় জোড়া জোড়ের তালিকা সম্পর্কে কীভাবে?
আমার সর্বনামটি

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

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

1
@ এক্সপায়ার্ডডাটা আপনি কি তৃতীয় মিথ্যা মামলাটি মিথ্যা বলে ব্যাখ্যা করতে পারেন? শেষের পরে C6-B8প্রাথমিক অবস্থানটি তিনবার ঘটেছে।
অ্যাডম

2
আহ, এটি চূড়ান্ত অবস্থান হতে হবে যা কমপক্ষে দুবার আগে উপস্থিত হয়েছিল।
অ্যাডম

উত্তর:


9

এপিএল (ডায়ালগ প্রসারিত) , 55 49 47 45 44 বাইট এসবিসিএস

-4 এনএনজি ধন্যবাদ।

পুরো প্রোগ্রাম। বিপরীত তুল্য যুগলের বিপরীত তালিকার জন্য অনুরোধ জানানো:
 যেমন {"B1-C3","B8-C6"}হয়[[[8,2],[6,3]],[[1,2],[3,3]]]

2≤≢s∩{0,∘⊃@⍺⊃s,←⊂⍵}/⎕,⊂(⊖⍪-)¯4↑⍉6,⍪5,∘⌽⍥⍳s3

এটি অনলাইন চেষ্টা করুন! (ইউটিলিটি ফাংশন অন্তর্ভুক্ত Coordsযা ওপির ফর্ম্যাটটিকে অনুবাদ করে)

রাজ্যের একটি তালিকা সেট আপ করুন:

s←3 তিন নির্ধারিত s(জন্য গুলি tates)

যেহেতু 3 একটি বৈধ বোর্ড স্টেট নয়, এটি আমাদের পুনরাবৃত্ত গণনাকে প্রভাবিত করবে না এবং আমাদের অ্যাসাইনমেন্টের পাস-থ্রো মান প্রয়োজন ...

দাবা বোর্ডের উপস্থাপনা তৈরি করুন:

5… নিম্নলিখিত উত্সাহিত ফাংশনটি 5 এবং 3 এর মধ্যে প্রয়োগের ফলাফলের জন্য বাতিল করুন:
⍥⍳ উভয় যুক্তি তাদের ɩ n ডিভাইসে প্রসারিত করুন;
  [1,2,3,4,5][1,2,3]
,∘⌽ বাম দিকটি ডান দিকের বিপরীতে সংযুক্ত হয়ে
  [1,2,3,4,5,3,2,1]এই কর্মকর্তাদের প্রতিনিধিত্ব করে

 টেবিল করা;
[[1],
[2],
[3],
[4],
[5],
[3],
[2],
[1]]

6, মহামারীকে উপস্থাপন করে (প্রতিটি সারিতে) ছয়টি প্রিপেন্ড করুন;
[[6,1],
[6,2],
[6,3],
[6,4],
[6,5],
[6,3],
[6,2],
[6,1]]

 জায়গা বদল করুন;
[[6,6,6,6,6,6,6,6],
[1,2,3,4,5,3,2,1]]

¯4↑ নেগেটিভ (যেমন শেষ) চারটি (সারি) নিন, শূন্যের সাথে প্যাডিং করুন, খালি স্কোয়ারগুলি উপস্থাপন করুন;
[[0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0],
[6,6,6,6,6,6,6,6],
[1,2,3,4,5,3,2,1]]

() এটিতে নিম্নোক্ত কাজটি প্রয়োগ করুন:

- নেগেট (এটি বিপরীত রঙ উপস্থাপন করে);
  [[ 0, 0, 0, 0, 0, 0, 0, 0],
   [ 0, 0, 0, 0, 0, 0, 0, 0],
   [-6,-6,-6,-6,-6,-6,-6,-6],
   [-1,-2,-3,-4,-5,-3,-2,-1]]

  ⊖⍪ তার উপরে উল্টানো যুক্তিটি স্ট্যাক করুন, আমাদের পুরো বোর্ডটি দিন;
  [[ 1, 2, 3, 4, 5, 3, 2, 1],
   [ 6, 6, 6, 6, 6, 6, 6, 6],
   [ 0, 0, 0, 0, 0, 0, 0, 0],
   [ 0, 0, 0, 0, 0, 0, 0, 0],
   [ 0, 0, 0, 0, 0, 0, 0, 0],
   [ 0, 0, 0, 0, 0, 0, 0, 0],
   [-6,-6,-6,-6,-6,-6,-6,-6],
   [-1,-2,-3,-4,-5,-3,-2,-1]]

প্রাথমিক অবস্থার পরে চালগুলির একটি তালিকা তৈরি করুন:

 এটি বন্ধ করুন (এটি একটি একক হিসাবে বিবেচনা করতে)

⎕, পদক্ষেপের তালিকার জন্য প্রম্পট করুন এবং এটিকে প্রাথমিক অবস্থায় প্রিপেন্ড করুন

একটি ক্রিয়াকলাপ দ্বারা হ্রাস করুন * যা বর্তমান অবস্থাকে তালিকায় যুক্ত করে এবং একটি পদক্ষেপ নেয়:

{}/ নিম্নলিখিত বেনামে ল্যাম্বডা দ্বারা হ্রাস করুন:

 সঠিক যুক্তি (বর্তমান অবস্থা)

 এটি ইউনিট হিসাবে গণ্য করার জন্য এটি বন্ধ করুন

s,← ইন-প্লেস রাজ্যের তালিকায় এটি যুক্ত করুন

 রাষ্ট্রটি ব্যবহার করার জন্য এটি প্রকাশ করুন

 ... @⍺ দুই স্থানাঙ্ক বাম যুক্তি উপস্থাপন করে উপাদানের এ করা:
  0 একটি শূন্য
  , অনুসৃত
   দ্বারা
   প্রথম মান
এই কার্যকরভাবে "প্যাচসমূহ" প্রথমে মান, দ্বিতীয় তুল্য তুল্য একটি শূন্য রেখে

আমাদের চূড়ান্ত তিনটি বা তার বেশি অবস্থা রয়েছে কিনা তা পরীক্ষা করুন:

s∩ যে চূড়ান্ত এক সঙ্গে সমস্ত রাজ্যের ছেদ; রাজ্যের উপসেট এটির মতো

 তাদের টেল আপ

2≤ দুটি বা আরও বেশি আছে কিনা তা পরীক্ষা করুন (উদাহরণস্বরূপ চূড়ান্ত রাজ্য সহ তিন বা আরও বেশি)


* এপিএল ডান-সহযোগী, সুতরাং প্রথমে ফাংশনটি প্রাথমিক অবস্থাকে ডান আর্গুমেন্ট হিসাবে বলা হয় এবং প্রাথমিক পদক্ষেপটি বাম আর্গুমেন্ট হিসাবে ডাকা হয়, এবং তারপরে তার নতুন ফলাফলটি নতুন বাম আর্গুমেন্ট হিসাবে দ্বিতীয় পদক্ষেপের সাথে নতুন ডান আর্গুমেন্টে পরিণত হয় , ইত্যাদি চূড়ান্ত ফলাফল হয়


আমি নিশ্চিত যে \হ্রাসের পরিবর্তে স্ক্যান ব্যবহার করে এটি উল্লেখযোগ্যভাবে সংক্ষিপ্ত করা যেতে পারে/
অ্যাডম

এই কুরুচিপূর্ণ হ্যাক দিয়ে 2 বাইট সংরক্ষণ করুন: ⍳3⊣s←⍬-> ⍳s←3। এটি কাজ করে কারণ 3একটি বৈধ বোর্ড নয় তাই এটি পুনরাবৃত্তি সনাক্তকরণকে প্রভাবিত করবে না
এনজিএন 19 '

@ জিএন উঃ ধন্যবাদ। আমরা জেলির কাছে আসছি।
অ্যাডম

(0,⊃)@->0,∘⊃@
এনজিএন

@ জিএন শেষ ধন্যবাদ।
অ্যাডম

6

আর , 180 177 144 বাইট

function(M,`+`=rep,l=c(1:5,3:1,6+8,0+16)){z=rev(Reduce(function(x,y){x[y[2:1]]=x[y]*1:0;x},M,c(l,-rev(l)),,T));sum(sapply(z,identical,el(z)))>2}

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

-3 বাইট : Giuseppe ধন্যবাদ
-29 এর নিক কেনেডি ব্যবহার ধন্যবাদ বাইট Reduceএবং -rev(l)
-4 reversing দ্বারা বাইটz

বর্গগুলি চিহ্নিত করে 1 এবং 64 এর মধ্যে পূর্ণসংখ্যার ভেক্টরকে ইনপুট হিসাবে নেয়। টিআইওর সেই বিন্যাসে রূপান্তর করতে একটি ফাংশন অন্তর্ভুক্ত। বিভিন্ন টুকরাটি 1 থেকে 6 এবং -1 এবং -6 এর মধ্যে পূর্ণসংখ্যা হিসাবে সংরক্ষণ করা হয়।

ব্যাখ্যা:

function(M,                                # M is the vector of moves 
         `+` = rep,
         l = c(1:5, 3:1, 6 + 8, 0 + 16)) { # initial position of white pieces
  z = rev(Reduce(function(x, y) {
    x[y[2:1]] = x[y] * 1:0                 # a piece moves from y[1] to y[2]; y[1] becomes 0
    x
  }, M, c(l, -rev(l)), , T))
  sum(sapply(z, identical, el(z))) > 2    # find number of past positions identical to the last position
}

1
আমি [ বিট . ly/2OHPexp] এ আপনার একটি সংশোধিত সংস্করণ রেখেছি । এটি ঠিক টিআইও তবে লিঙ্কটি কোনও মন্তব্যের জন্য খুব দীর্ঘ। কোডটি আপনার দ্বারা অনুপ্রাণিত হয়েছে, তবে এর মূলটিতে একটি সংবর্ধক ব্যবহার করা হয়েছে Reduce। এটি 148 বাইট।
নিক কেনেডি

@ নিক কেনেডি ধন্যবাদ! আমি আসলে কালো টুকরা জন্য নেতিবাচক পূর্ণসংখ্যার ব্যবহার সন্ধান করতে যাচ্ছিলাম; আমি খুশি যে আপনি এটি প্রথম করেছেন। আপনি হ্রাস সহ যা করেছেন তা আমি পছন্দ করি: এ সম্পর্কে আমার আরও স্পষ্টভাবে জানতে হবে।
রবিন রাইডার

@ নিক কেনেডি আমি জেডটি বিপরীত করে আপনার সংস্করণটি আরও 4 বাইট পেয়েছি।
রবিন রাইডার

3

জেলি , 41 37 বাইট

Ø0;6x8;“Ġ²F’D¤UN;ƊW;µị@⁹Ṫ¤¦0⁹¦$\ċṪ$>1

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

একটি মোনাডিক লিঙ্ক যা ইনপুটটিকে 1-সূচকযুক্ত সারি-প্রধান চালগুলির জোড়গুলির তালিকা হিসাবে নেয় [from, to]এবং ড্রয়ের জন্য 1 প্রদান করে এবং 0 এর জন্য দেয় না।

নোট করুন টিআইও-র ফুটার কোডটি ওপি দ্বারা সরবরাহিত পদক্ষেপগুলি সংখ্যার বিন্যাসে অনুবাদ করে তবে প্রশ্নের নীচে আলোচনার ভিত্তিতে সংখ্যার ফর্ম্যাটটি একটি বৈধ ইনপুট হত।

ব্যাখ্যা

Ø0                                    | 0,0
  ;6                                  | concatenate to 6 (pawn)
    x8                                | repeat each 8 times (two blank rows and 1 row of pawns)
      ;“Ġ²F’D¤                        | concatenate to 1,2,3,4,5,3,2,1
              UN;Ɗ                    | concatenate a negated flipped version to this one
                  W;                  | wrap as a list and concatenate the input list to the board
                    µ                 | start a new monadic chain
                              $\      | reduce using the two links below
                     ị@⁹Ṫ¤¦           | replace the item pointed to by the second coordinate by the value of the one at the first
                           0⁹¦        | replace the item at first coordinate with zero
                                ċṪ$   | finally count the items equal to the final one (not including it)
                                   >1 | and check of >1

3

জাভাস্ক্রিপ্ট (নোড.জেএস) ,  121  111 বাইট

[sq0, sq1][0..63]a8=0b8=1h1=63

একটি বুলিয়ান মান প্রদান করে।

a=>[a,...a].map(([x,y])=>r=b[b[b[y]=b[x],x]=0,b]=-~b[b],b=[...'89ABCA981111111'+10n**32n+0x7e5196ee74377])&&r>2

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

কিভাবে?

টুকরা

টুকরোগুলি সনাক্ত করতে ব্যবহৃত মানগুলি যতক্ষণ না প্রতি টুকরো টাইপের প্রতি এক অনন্য মূল্য রয়েছে ততক্ষণ তা বিবেচনাধীন নয়।

আমরা ব্যাবহার করি:

  • 0 খালি স্কোয়ারের জন্য
  • 1 / 8 / 9 / একটি / বি / সি ♟ / ♜ / ♞ / ♝ / ♛ / ♚ জন্য
  • 2 / 3 / 4 / 5 / 6 / 7 -এর জন্য ♙ / ♖ / ♘ / ♗ / ♕ / ♔

বোর্ড এবং প্রাথমিক অবস্থান

b

  • '89ABCA981111111' Black 8 টি কালো প্রধান টুকরা, তারপরে প্রথম 7 কালো প্যাঁচগুলি
  • 10n**32nh710
  • 0x7e5196ee74377White সমস্ত সাদা টুকরা ( 2222222234567543দশমিক ব্যয় )

যার ফলাফল:

    a b c d e f g h
  +----------------
8 | 8 9 A B C A 9 8
7 | 1 1 1 1 1 1 1 1
6 | 0 0 0 0 0 0 0 0
5 | 0 0 0 0 0 0 0 0
4 | 0 0 0 0 0 0 0 0
3 | 0 0 0 0 0 0 0 0
2 | 2 2 2 2 2 2 2 2
1 | 3 4 5 6 7 5 4 3

অবস্থানগুলি ট্র্যাক করে রাখা

bb

এই কারণেই আমরা করি:

b[b] = -~b[b]

মন্তব্য

a =>                    // a[] = input
  [ a,                  // dummy entry to mark the initial position as encountered once
    ...a                // append the actual data
  ].map(([x, y]) =>     // for each pair of squares [x, y] in this array:
    r =                 //   store the last result in r
    b[                  //   update b[b]:
      b[                //     update b[x]:
        b[y] = b[x],    //       set b[y] to b[x]
        x               //       set b[x] ...
      ] = 0,            //     ... to 0
      b                 //     set b[b] ...
    ] = -~b[b],         //   ... to b[b] + 1 (or 1 if b[b] is undefined)
    b = [...(…)]        //   initialize b[] (see above)
  )                     // end of map()
  && r > 2              // return true if the last result is greater than 2

আমি এখনও এটির জন্য একটি পরীক্ষার কেসটি লিখিনি, তবে একই রঙের 2 টুকরা স্বাপের পরে (উদাহরণস্বরূপ পুনরাবৃত্তি যেখানে দুটি সাদা নাইট অদলবদল করা হয়) কাজ করে কি এটি কাজ করে? আমি সুযোগ পেলেই একটি পরীক্ষার কেস লিখব।
মেয়াদোত্তীর্ণ ডেটা

হ্যাঁ আমি বলতে চাইছি, আমি যখন আপডেট করতে পারি তখন আপডেট করব
মেয়াদোত্তীর্ণ ডেটা

1
@ এক্সপায়ার্ডডাটা এটি এখন প্রত্যাশার মতো কাজ করা উচিত।
আর্নাউল্ড

3

জাভা 10, 336 330 287 285 282 276 বাইট

m->{var V=new java.util.HashMap();int i=64,A[]=new int[i];var t="";for(;i-->0;)t+=A[i]=(i%56<8?i%8*35%41%10%8+2:9>>i/16&1)*(i/32*2-1);V.put(t,1);for(var a:m){for(t="",A[a[1]]=A[a[0]],A[a[0]]=0,i=64;i-->0;)t+=A[i];V.compute(t,(k,v)->v!=null?(int)v+1:1);}return(int)V.get(t)>2;}

-11 বাইটস এতে পরিবর্তন করে @ আরনাউল্ডকে ধন্যবাদ জানায় ।i%56<8?"ABCDECBA".charAt(i%56%7):i%48<16?1:0i%56<8?i%8*35%41%10%8+2:9>>i/16&1

a1=0,b1=1,...,h8=63{"E2-E4",...[[12,28],...

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

ব্যাখ্যা:

m->{                   // Method with 3D character array parameter and boolean return-type
  var V=new java.util.HashMap();
                       //  Create a Map to store the occurrences of the board-states
  int i=64,            //  Index integer, starting at 64
      A[]=new int[i];  //  Create the 8 by 8 board
  var t="";            //  Temp-String, starting empty
  for(;i-->0;)         //  Loop `i` in the range (64,0]:
    t+=                //    Append the string `t` with:
      A[i]=            //     Fill the `i`'th cell with:
        i%56<8?        //      If it's either the first or eighth row:
         i%8*35%41%10%8+2
                       //       Fill it with 2,7,3,5,9,3,7,2 based on index `i`
        :9>>i/16&1)    //      Else if it's either the second or seventh row:
                       //       Fill it with 1
                       //      Else (the third, fourth, fifth, or sixth rows):
                       //       Fill it with 0
        *(i/32*2-1);   //      Then multiply it by -1 or 1 depending on whether `i`
                       //      is below 32 or not
  V.put(t,1);          //  Then set string `t` in the map to 1 for the initial state
  for(var a:m){        //  Loop over each of the input's integer-pairs:
    for(t="",          //   Make the String empty again
        A[a[1]]=       //   Set the to-cell of the current integer-pair of the input to:
          A[a[0]],     //    The value in the from-cell of the same integer-pair
        A[a[0]]=0,     //   And then empty this from-cell
        i=65;i-->0;)   //   Inner loop `i` in the range (64,0]:
          t+=A[i];     //    Append the `i`'th value to the String `t`
    V.compute(t,(k,v)->v!=null?(int)v+1:1);}
                       //   Increase the value in the map for String `t` as key by 1
  return(int)V.get(t)  //  Return whether the value in the map for the last String `t`
          >2;}         //  is at least 3

টুকরোগুলি পূরণ করার পরে তার মানগুলি A[i]=(i%56<8?i%8*35%41%10%8+2:9>>i/16&1)*(i/32*2-1):

     a  b  c  d  e  f  g  h
  +------------------------
1 | -2 -7 -3 -5 -9 -3 -7 -2
2 | -1 -1 -1 -1 -1 -1 -1 -1
3 |  0  0  0  0  0  0  0  0
4 |  0  0  0  0  0  0  0  0
5 |  0  0  0  0  0  0  0  0
6 |  0  0  0  0  0  0  0  0
7 |  1  1  1  1  1  1  1  1
8 |  2  7  3  5  9  3  7  2

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


টি ব্যবহার এড়ানোর উপায় নিয়ে কিছুক্ষণের জন্য লড়াই করেছিলেন, স্টেট স্টোর করার জন্য এমন কোনও কাঠামো নেই যা জাভা.উটিল.আররেস.দীপ হ্যাশকোডের মতো কিছু করবে? যদি তাই হয় তবে প্রচুর পরিমাণে বাইট
মেয়াদোত্তীর্ণ ডেটা

এছাড়াও, আমি ভাবছি যদি হ্যাশম্যাপ বাস্তবায়নের ভিত্তিতে এটি প্রযুক্তিগতভাবে সঠিক হয় তবে সম্ভবত সম্ভাব্য কনফিগারেশনগুলি বিশাল যে প্রদত্ত বোর্ডগুলির জন্য হ্যাশ সংঘর্ষ হতে পারে? আমি যদিও এর জন্য আপনাকে একটি পাল্টা নমুনা দেব না!
মেয়াদোত্তীর্ণ ডেটা

1
@ এক্সপায়ার্ডডাটা আসলেই আছে java.util.Arrays.deepHashCode(A), তবে স্পষ্টতই কিছু হ্যাশগুলি এখনও কোনওরকম একই (যেমন শেষ পরীক্ষার ক্ষেত্রে -447346111=3মানচিত্রে আছে ..) যদি আমি আমার বর্তমান উত্তরের ফলাফলের মানচিত্র এবং ব্যবহারেরdeepHashCode(A) ফলে প্রাপ্ত মানচিত্রের তুলনা করি । এছাড়াও, এটি ছোট হওয়ার পরিবর্তে 3 বাইট দীর্ঘ হবে, যেহেতু আমাকে deepHashCode(A)দুবার ব্যবহার করতে হবে (প্রাথমিক অবস্থায়ও)।
কেভিন ক্রুইজসেন 19

1
তবে প্রথম কালো রোক দ্বিতীয় কালো রুকের থেকে আলাদা। two positions are seen to be the same if each square on both boards is occupied by the same type of piece of the same colour
অজ্ঞতার

1
জাভাতে পুরোপুরি পরীক্ষিত নয়, তবে এক্সপ্রেশনটি 6 বাইট সংরক্ষণের i%8*35%41%10%8+2জন্য সম্ভাব্য প্রতিস্থাপন হওয়া উচিত "ABCDECBA".charAt(i%8)। এটি নিদর্শন উত্পন্ন করে [ 2, 7, 3, 5, 9, 3, 7, 2 ]
আরনাউল্ড

2

কাঠকয়লা , 62 বাইট

≔↨²³⁴⁵⁶⁴³²χηF⁴⁸⊞η÷⁻⁴⁰ι³²F…η⁸⊞η±ιFθ«⊞υ⮌η§≔η⊟ι§η§ι⁰§≔η⊟ι⁰»›№υ⮌η¹

এটি অনলাইন চেষ্টা করুন! লিঙ্কটি কোডটির ভার্জোজ সংস্করণ। সংখ্যার জোড়া যেখানে স্কোয়ার সংখ্যা নির্ধারণ করা হয় একটি অ্যারের হিসাবে ইনপুট লাগে A1, B1... H8(0-সূচীবদ্ধ) যাতে উদাহরণস্বরূপ প্রথম টেস্ট কেস হিসাবে প্রতিনিধিত্ব করা হবে [[[1, 18], [57, 42], [18, 1], [42, 57], [1, 18], [57, 42], [18, 1], [42, 57]]]এবং একটি আউটপুট -অবস্থান পুনরাবৃত্তি দ্বারা ড্র হলে। রূপান্তর প্রোগ্রাম। সব এক। ব্যাখ্যা:

≔↨²³⁴⁵⁶⁴³²χη

23456432সংখ্যাটি পৃথক অঙ্কে বিভক্ত করুন । এই সাদা টুকরা প্রতিনিধিত্ব করে।

F⁴⁸⊞η÷⁻⁴⁰ι³²

পাউন্ড এবং খালি সারিগুলিতে যুক্ত করুন। সাদা পদ্মাগুলির মান 1এবং কালো প্যাঁচ রয়েছে -1

F…η⁸⊞η±ι

সাদা টুকরাগুলির একটি অবহেলিত অনুলিপি যুক্ত করুন, যা কালো টুকরা উপস্থাপন করে।

Fθ«

চালগুলি উপর লুপ।

⊞υ⮌η

বোর্ডের একটি অনুলিপি সংরক্ষণ করুন। (বোর্ডটি অনুলিপি করার জন্য বিপরীতটি হ'ল গ্লোভিয়েস্টতম উপায়))

§≔η⊟ι§η§ι⁰

উত্স অংশটি দিয়ে গন্তব্য আপডেট করুন।

§≔η⊟ι⁰

উত্স টুকরা সরান।

»›№υ⮌η¹

বর্তমান অবস্থানটি আগে একাধিকবার দেখা হয়েছে কিনা তা নির্ধারণ করুন।


2

সি # (ভিজ্যুয়াল সি # ইন্টারেক্টিভ সংকলক) , 204 বাইট

n=>{var j=new List<char[]>();var d=("ABCDECBATTTTTTTT"+new string('Z',32)+7777777712345321).ToArray();foreach(var(a,b)in n){j.Add(d.ToArray());d[b]=d[a];d[a]='Z';}return j.Count(r=>r.SequenceEqual(d))>1;}

পূর্ণসংখ্যার টিপলগুলির তালিকা হিসাবে ইনপুট নেয়, যেখানে প্রথম পূর্ণসংখ্যাটি কোথা থেকে স্থানান্তরিত হয় এবং দ্বিতীয়টি কোথায় যেতে হবে। 0 টি এ 1, 1 টি এ 2 এবং 63 টি এইচ 8 উপস্থাপন করে 8

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

n=>{
  var j=new List<char[]>();    //Initialize a list to save states of a board
  var d=("ABCDECBATTTTTTTT" +  //White pieces
  new string('Z',32) +         //Empty spaces
  7777777712345321)            //Black pieces
  .ToArray(); //Initialize the chessboard
  foreach(var(a,b)in n){       //Foreach (source square, destination square) in the input
    j.Add(d.ToArray());        //  Add the current board to the list
    d[b]=d[a];                 //  Set the destination square to the source square's value
    d[a]='Z';                  //  And set the souce square to empty
  }
  return j.Count(         //Return that the amount...
    r=>r.SequenceEqual(d) //  of past positions that are equal to the current position...
  )>1;                    //is at least two
}

0

জাভা (জেডিকে) , 246 245 244 বাইট

import java.util.*;n->{var j=new ArrayList<char[]>();var d=("ABCDECBATTTTTTTT"+"".repeat(32)+7777777712345321l).toCharArray();for(var k:n){j.add(d.clone());d[k[1]]=d[k[0]];d[k[0]]=1;}return j.stream().filter(x->Arrays.equals(d,x)).count()>1;}

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

import java.util.*;                   //Import the java.util package

n->{                                  //Function taking in int[][], 
                                      //where each int[] is a a pair of numbers
  var j = new ArrayList<char[]>();    //List to save each position of the chessboard
  var d =                             //The chessboard's starting position
    ("ABCDECBATTTTTTTT" +             //  All the white pieces
    "&#1".repeat(32) +                //  Plus the empty squares
    7777777712345321l)                //  And the black pieces
  .toCharArray();                     //Split to array of chars
  for(var k:n){                       //Foreach [sourceSquare, destinationSquare] in input
    j.add(d.clone());                 //  Add the current position to the list
    d[ k[1] ] = d[ k[0] ];            //  Set the destination square's value
                                      //  to the source squares
    d[ k[0] ] = 1;                    //  And clear the source square 
}                                     //End foreach
return j.stream()                     //Convert list of states to stream
  .filter(x ->                        //Filter each position by
    Arrays.equals(d,x)                //  if the position equals the final position 
  ).count() > 1;                      //And return if there are at least two
                                      //positions that are left
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.