مساله ۸۲. بازی سنگریزه

یک جدول 1x20 داریم. دو نفر یکی در میون بازی میکنند. هر بار یکی یه سنگریزه میذاره روی یکی از خونههایی که هم خودش و هم خونههای بقلش خالیند. کسی که آخرین سنگریزه رو بذاره برنده میشه.
اگه هر دو نفر بهترین بازی رو بکنند کی برنده میشه؟
لینک سوال در توویتر: https://x.com/Riazi_Cafe/status/1838088171785200010
اگر بازیکن دوم بهترین بازی خودش را انجام بده در این بازی برنده خواهد شد.
راهحل بر اساس ارزش نیم یا عدد mex حالت های بازی است. در ادامه توضیح مختصری در مورد این روش ارائه میدهیم: یک بازی ترکیبیاتی دو نفره را در نظر بگیرید که بازیکنان به نوبت بازی میکنند و برنده بازیکنی است که آخرین حرکت را انجام میدهد. همچنین فرض کنید که بازی متقارن است، به این معنی که هر دو بازیکن مجموعه یکسانی از حرکات را برای هر حالت بازی دارند. قضیه اسپرگ-گراندی (Sprague–Grundy theorem) قواعد زیر را برای تعیین برنده بازی در هر حالت بیان میکند:
ارزش mex در یک حالت که هیچ حرکتی معتبر نیست برابر با ۰ است.
در غیر این صورت، ارزش mex یک حالت \(s\) از بازی برابر با کوچکترین مقدار \(v \geq 0\) است به طوری که هیچ حرکتی نمیتواند حالت بازی را از \(s\) به یک حالت \(s'\) که ارزش mex آن برابر با \(v\) است تغییر دهد.
اگر یک حالت \(s\) از بازی بتواند به چندین حالت مستقل تقسیم شود، \(s_1, s_2, \ldots, s_k\)، آنگاه ارزش mex حالت \(s\) برابر با عملگر یای انحصاری (xor) ارزشهای mex از \(s_1\) تا \(s_k\) است.
بازیکن اول میتواند در حالت \(s\) برنده شود اگر و تنها اگر ارزش mex حالت \(s\) غیرصفر باشد.
حالا به بازی سنگریزه برمیگردیم. ما حالتی از بازی که فقط شامل یک شبکه به اندازه \(1 \times n\) است را با \(G(n)\) نشان میدهیم. توجه داشته باشید که بعد از قرار دادن یک سنگریزه در خانه \(3 \leq i \leq n-2\)، حالت بازی میتواند به عنوان دو حالت مستقل \(G(i-2)\) و \(G(n-i-1)\) در نظر گرفته شود که ارزش mex آن برابر با عملگر XOR ارزشهای mex این دو حالت است. علاوه بر این، برای \(i \in \{1,n\}\) قرار دادن یک سنگریزه در خانه \(i\) حالت بازی را به \(G(n-2)\) تغییر میدهد. در نهایت، برای \(i \in \{2,n-1\}\) قرار دادن یک سنگریزه در خانه \(i\) حالت بازی را به \(G(n-3)\) تغییر میدهد. بنابراین، میتوانیم به ترتیب ارزش mex حالت های بازی را به صورت زیر محاسبه کنیم:
\(G(0) = 0\) چون هیچ حرکت قابل قبولی در این شرایط وجود ندارد\(0\).
تنها حالتی که مستقیم از \(G(1)\) می توان تولید کرد \(\leftarrow G(0)\) mex=0 هست پس مقدار mex \(G(1)\) برابر است با 1.
تنها حالتی که مستقیم از\(G(2)\) می توان تولید کرد \(\leftarrow G(0)\) mex=0 هست پس مقدار mex \(G(2)\) برابر است با 1.
حالاتی که مستقیما از \(G(3)\) میتوان تولید کرد \(\leftarrow G(0)\) mex=0 و \(\leftarrow G(1)\) mex=1 هستند پس مقدار mex \(G(3)\) برابر است با 2.
حالاتی که مستقیما از \(G(4)\) میتوان تولید کرد \(\leftarrow G(1)\) mex=1 و \(\leftarrow G(2)\) mex=1 هستند پس مقدار mex \(G(4)\) برابر است با 0.
حالاتی که مستقیما از \(G(5)\) میتوان تولید کرد \(\leftarrow \langle G(1), G(1) \rangle\) mex=(1 xor 1)=0 و \(\leftarrow G(2)\) mex=1 و \(\leftarrow G(3)\) mex=2 هستند پس مقدار mex \(G(5)\) برابر است با 3.
حالاتی که مستقیما از \(G(6)\) میتوان تولید کرد \(\leftarrow \langle G(1), G(2) \rangle\) mex=(1 xor 1)=0 و \(\leftarrow G(3)\) mex=2 و \(\leftarrow G(4)\) mex=0 هستند پس مقدار mex \(G(6)\) برابر است با 1.
حالاتی که مستقیما از \(G(7)\) میتوان تولید کرد \(\leftarrow \langle G(1), G(3) \rangle\) mex=(1 xor 2)=3 و \(\leftarrow G(4)\) mex=0 و \(\leftarrow G(5)\) mex=3 و \(\leftarrow \langle G(2), G(2) \rangle\) mex=(1 xor 1)=0 هستند پس مقدار mex \(G(7)\) برابر است با 1.
حالاتی که مستقیما از \(G(8)\) میتوان تولید کرد \(\leftarrow \langle G(2), G(3) \rangle\) mex=(1 xor 2)=3 و \(\leftarrow \langle G(1), G(4) \rangle\) mex=(1 xor 0)=1 و \(\leftarrow G(5)\) mex=3 و \(\leftarrow G(6)\) mex=1 هستند پس مقدار mex \(G(8)\) برابر است با 0.
حالاتی که مستقیما از \(G(9)\) میتوان تولید کرد \(\leftarrow \langle G(2), G(4) \rangle\) mex=(1 xor 0)=1 و \(\leftarrow G(6)\) mex=1 و \(\leftarrow \langle G(1), G(5) \rangle\) mex=(1 xor 3)=2 و \(\leftarrow G(7)\) mex=1 و \(\leftarrow \langle G(3), G(3) \rangle\) mex=(2 xor 2)=0 هستند پس مقدار mex \(G(9)\) برابر است با 3.
حالاتی که مستقیما از \(G(10)\) میتوان تولید کرد \(\leftarrow \langle G(3), G(4) \rangle\) mex=(2 xor 0)=2 و \(\leftarrow G(7)\) mex=1 و \(\leftarrow G(8)\) mex=0 و \(\leftarrow \langle G(1), G(6) \rangle\) mex=(1 xor 1)=0 و \(\leftarrow \langle G(2), G(5) \rangle\) mex=(1 xor 3)=2 هستند پس مقدار mex \(G(10)\) برابر است با 3.
حالاتی که مستقیما از \(G(11)\) میتوان تولید کرد \(\leftarrow \langle G(4), G(4) \rangle\) mex=(0 xor 0)=0 و \(\leftarrow G(8)\) mex=0 و \(\leftarrow G(9)\) mex=3 و \(\leftarrow \langle G(1), G(7) \rangle\) mex=(1 xor 1)=0 و \(\leftarrow \langle G(2), G(6) \rangle\) mex=(1 xor 1)=0 و \(\leftarrow \langle G(3), G(5) \rangle\) mex=(2 xor 3)=1 هستند پس مقدار mex \(G(11)\) برابر است با 2.
حالاتی که مستقیما از \(G(12)\) میتوان تولید کرد \(\leftarrow \langle G(2), G(7) \rangle\) mex=(1 xor 1)=0 و \(\leftarrow G(9)\) mex=3 و \(\leftarrow G(10)\) mex=3 و \(\leftarrow \langle G(1), G(8) \rangle\) mex=(1 xor 0)=1 و \(\leftarrow \langle G(4), G(5) \rangle\) mex=(0 xor 3)=3 و \(\leftarrow \langle G(3), G(6) \rangle\) mex=(2 xor 1)=3 هستند پس مقدار mex \(G(12)\) برابر است با 2.
حالاتی که مستقیما از \(G(13)\) میتوان تولید کرد \(\leftarrow \langle G(5), G(5) \rangle\) mex=(3 xor 3)=0 و \(\leftarrow \langle G(3), G(7) \rangle\) mex=(2 xor 1)=3 و \(\leftarrow G(10)\) mex=3 و \(\leftarrow G(11)\) mex=2 و \(\leftarrow \langle G(4), G(6) \rangle\) mex=(0 xor 1)=1 و \(\leftarrow \langle G(1), G(9) \rangle\) mex=(1 xor 3)=2 و \(\leftarrow \langle G(2), G(8) \rangle\) mex=(1 xor 0)=1 هستند پس مقدار mex \(G(13)\) برابر است با 4.
حالاتی که مستقیما از \(G(14)\) میتوان تولید کرد \(\leftarrow \langle G(3), G(8) \rangle\) mex=(2 xor 0)=2 و \(\leftarrow G(11)\) mex=2 و \(\leftarrow G(12)\) mex=2 و \(\leftarrow \langle G(2), G(9) \rangle\) mex=(1 xor 3)=2 و \(\leftarrow \langle G(5), G(6) \rangle\) mex=(3 xor 1)=2 و \(\leftarrow \langle G(1), G(10) \rangle\) mex=(1 xor 3)=2 و \(\leftarrow \langle G(4), G(7) \rangle\) mex=(0 xor 1)=1 هستند پس مقدار mex \(G(14)\) برابر است با 0.
حالاتی که مستقیما از \(G(15)\) میتوان تولید کرد \(\leftarrow \langle G(1), G(11) \rangle\) mex=(1 xor 2)=3 و \(\leftarrow \langle G(2), G(10) \rangle\) mex=(1 xor 3)=2 و \(\leftarrow G(12)\) mex=2 و \(\leftarrow G(13)\) mex=4 و \(\leftarrow \langle G(5), G(7) \rangle\) mex=(3 xor 1)=2 و \(\leftarrow \langle G(3), G(9) \rangle\) mex=(2 xor 3)=1 و \(\leftarrow \langle G(4), G(8) \rangle\) mex=(0 xor 0)=0 و \(\leftarrow \langle G(6), G(6) \rangle\) mex=(1 xor 1)=0 هستند پس مقدار mex \(G(15)\) برابر است با 5.
حالاتی که مستقیما از \(G(16)\) میتوان تولید کرد \(\leftarrow \langle G(1), G(12) \rangle\) mex=(1 xor 2)=3 و \(\leftarrow \langle G(5), G(8) \rangle\) mex=(3 xor 0)=3 و \(\leftarrow \langle G(4), G(9) \rangle\) mex=(0 xor 3)=3 و \(\leftarrow \langle G(3), G(10) \rangle\) mex=(2 xor 3)=1 و \(\leftarrow G(13)\) mex=4 و \(\leftarrow G(14)\) mex=0 و \(\leftarrow \langle G(6), G(7) \rangle\) mex=(1 xor 1)=0 و \(\leftarrow \langle G(2), G(11) \rangle\) mex=(1 xor 2)=3 هستند پس مقدار mex \(G(16)\) برابر است با 2.
حالاتی که مستقیما از \(G(17)\) میتوان تولید کرد \(\leftarrow \langle G(4), G(10) \rangle\) mex=(0 xor 3)=3 و \(\leftarrow \langle G(7), G(7) \rangle\) mex=(1 xor 1)=0 و \(\leftarrow \langle G(6), G(8) \rangle\) mex=(1 xor 0)=1 و \(\leftarrow G(14)\) mex=0 و \(\leftarrow G(15)\) mex=5 و \(\leftarrow \langle G(1), G(13) \rangle\) mex=(1 xor 4)=5 و \(\leftarrow \langle G(2), G(12) \rangle\) mex=(1 xor 2)=3 و \(\leftarrow \langle G(5), G(9) \rangle\) mex=(3 xor 3)=0 و \(\leftarrow \langle G(3), G(11) \rangle\) mex=(2 xor 2)=0 هستند پس مقدار mex \(G(17)\) برابر است با 2.
حالاتی که مستقیما از \(G(18)\) میتوان تولید کرد \(\leftarrow \langle G(1), G(14) \rangle\) mex=(1 xor 0)=1 و \(\leftarrow \langle G(2), G(13) \rangle\) mex=(1 xor 4)=5 و \(\leftarrow G(15)\) mex=5 و \(\leftarrow G(16)\) mex=2 و \(\leftarrow \langle G(5), G(10) \rangle\) mex=(3 xor 3)=0 و \(\leftarrow \langle G(3), G(12) \rangle\) mex=(2 xor 2)=0 و \(\leftarrow \langle G(4), G(11) \rangle\) mex=(0 xor 2)=2 و \(\leftarrow \langle G(6), G(9) \rangle\) mex=(1 xor 3)=2 و \(\leftarrow \langle G(7), G(8) \rangle\) mex=(1 xor 0)=1 هستند پس مقدار mex \(G(18)\) برابر است با 3.
حالاتی که مستقیما از \(G(19)\) میتوان تولید کرد \(\leftarrow \langle G(2), G(14) \rangle\) mex=(1 xor 0)=1 و \(\leftarrow \langle G(8), G(8) \rangle\) mex=(0 xor 0)=0 و \(\leftarrow \langle G(5), G(11) \rangle\) mex=(3 xor 2)=1 و \(\leftarrow \langle G(1), G(15) \rangle\) mex=(1 xor 5)=4 و \(\leftarrow \langle G(4), G(12) \rangle\) mex=(0 xor 2)=2 و \(\leftarrow G(16)\) mex=2 و \(\leftarrow G(17)\) mex=2 و \(\leftarrow \langle G(3), G(13) \rangle\) mex=(2 xor 4)=6 و \(\leftarrow \langle G(7), G(9) \rangle\) mex=(1 xor 3)=2 و \(\leftarrow \langle G(6), G(10) \rangle\) mex=(1 xor 3)=2 هستند پس مقدار mex \(G(19)\) برابر است با 3.
حالاتی که مستقیما از \(G(20)\) میتوان تولید کرد \(\leftarrow \langle G(3), G(14) \rangle\) mex=(2 xor 0)=2 و \(\leftarrow \langle G(4), G(13) \rangle\) mex=(0 xor 4)=4 و \(\leftarrow \langle G(6), G(11) \rangle\) mex=(1 xor 2)=3 و \(\leftarrow \langle G(7), G(10) \rangle\) mex=(1 xor 3)=2 و \(\leftarrow G(17)\) mex=2 و \(\leftarrow G(18)\) mex=3 و \(\leftarrow \langle G(8), G(9) \rangle\) mex=(0 xor 3)=3 و \(\leftarrow \langle G(1), G(16) \rangle\) mex=(1 xor 2)=3 و \(\leftarrow \langle G(2), G(15) \rangle\) mex=(1 xor 5)=4 و \(\leftarrow \langle G(5), G(12) \rangle\) mex=(3 xor 2)=1 هستند پس مقدار mex \(G(20)\) برابر است با 0.
چون عدد mex حالت \(G(20)\) برابر با ۰ هست پس نفر دوم برنده این بازی خواهد بود.