Форум программистов, компьютерный форум, киберфорум
Python: Решение задач
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/25: Рейтинг темы: голосов - 25, средняя оценка - 4.92
0 / 0 / 0
Регистрация: 01.12.2022
Сообщений: 4

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

01.12.2022, 19:59. Показов 5337. Ответов 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
14439 / 7481 / 1579
Регистрация: 06.09.2009
Сообщений: 27,119
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
Ответ Создать тему
Новые блоги и статьи
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru