مساله ۶۶. بازی با ظروف میوه

هشمت و قلی قراره یه بازی دو نفره انجام بدن. اول هشمت ۱۳۶۹ تا آلبالو میذاره توی یه کاسه. بعد قلی یه تعدادی گیلاس میذاره توی یه کاسه دیگه. از این به بعد هشمت و قلی یکی در میون اینطوری بازی میکنن.

با شروع از هشمت، هر‌نفر:

  • یا تعداد ناصفری آلبالو میخوره
  • یا تعداد‌ ناصفری گیلاس میخوره
  • یا به تعداد‌ برابر و ناصفر آلبالو و گیلاس میخوره

کسی که توی نوبتش نه آلبالو باشه نه گیلاس بازندست. قلی چند تا گیلاس توی کاسه دوم بذاره که برنده بازی بشه؟ (به‌شرطی‌ که از اون به بعد جفتشون بهینه بازی کنند)

لینک سوال در توویتر: https://twitter.com/Riazi_Cafe/status/1759881605819322635

پاسخ برابر با ۸۴۶ است.

هر حالت از بازی را با یک جفت $(a,b)$ (که به آن پیکربندی گفته می‌شود) نشان ‌می‌دهیم که نشان می‌دهد در کاسه اول $a$ عدد آلبالو و در کاسه دوم $b$ عدد گیلاس وجود دارد. اگر هر دو بازیکن به طور بهینه بازی کنند، تنها عاملی که برنده یک حالت از بازی را تعیین می‌کند، پیکربندی $(a,b)$ است که بازی از آن شروع می‌شود. بنابراین، در ادامه این اثبات، ما شناسایی می‌کنیم که کدام پیکربندی‌ها $(a,b)$ حالت‌های برنده (یعنی بازیکنی که نوبت اوست از پیکربندی $(a,b)$ شروع کند، استراتژی برنده دارد) و کدام پیکربندی‌ها حالت‌های بازنده را تشکیل می‌دهند. از آنجا که قوانین بازی متقارن هستند، به راحتی می‌توان دید که یک پیکربندی $(a,b)$ حالت برنده‌ای است اگر و تنها اگر پیکربندی $(b,a)$ نیز حالت برنده‌ای باشد.

بدون ارائه اثبات در اینجا، ما مشاهده‌ای را بیان می‌کنیم که به خواننده کمک می‌کند تا بقیه اثبات را بهتر درک کند. این مشاهده از استدلال‌هایی که در زیر می‌آوریم، نتیجه می‌شود.

مشاهده. برای هر عدد صحیح $a \geq 0$، یک $b$ منحصر به فرد وجود دارد که پیکربندی $(a,b)$ حالت بازنده است!

بنابراین، سوالی که ما در ادامه این اثبات پاسخ می‌دهیم این است: «برای یک $a$ داده شده، به ازای چه مقداری از b پیکربندی (a,b) یک حالت بازنده خواهد بود؟»

برای پاسخ به این سوال، یک سیستم مبتنی بر اعداد فیبوناچی برای نمایش اعداد صحیح تعریف می‌کنیم. اعداد فیبوناچی را به خاطر بیاورید $fib(1) = 1, fib(2) = 2, fib(3) = 3, fib(4) = 5,\ldots, $. به منظور نمایش یک عدد $x \geq 1$ در سیستم مبتنی بر فیبوناچی، ما بزرگترین عدد فیبوناچی را که از $x$ بزرگتر نیست انتخاب می‌کنیم و سپس آن را از $x$ کم می‌کنیم. این کار را آنقدر تکرار می‌کنیم تا عدد ما برابر با ۰ شود. با انجام این کار، $x$ را به یک زیرمجموعه از اعداد فیبوناچی تبدیل می‌کنیم. در نمایش مبتنی بر فیبوناچی $x$، ما برای هر مکان که عدد فیبوناچی مربوط به آن در مجموعه حضور دارد یک '1' قرار می‌دهیم و برای سایر مکان‌ها '0' قرار می‌دهیم. مشابه تمام سیستم‌های نمایش، ما صفرهای ابتدایی را نادیده می‌گیریم. جدول زیر، نمایش‌های مبتنی بر فیبوناچی اعداد 1 تا 20 را نشان می‌دهد.

عدد تجزیه نمایش مبنای فیبوناچی
1 1 = 1 = fib(1) 1
2 2 = 2 = fib(2) 10
3 3 = 3 = fib(3) 100
4 4 = 3+1 = fib(3)+fib(1) 101
5 5 = 5 = fib(4) 1000
6 6 = 5+1 = fib(4)+fib(1) 1001
7 7 = 5+2 = fib(4)+fib(2) 1010
8 8 = 8 = fib(5) 10000
9 9 = 8+1 = fib(5)+fib(1) 10001
10 10 = 8+2 = fib(5)+fib(2) 10010
11 11 = 8+3 = fib(5)+fib(3) 10100
12 12 = 8+3+1 = fib(5)+fib(3)+fib(1) 10101
13 13 = 13 = fib(6) 100000
14 14 = 13+1 = fib(6)+fib(1) 100001
15 15 = 13+2 = fib(6)+fib(2) 100010
16 16 = 13+3 = fib(6)+fib(3) 100100
17 17 = 13+3+1 = fib(6)+fib(3)+fib(1) 100101
18 18 = 13+5 = fib(6)+fib(4) 101000
19 19 = 13+5+1 = fib(6)+fib(4)+fib(1) 101001
20 20 = 13+5+2 = fib(6)+fib(4)+fib(2) 101010

حال آماده‌ایم تا نشان دهیم کدام پیکربندی‌های ‏$‎(a,b)‏$‎ وضعیت‌های باخت در بازی را تشکیل می‌دهند.

قضیه

در صورتی که $0 \leq a \leq b$، پیکربندی ‏$‎‏‏‎(a,b)‏$‎ یک وضعیت باخت است اگر و فقط اگر یکی از دو حالت زیر برقرار باشد:

  • a = b = 0
  • اولین اندیس غیر صفر در نمایش مبتنی بر فیبوناچی a یک اندیس زوج است (اندیس‌ها از 0 شروع می‌شوند) و با شیفت به چپ نمایش مبتنی بر فیبوناچی a، نمایش مبتنی بر فیبوناچی b به دست می‌آید.

قبل از اثبات این قضیه، توجه داشته باشید که نمایش‌های مبتنی بر فیبوناچی برای 1369 و 846 به ترتیب برابر با 101000000001000 و 10100000000100 هستند و بنابراین (1369,846) یک پیکربندی باخت است. بنابراین، قلی باید 846 گیلاس را در کاسه دوم قرار دهد.

اثبات

در ابتدا به این توجه کنید که توصیف قضیه از پیکربندی های باخت، نتایج زیر را به دنبال خواهد داشت:

  • هر عدد x که بزرگتر یا مساوی 1 است، فقط در یک جفت باخت ظاهر می‌شود.
  • تفاوت بین مقادیر اعداد در جفت باخت i-ام برابر با i است. اینجا ما $(0,0)$ را به عنوان جفت باخت 0-ام و $(1,2)$ را به عنوان اولین جفت باخت در نظر می‌گیریم.

اثبات را در دو بخش انجام می‌دهیم.

بخش 1: اگر بازیکنی از پیکربندی $(a, b)$ که شرایط قضیه را برآورده می‌کند شروع کند، نمی‌تواند حرکتی انجام دهد که وضعیت بازی را به پیکربندی دیگری تغییر دهد که شرایط قضیه را برآورده کند. این از واقعیت زیر نتیجه می‌گیرد: هر حرکت یا a را ثابت نگه می‌دارد، یا b را ثابت نگه می‌دارد یا $a-b$ را ثابت نگه می‌دارد. به راحتی می‌توان مشاهده کرد که تمام جفت‌هایی که شرایط قضیه را برآورده می‌کنند کاملاً مجزا هستند و تفاوت‌های آن‌ها نیز منحصر به فرد است.

بخش 2: اگر $(a,b)$ یک پیکربندی باخت نباشد، بازیکن اول می‌تواند با یک حرکت $(a,b)$ را به پیکربندی $(a',b')$ تبدیل کند که یک وضعیت باخت است. برای سادگی فرض می‌کنیم که $a ≤ b$. همچنین، موردی که a برابر با 0 است ساده است چون در این حالت باید $b > 0‏$‎ باشد و بنابراین بازیکن اول می‌تواند با یک حرکت به پیکربندی $(0,0)$ برود و بازی را ببرد. بنابراین دو حالت برای در نظر گرفتن وجود دارد:

  • اولین اندیس غیر صفر از نمایش مبتنی بر فیبوناچی a یک اندیس فرد است: در این حالت، فرض کنید $b'$ عددی باشد که اگر نمایش مبتنی بر فیبوناچی آن را به چپ شیفت دهیم، نمایش مبتنی بر فیبوناچی a به دست آید. توجه داشته باشید که $b' < a < b$ و بنابراین بازیکن اول می‌تواند از پیکربندی $(a,b)$ به پیکربندی $(a,b')$ که طبق تعریف پیکربندی باخت است، حرکت کند.
  • اولین اندیس غیر صفر از نمایش مبتنی بر فیبوناچی a یک اندیس زوج است: در این حالت، فرض کنید c عددی باشد که پیکربندی (a,c) را به وضعیت باخت تبدیل می‌کند. اگر $c > b$ پس بازیکن اول می‌تواند $(a,b)$ را به $(a,c)$ با یک حرکت تبدیل کند. در غیر این صورت، $c-a > b-a$ و بنابراین یک پیکربندی باخت ‏$(a',b')$ وجود دارد به طوری که $min(a',b') < a$ و $|a'-b'| = b-a$. در این حالت، بازیکن اول می‌تواند وضعیت بازی را از $(a,b)$ به $(a',b')$ یا $(b',a')$ با یک حرکت تغییر دهد.