ন্যূনতম: 0 বিট
সর্বোচ্চ: 1734 243 বিট (4,335 ৪.৪০১ বিট / বোর্ড মোড়িত)
প্রত্যাশিত: 351 177 বিট (4,376 ৪.৪৩০ বিট / বোর্ড মোড়িত)
যেহেতু আমি ইনপুট এবং আউটপুট নির্ধারণ করতে পারি তবে আমি চাই আমি এই মুহূর্ত পর্যন্ত গেমের ইতিহাস এনকোডিংয়ের সাথে যাওয়ার সিদ্ধান্ত নিয়েছি। একটি সুবিধা হ'ল এটি কে কী ঘুরিয়ে নিয়েছে সে সম্পর্কে অতিরিক্ত তথ্য হ'ল এন-পাসান্ট এবং কাদের মধ্যে ক্যাসল করার ক্ষমতা আছে যেখানে উত্পন্ন এবং এনকোড করা যাবে না।
চেষ্টা 1:
নিঃসন্দেহে আমি ভেবেছিলাম যে আমি প্রতিটি পদক্ষেপটি 12 বিট, ফর্মের 4 টি ট্রিপল (শুরু x, স্টার্ট y, শেষ x, শেষ y) যেখানে প্রতিটি 3 বিট রয়েছে সেগুলিতে এনকোড করতে পারি।
আমরা শুরুর অবস্থানটি ধরে নিব এবং সেখান থেকে টুকরো সরানো আগে সাদা হবে white বোর্ডটি এমনভাবে সাজানো আছে যে (0, 0) সাদা নীচের বাম কোণে।
উদাহরণস্বরূপ গেম:
e4 e5
Nf3 f6
Nxe5 fxe5
... ...
হিসাবে এনকোড করা হবে:
100001 100010 100110 100100
110000 101010 101110 101101
101010 100100 101101 100100
...
12 একজন এনকোডিং এই বিশালাকার মি বিট যেখানে মি তৈরি প্যাচসমূহ সংখ্যা
একদিকে এটি সত্যিই বড় আকার ধারণ করতে পারে, অন্যদিকে আপনি প্রতিটি পদক্ষেপকে নিজের খেলা হিসাবে বিবেচনা করতে পারেন যাতে প্রতিটি এনকোডিং সত্যই এম "দাবা বোর্ড" এনকোড করে । আপনি যদি এটি অনুকরণীয় হন তবে আপনি পাবেন যে প্রতিটি "দাবা বোর্ড" 12 বিট is তবে আমি মনে করি এটি কিছুটা প্রতারণা ...
চেষ্টা 2:
আমি বুঝতে পারি যে পূর্ববর্তী প্রয়াসের প্রতিটি পদক্ষেপ অনেকগুলি অবৈধ চালকে এনকোড করে। সুতরাং আমি কেবল আইনী পদক্ষেপগুলি এনকোড করার সিদ্ধান্ত নিয়েছি। আমরা নিম্নলিখিত চলনগুলি নিম্নরূপে গণনা করব, প্রতিটি বর্গকে এমন নম্বর দিন (0, 0) → 0, (1, 0) → 1, (x, y) → x + 8 y। টাইলগুলির মধ্য দিয়ে পরীক্ষা করুন এবং কোনও টুকরো আছে কিনা তা পরীক্ষা করে দেখুন এবং এটি স্থানান্তরিত হতে পারে কিনা। যদি তাই হয় অবস্থানগুলি যোগ করুন এটি একটি তালিকায় যেতে পারে। আপনি যে তালিকাটি তৈরি করতে চান সেই তালিকা সূচকটি চয়ন করুন। চলমান মোট চলনগুলির 1 টি দ্বারা 1 টি আরও জোড় এবং সম্ভাব্য পদক্ষেপের সংখ্যা যোগ করুন।
উপরের উদাহরণ হিসাবে: প্রথম অবস্থান থেকে প্রথম টুকরা যে স্থানান্তর করতে পারে তা হল বর্গাকার 1 নাইট, এটি স্কোয়ার 16 বা 18 এ যেতে পারে, সুতরাং তালিকায় সেগুলি যুক্ত করুন [(1,16),(1,18)]
। এর পরে। নম্বরের নাইট, এটি চালগুলি যুক্ত করুন। সামগ্রিকভাবে আমরা পাই:
[(1,16),(1,18),(6,21),(6,23),(8,16),(8,24),(9,17),(9,25),(10,18),(10,26),(11,19),(11,27),(12,20),(12,28),(13,21),(13,29),(14,22),(14,30),(15,23),(15,31)]
যেহেতু আমরা মুভটি চাই (12, 28), তাই 20 সম্ভাব্য পদক্ষেপ রয়েছে বলে আমরা এটিকে 13 বেস হিসাবে এনকোড করেছি।
সুতরাং এখন আমরা গেম নম্বর জি 0
= 13
পেয়েছি
এরপরে আমরা কালোগুলির জন্যও একই কাজ করি কেবলমাত্র চলনগুলির তালিকা পাওয়ার জন্য আমরা বিপরীতে টাইলগুলি সংখ্যা (এটি সহজ করার জন্য, প্রয়োজনীয় নয়) ব্যতীত:
[(1,16),(1,18),(6,21),(6,23),(8,16),(8,24),(9,17),(9,25),(10,18),(10,26),(11,19),(11,27),(12,20),(12,28),(13,21),(13,29),(14,22),(14,30),(15,23),(15,31)]
যেহেতু আমরা মুভটি চাই (11, 27), তাই 20 সম্ভাব্য পদক্ষেপ রয়েছে বলে আমরা এটিকে 11 বেস হিসাবে এনকোড করি।
সুতরাং এখন আমরা গেম নম্বরটি পেয়েছি g 1
= (11 ⋅ 20) + 13 = 233
এরপরে আমরা সাদাগুলির জন্য নিম্নলিখিত পদক্ষেপের তালিকা পাই:
[(1,16),(1,18),(3,12),(3,21),(3,30),(3,39),(4,12),(5,12),(5,19),(5,26),(5,33),(5,40),(6,12),(6,21),(6,23),(8,16),(8,24),(9,17),(9,25),(10,18),(10,26),(11,19),(11,27)(13,21),(13,29),(14,22),(14,30),(15,23),(15,31)]
যেহেতু আমরা চলাটি (6, 21) চাই, আমরা 29 টি বেস হিসাবে 29 হিসাবে এনকোড করব যেহেতু 29 টি সম্ভাবনা রয়েছে।
সুতরাং এখন আমরা গেম নম্বরটি পেয়েছি জি 2
= ((13 ⋅ 20) + 11) 20 + 13 = 5433
এর পরে আমরা কালোগুলির জন্য নিম্নলিখিত পদক্ষেপের তালিকা পাই:
[(1,11),(1,16),(1,18),(2,11),(2,20),(2,29),(2,38),(2,47),(3,11),(4,11),(4,18),(4,25),(4,32),(6,21),(6,23),(8,16),(8,24),(9,17),(9,25),(10,18),(10,26),(12,20),(12,28),(13,21),(13,29),(14,22),(14,30),(15,23),(15,31)]
যেহেতু আমরা পদক্ষেপটি চাই 10 (10, 18) $ (10, 18)
সুতরাং এখন আমরা গেম নম্বরটি পেয়েছি জি 3
= (((19 ⋅ 29 + 13) 20) + 11) 20 + 13 = 225833
এবং বাকি সমস্ত পদক্ষেপের জন্য এই প্রক্রিয়াটি চালিয়ে যান। আপনি g কে ফাংশন g (x, y, z) = x y + z হিসাবে ভাবতে পারেন । সুতরাং g 0
= g (1, 1, 13), g 1
= g (g (1, 1, 11), 20, 13), g 2
= g (g (g (1, 1, 13)), 20, 11), 20, 13), জি 3
= জি (জি (ছ (জি (1, 1, 19), 29, 13), 20, 11), 20, 13)
একটি গেম নম্বর জি 0 ডিকোড করতে , আমরা প্রাথমিক অবস্থান থেকে শুরু করি এবং সমস্ত সম্ভাব্য পদক্ষেপ গণনা করি। তারপরে আমরা g 1 = g 0 // l , m 0 = g 0 % l গণনা করব , যেখানে l সম্ভাব্য চলনের সংখ্যা, '//' হল পূর্ণসংখ্যা বিভাগ অপারেটর এবং '%' হল মডুলাস অপারেটর। এটি জি 0 = জি 1 + মি 0 ধরে রাখা উচিত । এরপরে আমরা মুভিটি মি 0 করব এবং পুনরাবৃত্তি করব।
উপরের উদাহরণ থেকে যদি g 0 = 225833 তবে জি 1 = 225833 // 20 = 11291 এবং মি 0 = 225833% 20 = 13. পরবর্তী জি 2 = 11291 // 20 = 564 এবং মি 1 = 11291% 20 = 11. তারপরে g 3 = 11291 // 20 = 564 এবং এম 2 = 11291% 20 = 11. অতএব g 4 = 564 // 29 = 19 এবং_ মি_ 3 = 564% 29 = 13. পরিশেষে জি 5 = 19 // 29 = 0 এবং মি 4 = 19% 29 = 19।
তাহলে কোন গেমটি এভাবে এনকোড করতে কতগুলি বিট ব্যবহৃত হয়?
সরলতার জন্য, ধরা যাক যে সর্বদা 20 টি পরিবর্তন রয়েছে এবং সবচেয়ে খারাপ অবস্থার জন্য আমরা সর্বদা সবচেয়ে বড়টিকে বেছে নিয়েছি, 19। আমরা যে সংখ্যাটি পাব তা 19 ⋅ 20 মি
+ 19 ⋅ 20 মি -1
+ 19 ⋅ 20 মি -2
+ ⋯ + 19 ⋅ 20 + 19 = 20 মি + 1
- 1 যেখানে _ মি চলার সংখ্যা। 20 মি + 1
- 1 এনকোড করতে আমাদের লগ 2
(20 মি + 1
) বিটগুলি প্রয়োজন যা প্রায় (এম + 1) ∗ লগ 2
(20) = 4.3219 ∗ (এম + 1)
গড়ে মি = 80 (প্রতি প্লেয়ারে 40 টি চাল) তাই এনকোড করতে 351 বিট লাগবে। আমরা যদি অনেকগুলি গেম রেকর্ড করতাম তবে আমাদের একটি সার্বজনীন এনকোডিং লাগবে যেহেতু আমরা জানি না যে প্রতিটি সংখ্যার জন্য কত বিট লাগবে
সবচেয়ে খারাপ ক্ষেত্রে যখন এম = 400 (প্রতি খেলোয়াড়ের জন্য 200 চালান) তাই এনকোড করতে 1734 বিট লাগবে।
নোট করুন যে আমরা যে অবস্থানটি এনকোড করতে চাই তা নিয়ম অনুসরণ করে সেখানে পৌঁছনোর জন্য আমাদের সবচেয়ে সংক্ষিপ্ত পথে যেতে হবে। উদাহরণস্বরূপ, এখানে থিয়োরিজড গেমটি চূড়ান্ত অবস্থানটি এনকোড করার জন্য m = 11741 প্রয়োজন হয় না । পরিবর্তে আমরা সেই অবস্থানের সবচেয়ে সংক্ষিপ্ত পথটি সন্ধান করতে একটি প্রস্থ-প্রথম অনুসন্ধান চালাই এবং পরিবর্তে এটিকে এনকোড করি। আমি জানি না যে সমস্ত দাবা অবস্থানগুলি গণনা করতে আমাদের কত গভীরভাবে যেতে হবে, তবে আমি সন্দেহ করি যে 400 একটি অতিমাত্রায় কাজ করে।
দ্রুত গণনা:
এখানে 12 টি অনন্য টুকরা রয়েছে বা স্কোয়ারটি খালি থাকতে পারে যাতে দাবাবোর্ডে তাদের অবস্থান নির্ধারণ করতে 13 64 হয় । এটি একটি বিশাল পর্যালোচনা কারণ এটিতে অনেকগুলি অবৈধ অবস্থান অন্তর্ভুক্ত। আমরা যখন হয় মি আমরা 20 সম্পর্কে তৈরি করেছেন খেলা মধ্যে প্যাচসমূহ মি অবস্থান। সুতরাং আমরা যখন 20 মি = 13 64 খুঁজছি । এম = 64 * লগ 20 (13) = 54.797 পেতে উভয় পক্ষের লগইন করুন । এটি দেখায় যে 55 টি পদক্ষেপে আমাদের যে কোনও অবস্থানে যেতে সক্ষম হওয়া উচিত।
এখন যেহেতু আমি m = 55 নয় মি = 400 বলে সবচেয়ে খারাপ পরিস্থিতি গণনা করেছি আমি আমার ফলাফলগুলি সম্পাদনা করব। এমন একটি অবস্থান এনকোড করতে যেখানে এম = 55 243 বিট নেয়। আমি আরও বলতে চাই যে গড় কেসটি এম = 40 এর কাছাকাছি যা এনকোড করতে 177 বিট লাগে।
যদি আমরা পূর্ব থেকে ইমোরটাইজেশন আর্গুমেন্টটি ব্যবহার করি তবে আমরা 1734 বিটগুলিতে 400 "দাবা বোর্ড" এনকোড করছি যাতে আমরা পাই যে প্রতিটি "দাবা বোর্ড" সবচেয়ে খারাপ ক্ষেত্রে 4.335 বিট গ্রহণ করে।
নোট করুন যে জি = 0 একটি বৈধ গেমকে বোঝায়, এটি সর্বনিম্ন বর্গের টুকরোটি সর্বনিম্ন স্কোয়ারে চলে যায়।
অতিরিক্ত নোট:
আপনি যদি গেমের একটি নির্দিষ্ট অবস্থান উল্লেখ করতে চান তবে আপনাকে সূচকটি এনকোড করতে হতে পারে। এটি ম্যানুয়ালি যোগ করা যেতে পারে যেমন গেমটিতে সূচককে একত্রিত করুন বা প্রতিটি বাঁককে শেষ সম্ভাব্য পদক্ষেপ হিসাবে একটি অতিরিক্ত "শেষ" পদক্ষেপ যুক্ত করুন। এটি এখন খেলোয়াড়দের সম্মতি জানাতে বা টানা ২ টি খেলোয়াড়কে ড্রয়ের জন্য সম্মত হতে বোঝাতে পারে। এটি কেবল তখনই প্রয়োজনীয় যদি গেমটি অবস্থানের ভিত্তিতে চেকমেট বা অচলাবস্থায় শেষ না হয়, এই ক্ষেত্রে এটি অন্তর্ভুক্ত থাকে। এক্ষেত্রে এটি গড় বিটগুলির সংখ্যা গড়ে 356 এ নিয়ে আসে এবং সবচেয়ে খারাপ ক্ষেত্রে 1762।