پروژه منچ: بخش ۳


  • محدودیت زمان: ۱ ثانیه
  • محدودیت حافظه: ۲۵۶ مگابایت

در این بخش از پروژه، فرض کنید یک بازیکن داریم که تنهایی منچ بازی می‌کند. به‌طور دقیق‌تر، این بازیکن رنگ «قرمز» را انتخاب می‌کند؛ ۴ مهره قرمز، در ۴ خانه‌ی گوشه بالا سمت راست، قرار می‌دهد. این چهار مهره را با رشته‌‌های R1، R2، R3 و R4 نشان می‌دهیم.

این بازیکن qq درخواست دارد. هر درخواست در یک سطر ورودی داده می‌شود.

پرتاب تاس🔗

این درخواست یعنی بازیکن قرمز می‌خواهد تاس بی‌اندازد.

dice
Plain text

این درخواست یعنی بازیکن قرمز، می‌خواهد تاس بیاندازد.

اگر عدد ظاهر شده از پرتاب‌های قبلی وجود دارد که هنوز حرکت متناسبی برای آن انجام نشده، پیام invalid dice rolling را در یک سطر چاپ کنید.

در غیر این صورت با استفاده از تابع get_dice که در بخش قبلی پیاده‌سازی شده، یک عدد دریافت کنید. اگر عدد ۶ ظاهر شد، این عدد را جزو اعداد ظاهر شده در نظر بگیرید و مجدداً تاس بیاندازید. این کار را آنقدر تکرار می‌کنیم که دیگر ۶ ظاهر نشود.

تضمین می‌شود که فرآیند پرتاب تاس، پایان پذیر باشد. از شما می‌خواهیم تمام اعداد ظاهر شده را در یک سطر، با یک فاصله از هم، چاپ کنید.

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

ورود مهره🔗

این درخواست یعنی بازیکن قرمز، می‌خواهد مهره‌ی mm را وارد بازی کند.

enter <m>
Plain text

تضمین می‌شود m یکی از مقدارهای R1، R2، R3 یا R4 باشد.

  • اگر مهره‌ی mm، در این لحظه در جریان بازی باشد؛ پیام that is in را در یک سطر چاپ کنید.
  • اگر در پرتاب‌های قبلی تاس، عدد ۶ ظاهر نشده باشد تا آن را برای ورود مصرف کنیم، پیام you need six را در یک سطر چاپ کنید.
  • اگر خانه‌ی اولیه برای شروع با مهره‌ی قرمز دیگری اشغال شده باشد، پیام busy starting cell را در یک سطر چاپ کنید.

اگر چند مورد از شرایط بالا برقرار بود، موردی که زودتر بیان شد را در نظر بگیرید و پیام آن را چاپ کنید.

در صورتی که هیچ‌کدام از حالت‌های بالا اتفاق نیافتد، یکی از ۶‌های ظاهر شده در پرتاب تاس را حذف کنید و مهره‌ی mm را وارد خانه اولیه قرمز (خانه ۱) کنید و شماره‌ی خانه‌ای که مهره وارد آن شده را در یک سطر چاپ کنید.

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

حرکت مهره🔗

این درخواست یعنی بازیکن قرمز می‌خواهد مهره‌های mm خود را ss واحد حرکت دهد.

move <m> <s>
Plain text

تضمین می‌شود m یکی از مقدارهای R1، R2، R3 یا R4 باشد. همجنین تضمین می‌شود s یکی از اعداد ‍11 تا 66 باشد.

  • این درخواست زمانی معتبر است که عدد ss در یکی از پرتاب‌های قبلی تاس، ظاهر شده باشد ولی از آن استفاده نشده باشد. اگر این درخواست معتبر نبود، پیام invalid move را در یک سطر چاپ کنید.
  • اگر مهره‌ی mm در چهار خانه‌ی گوشه جدول است، پیام it is not in را در یک سطر چاپ کنید.
  • اگر ss خانه بعدی آن وجود نداشته باشد. (به خانه‌های پایانی نزدیک باشیم.) پیام you can not move را در یک سطر چاپ کنید.
  • اگر خانه‌ی مقصد، توسط مهره‌ی قرمز دیگری اشغال شده است، پیام destination is busy را در یک سطر چاپ کنید.

اگر چند مورد از شرایط بالا برقرار بود، موردی که زودتر بیان شد را در نظر بگیرید و پیام آن را چاپ کنید.

در صورتی که هیچ‌کدام از حالت‌های بالا اتفاق نیافتد، یکی از ssهای ظاهر شده در پرتاب تاس را حذف کنید و مهره‌ی mm را ss واحد به جلو ببرید و شماره‌ی خانه‌ای که مهره وارد آن شده را چاپ کنید.

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

رها کردن🔗

این درخواست یعنی بازیکن می‌خواهد از همه‌ی اعداد ظاهر شده توسط تاس صرف نظر کند و هیچ حرکتی به‌ازای این اعداد انجام ندهد.

giveup
Plain text

این درخواست باید باعث لغو شدن همه‌ی پرتاب‌های تاسی شود که تا کنون انجام شده است.

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

ورودی🔗

در سطر اول ورودی، به‌ترتیب سه عدد اول AA، BB و mm داده می‌شود. 2A,B<m9972 \leq A, B < m \leq 997

در سطر دوم ورودی، عدد صحیح و مثبت qq داده می‌شود. 1q1000001 \leq q \leq 100 \, 000

در qq سطر بعدی، در هر سطر، یکی از چهار درخواست که توضیح آن در متن سوال آمده می‌آید.

خروجی🔗

خروجی متناسب با هر درخواست را در یک سطر جداگانه چاپ کنید.

مثال🔗

ورودی نمونه ۱🔗

37 71 101
14
dice
enter R2
move R2 1
dice
move R2 3
dice
move R2 5
dice
move R2 4
dice
giveup
move R2 3
dice
move R2 4
Plain text

خروجی نمونه ۱🔗

6 1
1
2
3
5
5
10
4
14
3
invalid move
4
18
Plain text

ورودی نمونه ۲🔗

479 139 911
8
move R3 2
enter R2
dice
dice
enter R4
giveup
enter R4
dice
Plain text

خروجی نمونه ۲🔗

invalid move
you need six
2
invalid dice rolling
you need six
you need six
2
Plain text