0 / 0 / 0
Регистрация: 01.12.2022
Сообщений: 4

Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат две кучи камней

01.12.2022, 19:59. Показов 5845. Ответов 5

Студворк — интернет-сервис помощи студентам
Помогите, пожалуйста, как можно упростить
Программа не справляется с расчетом, зависает
Пробовала увеличить рекурсию, хранить кеш

Задача:
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат две кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в одну из куч (по своему выбору) один камень или добавить столько камней, сколько их в данный момент в другой куче.
Игра завершается, когда суммарное количество камней в кучах 75 и более.
В начальный момент в первой куче было 7 камней, во второй куче  — S камней; 1 ≤ S ≤ 67.
Известно, что Ваня выиграл своим первым ходом после неудачного первого хода Пети. Укажите минимальное значение S, когда такая ситуация возможна

Код:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
from functools import lru_cache
import sys
sys.setrecursionlimit(10000)
 
def moves(h):
    a, b = h
    return (a+1, b), (a, b+1), (a+b, b), (a, b+a)
lru_cache(None)
 
def f(h):
    if sum(h) > 74:
        return 'win'
    elif (any(f(x) == 'win' for x in moves(h))):
        return 'П1'
    elif (any(f(x) == 'П1' for x in moves(h))):
        return 'B1'
 
for i in range(7, 67):
    h = 7, i
    print(i, f(h))
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.12.2022, 19:59
Ответы с готовыми решениями:

Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит три кучи камней
Решая задачи 19-21 егэ впервые встретил условие с 3 кучами, которое ввело меня в ступор. Условие: Два игрока, Петя и Ваня, играют в...

Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней
Помогите решить Задачи 19 - 21. Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по...

Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За...

5
Эксперт Python
 Аватар для Red white socks
4523 / 1899 / 336
Регистрация: 18.01.2021
Сообщений: 3,489
01.12.2022, 21:45
Цитата Сообщение от Tolya223 Посмотреть сообщение
Игра завершается, когда суммарное количество камней в кучах 75 и более.
Игра завершается, а кто выиграл - так и непонятно.
Цитата Сообщение от Tolya223 Посмотреть сообщение
неудачного первого хода Пети
Что означает "неудачный" ход?
Цитата Сообщение от Tolya223 Посмотреть сообщение
Программа не справляется с расчетом
В игре сделано 2 хода. Тут вручную посчитать можно.
0
Вирусоборец
 Аватар для thyrex
14449 / 7488 / 1582
Регистрация: 06.09.2009
Сообщений: 27,132
01.12.2022, 22:06
Минимальное значение - 60. Петя добавил во вторую кучу 7 камней (как было в первой куче), общее количество стало 74. Васе оставалось добавить один камень.
0
0 / 0 / 0
Регистрация: 01.12.2022
Сообщений: 4
02.12.2022, 13:30  [ТС]
Red white socks,
Игра завершается, а кто выиграл - так и непонятно.
Это лежит в вопросе задачи. При каком min S выиграет Ваня?

Что означает "неудачный" ход?
Ну вроде логично, что ход, который не привел к победе, а дал возможность выиграть второму

В игре сделано 2 хода. Тут вручную посчитать можно.
Я и не просил ее решать, я и сам могу посчитать вручную. Мне нужна программа. И вопрос стоит относительно кода программы.


thyrex,
Спасибо, что уделили время и решили задачу, но вопрос стоял относительно кода программы

Добавлено через 10 минут
Код относительно решения задачи написан верно.
Проблема в том, что он не справляется с такой глубокой рекурсией. Считает долго, а потом сбрасывает.
И почему то увеличение рекурсии через sys.setrecursionlimit(10000)
не дает пользы.
0
Эксперт Python
 Аватар для Red white socks
4523 / 1899 / 336
Регистрация: 18.01.2021
Сообщений: 3,489
02.12.2022, 14:29
Лучший ответ Сообщение было отмечено Tolya223 как решение

Решение

Цитата Сообщение от Tolya223 Посмотреть сообщение
Код относительно решения задачи написан верно.
Проблема в том, что он не справляется с такой глубокой рекурсией. Считает долго, а потом сбрасывает
Код написан неверно. Даже не учитывая, что игра длится 2 хода, с полным просчетом там очень далеко до recursionlimit. Как минимум, ошибка в логике.
Мои вопросы были вовсе не для меня, а для вас. Чтобы вы поняли стоящую перед вами задачу. Жаль, что не получилось.
Успехов.
Цитата Сообщение от Tolya223 Посмотреть сообщение
thyrex,
Спасибо, что уделили время и решили задачу
К слову, тот ответ неверен.

Добавлено через 29 минут
Tolya223, смотрите, как организуется полный просчет.
Но он вам не нужен)) Вам надо всего 2 хода...
Оптимизация алгоритма
0
0 / 0 / 0
Регистрация: 01.12.2022
Сообщений: 4
02.12.2022, 14:32  [ТС]
Red white socks,
Ох, сколько важности))
Успехов и вам

Я нашел ошибку
к сожалению, из-за моей невнимательности
я пропустил символ @ перед lru_cache(None)

И да, логика решения верная
В программе выводятся все значения S, и кто выиграет при каждом значении
ответ 21, что можно самостоятельно увидеть при выводе
и этот ответ правильный

Для улучшения кода можно добавить условие и break
Python
1
2
3
4
5
for i in range(7, 67):
    h=7,i
    if f(h) == 'В1':
        print(i, f(h))
        break

Прикреплю для других, вдруг кому-то просто смогу помочь. Ведь людям иногда просто нужен взгляд со стороны)
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
def moves(h):
    a, b = h
    return (a+1, b), (a, b+1), (a+b, b), (a, b+a)
@lru_cache(None)
def f(h):
    if sum(h) > 74:
        return 'win'
    elif (any(f(x) == 'win' for x in moves(h))):
        return 'П1'
    elif (any(f(x) == 'П1' for x in moves(h))):
        return 'В1'
 
for i in range(7, 67):
    h=7,i
    if f(h) == 'В1':
        print(i, f(h))
        break

Всем добра/бобра
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
02.12.2022, 14:32
Помогаю со студенческими работами здесь

Два игрока, Петя и Ваня, играют в следующую игру
(№ 4825) Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает...

Стратегия при игре "Куча камней"
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За...

Есть кучка из n камней. Два игрока играют в игру. Первый игрок на своем ходу может взять либо a1, либо a2, ., либо ak
Есть кучка из n камней. Два игрока играют в игру. Первый игрок на своем ходу может взять либо a1, либо a2, ..., либо ak камней. Второй...

Игроки А и В играют в следующую игру
Помогите пожалуйста, никак не могу решать. Игроки А и В играют в следующую игру. Игрок А делает ставку 10 грн, а игрок В - 7 грн. Из...

Задача на разделение камней на две кучи
Задача отсюда: http://acm.timus.ru/problem.aspx?space=1&num=1005 У вас есть несколько камней известного веса w1, …, wn. Напишите...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

Новые блоги и статьи
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru