вы прекрасны, я счастлив, что теперь понимаю теорию игр, и всё благодаря вам!!!! Спасибо
@ktoshoot4 ай бұрын
мужик, спасибо тебе большое, у меня завтра пересдача, я посмотрел у тебя всего 2 видео с заданием 8 и теорией игр, но я тебе безумно благодарен, никто не может так кратко и быстро объяснить задание как ты.+rep
@barabarabaraberebereberee Жыл бұрын
А что делать, если игрок не может повторять свой собственный последний ход? Из РЕШУ ЕГЭ под номерами 46977, 46978, 46979 Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в кучу один камень, добавить два камня или увеличить количество камней в куче в два раза. При этом нельзя повторять ход, который этот же игрок делал на предыдущем ходу. Повторять чужие ходы и свои более старые ходы разрешается. Например, если в начале игры в куче 3 камня, Петя может первым ходом получить кучу из 4, 5 или 6 камней. Если Петя получил кучу из 5 камней (добавил два камня), то следующим ходом Ваня может получить 6, 7 или 10 камней. Если Ваня добавил один камень и получил 6 камней, то вторым ходом Петя может получить 7 или 12 камней. Получить 8 камней Петя не может, так как для этого нужно добавить 2 камня, а Петя делал это на предыдущем ходу. Чтобы делать ходы, у каждого игрока есть неограниченное количество камней. Игра завершается, когда количество камней в куче становится не менее 21. Победителем считается игрок, сделавший последний ход, то есть первым получивший кучу, в которой будет 21 или больше камней. В начальный момент в куче было S камней, 1 ⩽ S ⩽ 20. Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника. 19. Укажите наименьшее значение S, при котором Петя не может выиграть за один ход, но у Пети есть выигрышная стратегия, позволяющая ему выиграть вторым ходом. 20. Укажите два значения S, при которых у Вани есть выигрышная стратегия, позволяющая ему выиграть вторым ходом при любой игре Пети, но у Вани нет стратегии, которая позволяла бы ему гарантированно выиграть первым ходом. В ответе запишите найденные значения в порядке возрастания: сначала меньшее, затем большее. 21. Найдите наибольшее значение S, при котором у Пети есть выигрышная стратегия, позволяющая ему выиграть третьим ходом при любой игре Вани, но у Пети нет стратегии, которая позволяла бы ему гарантированно выиграть первым или вторым ходом. В общем, я изменил move(h) следующим образом: def move(h): a = [] x, my_last, his_last = h if my_last != '+1': a.append((x + 1, '+1', my_last)) if my_last != '+2': a.append((x + 2, '+2', my_last)) if my_last != '*2': a.append((x * 2, '*2', my_last)) return a но ответы с таким вариантом программы не совпадают, и кажется, что я просто забываю использовать his_last. UPD: Я попробовал написать две разные функции move(h) для Пети и Вани по образцу из видео, и это приводит меня к тем же самым неправильным ответам. UPD 2: Вот правильная функция: def move(h): x, his_last, my_last = h a = [] if my_last != '+1': a.append((x + 1, '+1', his_last)) if my_last != '+2': a.append((x + 2, '+2', his_last)) if my_last != '*2': a.append((x * 2, '*2', his_last)) return a
@_sanmo_7671 Жыл бұрын
большое спасибо, смотрела много разборов, и только сейчас поняла
@TS-56Ай бұрын
Спасибо большое! Документ Полякова на 60 страниц никак не сравнится по эффективности с твоим 50-и минутным роликом! Всё чётко и понятно
@zlayatucha4935 Жыл бұрын
Почаще делай видео, быстрее и познавательнее смотреть, чем вебинары
@АрнольдБерцы13 Жыл бұрын
😐😐😐
@A3OT_Replays6 ай бұрын
Спасибо большое! Очень рад тому, что нашёл гибкий способ для ТИ. Целую недели искал и не мог найти))
@sashok422 күн бұрын
Там, кстати, в последней задаче в 21 номере можно было написать: If sum(game(m) == «В1» for m in move(h)) == 2: return P2 Ответ будет правильный В отличии от any, который ищет единственный True, sum может посчитать количество True(тк в питоне True приравнивается к единице)
@favn2858 Жыл бұрын
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат две кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может убрать из одной из куч один камень или уменьшить количество камней в куче в два раза (если количество камней в куче нечётно, остаётся на 1 камень меньше, чем убирается). Игра завершается в тот момент, когда суммарное количество камней в кучах становится не более 20. Победителем считается игрок, сделавший последний ход, то есть первым получивший позицию, в которой в кучах будет 20 или меньше камней. В начальный момент в первой куче было 10 камней, во второй куче - S камней, S > 10. Известно, что Ваня выиграл своим первым ходом после неудачного первого хода Пети. Укажите максимальное значение S, когда такая ситуация возможна.
@NikolayUchitel Жыл бұрын
Лайк. Репост. Спасибо. Очень недурно
@inf99ballov Жыл бұрын
Рад стараться
@morrisnight7 ай бұрын
Просто мощь. Отлично снято, качество, звук, атмосфера, подача - подход к своей работе на высоте! Целеустремленность твоё второе имя. Дальше лучше.
@rand111qq9 ай бұрын
невероятно помогло, большое спасибо!
@leoshastin Жыл бұрын
Ответить на 21-й вопрос последней задачи можно так: for s in range(1, 41): if game(s) == 'p2' and ((game(s*2) == 'v1') + (game(s+1) == 'v1') + (game(s+2) == 'v1')) == 2: print(s)
@inf99ballov Жыл бұрын
душевно благодарен, добавлю такое решение в документ)
@stanislavchernov4248 Жыл бұрын
как на 3 кучи делать?
@nester9152 Жыл бұрын
Спасибо за 3 балла на егэ ❤
@Vanek_fff4 ай бұрын
Спасибо! Готовился к ЕГЭ по информатике в 10 классе по курсу Flash из 100бальногорепетитора, а летом доступ к нему блокируется... Ты очень помог мне вспомнить :) В школьное время было лень разбираться в рекурсиях и я упустил суть решения Python. Вот, сижу летом готовлюсь...
@muzekass5829 Жыл бұрын
Попалось задание на решу егэ с одной кучей и возможные ходы - добавить 1 камень или увеличить в 6 раз их количество. Победа получается, когда камней больше 361 Если для s брать начальное значение меньше 112 то прога ошибку выдает, а если брать значения выше - ответа просто нет Номер на решу егэ: 28142 Условие: Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в кучу один камень или увеличить количество камней в куче в шесть раз. Например, имея кучу из 10 камней, за один ход можно получить кучу из 11 или 60 камней. У каждого игрока, чтобы делать ходы, есть неограниченное количество камней. Игра завершается в тот момент, когда количество камней в куче превышает 361. Победителем считается игрок, сделавший последний ход, то есть первым получивший кучу, в которой будет 362 или больше камней. В начальный момент в куче было S камней, 1 ≤ S ≤ 360. Говорят, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника. Описать стратегию игрока - значит, описать, какой ход он должен сделать в любой ситуации, которая ему может встретиться при различной игре противника. Известно, что Ваня выиграл своим первым ходом после неудачного первого хода Пети. Укажите минимальное значение S, когда такая ситуация возможна.
@muzekass5829 Жыл бұрын
Нашел решение Нужно добавить: from sys import setrecursionlimit setrecursionlimit(2000)
@ennhao7687 ай бұрын
лучшииий, очень круто объяснил, еще и через прогу!!
@keitkeit3764 Жыл бұрын
Привет, просто интересно)) Сколько в месяц зарабатываешь на репетиторстве? Больше 150к?
@Rostislaviooo Жыл бұрын
Как нужно изменить код, если в условии написано, что нельзя повторять прошлый ход этого же игрока. Вот условие: Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в кучу один камень, добавить два камня или увеличить количество камней в куче в два раза. При этом нельзя повторять ход, который этот же игрок делал на предыдущем ходу. Повторять чужие ходы и свои более старые ходы разрешается. Например, если в начале игры в куче 3 камня, Петя может первым ходом получить кучу из 4, 5 или 6 камней. Если Петя получил кучу из 5 камней (добавил два камня), то следующим ходом Ваня может получить 6, 7 или 10 камней. Если Ваня добавил один камень и получил 6 камней, то вторым ходом Петя может получить 7 или 12 камней. Получить 8 камней Петя не может, так как для этого нужно добавить 2 камня, а Петя делал это на предыдущем ходу. Чтобы делать ходы, у каждого игрока есть неограниченное количество камней. Игра завершается, когда количество камней в куче становится не менее 29. Победителем считается игрок, сделавший последний ход, то есть первым получивший кучу, в которой будет 29 или больше камней. В начальный момент в куче было S камней, 1 ⩽ S ⩽ 28. Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника. Укажите наименьшее значение S, при котором Петя не может выиграть за один ход, но у Пети есть выигрышная стратегия, позволяющая ему выиграть вторым ходом.
@end23958 ай бұрын
Как вариант, первое что приходит на ум это завести кортеж ходов, но сделаем его максимальной длины 2, то есть после своего хода будем добавлять туда ход, и убирать нулевой элемент, а проверять будем именно нулевой элемент, то есть предпредыдущий, соответственно наш. Изначальное значение поставим за (0, 0). Изначально начал делать с массивом, но столкнулся с ошибкой хеширования, так и не понял с чем связано, но в итоге перешел на кортеж. Вот пример кода: from functools import lru_cache def moves(h): x, steps = h a = [] if steps[0] != '+1': steps = (steps[1], '+1') a.append((x + 1, steps)) if steps[0] != '+2': steps = (steps[1], '+2') a.append((x + 2, steps)) if steps[0] != '*2': steps = (steps[1], '*2') a.append((x * 2, steps)) return a @lru_cache(None) def game(h): x, steps = h if x >= 29: return 'W' if any(game(m) == 'W' for m in moves(h)): return 'P1' if all(game(m) == 'P1' for m in moves(h)): return 'B1' if any(game(m) == 'B1' for m in moves(h)): return 'P2' if all(game(m) == 'P1' or game(m) == 'P2' for m in moves(h)): return 'B2' for s in range(1, 28): h = (s, (0, 0)) if game(h) == 'P2': print(s, game(h)) Такой код выдает: 7 P2 11 P2 12 P2 13 P2 То есть минимальный s = 7
@xra.08 ай бұрын
@@end2395 Спасибо за идею, помог, но хочу подметить, что вместо "steps" в условии лучше использовать новую переменную, а то последний ход перемешивается и ответ на 46977 получается не правильным (но я решил).
@ДимаАхунов-р3ш Жыл бұрын
Помогите, прошу!!! Я просто не понимаю, моя программа в точности, как на видео, но она выводит только сообщение об ошибке максимума рекурсии. Условия: 1
@j1su174 Жыл бұрын
Большое спасибо за разбор, стало намного проще и в целом понятней, как решать такие задачи, но вот у меня попалась такая вариация задачи, когда не "нельзя повторять ход, который сделал второй игрок", а "нельзя повторять ход, который этот же игрок делал на предыдущем ходу". Всё пытался догадаться, как изменить код в таком случае, но так и не додумался. Сможете, пожалуйста, помочь?
@sjjdbsjziizjsbqjqbrbx Жыл бұрын
Догадался?
@j1su174 Жыл бұрын
@@sjjdbsjziizjsbqjqbrbx, Неа, так и не вышло
@АревикКарян8 ай бұрын
Почему в задаче на две кучи 19 номер не считает? (не выдает никакой ответ,
@homegame8787 Жыл бұрын
В заданиях с двумя кучами пишет что a не определено. и ошибку выдает в строке a,b=h. Что делать??
@АринаАлексеева-ю2г Жыл бұрын
я не понимаю суть функции game, как она работает. Если какой нибудь первый ход окажется выигрышным то выходит P1. А если все ходы выводят P1 то возвращается В1, это не понятно, почему при всех ходах когда петя выигрывает 1ым ходом у вани выигрышный? кажется я запутался, я чтото не так понял
@inf99ballov Жыл бұрын
Удобнее для понимания нарисовать дерево ходов, а я пока что объясню на словах: Петя по условию ходит всегда первый, значит если у него есть ХОТЯ БЫ ОДИН ход приводящий его к победе - то он и победит. Но такая конструкция не работает для Вани - ведь он ходит после Пети - поэтому чтобы доказать что выигрывает Ваня необходимо рассмотреть ВСЕ ходы Пети и при каждом доказать что Ваня побеждает. Что же касается P1 - это выигрышная стратегия - то есть та из которой можно выиграть и раз Все ходы ведут в такие позиции - значит из всех них будет побеждать мой оппонент - а значит я сам нахожусь в проигрышной
@sosun4lena453 Жыл бұрын
вот есть будет другая задача на ЕГЭ, как перекрутить у себя всю эту логику в голове? это же не реально
@DZ-vq8db Жыл бұрын
Есть же, если ты не пень же, получиться же. А иначе же нафиг ты такой в унике нужен
@dizla1k1576 ай бұрын
Так а что сложного? Код немного меняешь и все либо руками
@coolomet5 ай бұрын
если попадется новая задача, то, скорее всего, она будет не сложной, но будет усложняться в следующих годах
@k_o_l_d_iplay9360 Жыл бұрын
Отличное видео, но у меня до сих пор остался вопрос по #6 из 9-10 варианта, проблема заключается в следующем: черепаха поначалу стоит на одном месте, а затем рисует фигуру. Вот условия из 9 варианта (Направо 30 [Вперёд 30 Направо 60 Вперёд 30 Направо 120] и условие из 10 варианта: (Повтори 10 [Направо 120 Вперёд 12 Направо 60 Вперёд 12] Код для 10 варианта: from turtle import * color('black', 'red') m = 100 begin_fill() left(90) for i in range(4): right(120) forward(12*m) right(60) forward(12*m) end_fill() canvas = getcanvas() cnt = 0 for x in range(-130*m, 130*m, m): for y in range(-130*m, 130*m, m): item = canvas.find_overlapping(x,y,x,y) if len(item) == 1 and item[0] == 5: cnt += 1 print(cnt) done() ext() Код для 9 варианта: from turtle import * color('black' 'red') m = 100 begin_fill() right(30) left(60) for i in range(4): forward(30*m) right(60) forward(30*m) right(120) end_fill() canvas = getcanvas() cnt = 0 for x in range(-130*m, 130*m, m): for y in range(-130*m, 130*m, m): item = canvas.find_overlapping(x,y,x,y) if len(item) == 1 and item[0] == 5: cnt += 1 print(cnt) done() ext()
@skrapbs8054 Жыл бұрын
Них у тебя код
@NoNo-pp1qz Жыл бұрын
Ты ещё на ассемблере черепашку пропиши
@matikkyt3710 Жыл бұрын
кумир в помощь
@k_o_l_d_iplay9360 Жыл бұрын
@@matikkyt3710 👌
@МишаМаматов-й5о5 ай бұрын
Люблю когда не надо думать, спасибо😘
@redtroll2830 Жыл бұрын
Подскажите пожалуйста как решить эту задачу способом из видео но так чтобы она не выходила за предел рекурсии Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в кучу один камень или возвести количество камней в квадрат. Например, имея кучу из 7 камней, за один ход можно получить кучу из 8 или 49 камней. У каждого игрока, чтобы делать ходы, есть неограниченное количество камней. Игра завершается в тот момент, когда количество камней в куче становится 100 или более. Победителем считается игрок, сделавший последний ход, то есть первым получивший кучу, в которой будет 100 или больше камней. В начальный момент в куче было S камней, 1 < S < 99. Говорят, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника. Описать стратегию игрока - значит, описать, какой ход он должен сделать в любой ситуации, которая ему может встретиться при различной игре противника. Известно, что Ваня выиграл своим первым ходом после неудачного первого хода Пети. Укажите минимальное значение S, когда такая ситуация возможна.
@s1sy4s1ck3 Жыл бұрын
Не понимаю почему не выдает ответ программа задача:Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат две кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в одну из куч (по своему выбору) один камень или увеличить количество камней в куче в три раза. Например, пусть в одной куче 5 камней, а в другой 9 камней; такую позицию мы будем обозначать (5, 9). За один ход из позиции (5, 9) можно получить любую из четырёх позиций: (6, 9), (15, 9), (5, 10), (5, 27). Игра завершается в тот момент, когда суммарное количество камней в кучах становится не менее 79. Победителем считается игрок, сделавший последний ход, т. е. первым получивший позицию, в которой в кучах будет 79 или больше камней. В начальный момент в первой куче было 6 камней, во второй куче - S камней; 1 ≤ S ≤ 72. Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника. Описать стратегию игрока - значит, описать, какой ход он должен сделать в любой ситуации, которая ему может встретиться при различной игре противника. В описание выигрышной стратегии не следует включать ходы играющего по этой стратегии игрока, не являющиеся для него безусловно выигрышными, т. е. не являющиеся выигрышными независимо от игры противника. Найдите максимальное значение S, при котором у Вани есть выигрышная стратегия, позволяющая ему выиграть при любой игре Пети. код: from functools import lru_cache def moves(h): a, b = h return (a + 1, b), (a * 3, b), (a, b + 1), (a, b * 3) @lru_cache(None) def game(h): a, b = h if a+b >= 79: return 'W' if any(game(m) == 'W' for m in moves(h)): return 'P1' if all(game(m) == 'P1' for m in moves(h)): return 'B1' if any(game(m) == 'B1' for m in moves(h)): return 'P2' if all(game(m) == 'P1' or game(m) == 'P2' for m in moves(h)): return 'B2' for s in range(1, 200): h = 6, s if game(h) == 'B2': print(s, game(h))
@inf99ballov Жыл бұрын
Так а может тебе здесь B1 нужно найти на не B2? Может четко написать номер задания ( 19 20 или 21) и что нужно найти дословно Потому что код написан верно
@maxlopp10 ай бұрын
а что делать если на код с 2 кучами выдает, что "a, b = h TypeError: cannot unpack non-iterable int object"
@inf99ballov10 ай бұрын
ошибка в шаблоне, скорее всего забыла в основном цикле под функцией передавать h как 2 числа, поэтому и распаковать обратно он не может
@andycall1115 Жыл бұрын
Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат две кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может убрать из одной из куч один камень или уменьшить количество камней в куче в два раза (если количество камней в куче нечётно, остаётся на 1 камень больше, чем убирается). Например, пусть в одной куче 6, а в другой 9 камней; такую позицию мы будем обозначать (6, 9). За один ход из позиции (6, 9) можно получить любую из четырёх позиций: (5, 9), (3, 9), (6, 8), (6, 5). Игра завершается в тот момент, когда суммарное количество камней в кучах становится не более 40. Победителем считается игрок, сделавший последний ход, то есть первым получивший позицию, в которой в кучах будет 40 или меньше камней. В начальный момент в первой куче было 20 камней, во второй куче - S камней, S > 20. Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника. Описать стратегию игрока - значит, описать, какой ход он должен сделать в любой ситуации, которая ему может встретиться при различной игре противника. В описание выигрышной стратегии не следует включать ходы играющего по ней игрока, которые не являются для него безусловно выигрышными, т.е не гарантирующие выигрыш независимо от игры противника. Известно, что Ваня выиграл своим первым ходом после неудачного первого хода Пети. Укажите максимальное значение S, когда такая ситуация возможна.
@inf99ballov Жыл бұрын
Решил чекай гугл документ
@МаксимДураксим Жыл бұрын
@@inf99ballov Известно, что Петя проиграл своим вторым ходом после неудачного хода Вани. Такое может быть? И еще одна формулировка:Известно, что Петя выиграл своим вторым ходом после неудачного хода Вани
@sparrrxw Жыл бұрын
@@inf99ballov по условию s > 20. но в коде в цикле for ты перебираешь от 20 включительно. я проверил: на ответ это не повлияло, но исправь всё же, пожалуйста
@IDAHOBI Жыл бұрын
13.35 что нужно прописать, чтобы не учитывать ходы которые ведут в значение больше 60?
@егор-з9ь7д Жыл бұрын
👍 СЮДАААААА {под видео} 🦆
@rebellion255 Жыл бұрын
В чем разница между вашим методом и "традиционным" методом через итерацию? def f(s1,s2,p): if s1+s2 >= ... and p == ...: return True; if s1+s2 = ... : return False; if ... : return f(s1*2,s2,p+1) or (and) ... ... for s2 in range(100): if f(...,s2,1): print(s2);
@GhostKarin Жыл бұрын
нравится в говне наверн повозиться им)
@rebellion255 Жыл бұрын
@@GhostKarin кому именно? тем, у кого код больше?
@GhostKarin Жыл бұрын
@@rebellion255 да, в котором легко запутаться
@rebellion255 Жыл бұрын
@@GhostKarin надеюсь, мне скажут, зачем этот длинный код нужен и чем он отличается от стандартного
@inf99ballov Жыл бұрын
@@rebellion255 ну может он для тебя и стандартный, на самом деле решай так как тебе удобно, только попробуй решить все задачи из видео через свой код - если получится без проблем, то юзай его раз он тебе понятней
@glinomeszhidkiy10 ай бұрын
спасибо большое!!!
@Олег_Бубенец5 ай бұрын
Не тратьте время, иван викторович объяснил всё проще и за 8 минут, а не за час.
@yummy7030 Жыл бұрын
день до егэ) хыхыхы
@Q_1_2_m Жыл бұрын
Можете помочь, у меня достигается максимум рекурсии, хотя кэширование я сделал. Что делать в таком случае?
@loka8001 Жыл бұрын
Я немного не понял насчет "if h>60: return 'P1'" разве не B1 должно быть? если именно оппонент выигрывает или P2 а не P1?
@loka8001 Жыл бұрын
Если кто нибудь понял может пояснить поподробнее?
@БриллиантовыйДемон Жыл бұрын
помогите пожалуйста, я решаю вашим способом, в целом всё ок, я всё понимаю, но попалась задача с условием "так же за всю игру можно только один раз сделать суперход - ход, после которого количество камней в куче не изменится, а очередь хода перейдёт к сопернику, т.е. суперход может сделать один раз либо Ваня, либо Петя". я не понимаю, как это прописать в коде
@elenamakarova1153 Жыл бұрын
а почему при более больших числах (200+) в стандартных задачах на одну кучу ничего не работает и можно ли это как-то решить ?
@mrvalary2 Жыл бұрын
Начинай перебор с больших чисел. Например у тебя победа с 350, тогда начни с 100
@mor9626 Жыл бұрын
достаточно добавить from sys import setrecursionlimit setrecursionlimit(2000)
@popugajara7 ай бұрын
код абсолютно не работает на некоторых задачах.
@ArgentYourBest_Choise13 күн бұрын
На каких типах не работает например?
@stafrhd7 ай бұрын
Ну лучший. Прям спас.
@mr.mahlov4245 Жыл бұрын
а что делать коогда в условии на две кучи камней в обоих неизвестное значение?
@pusna5478 Жыл бұрын
при поиске максимального S выдает на единицу меньше ответа. Можете подсказать?
@Bogdashka Жыл бұрын
А все прототипы можно ли решить через эксель? Скажите, пожалуйста
@inf99ballov Жыл бұрын
Ну скорее всего можно, но в некоторых случаях очень "неприятно"
@user-iw4xj4mn1t Жыл бұрын
P1 и B1 очень путают понимание рекурсии, надо было по другому обозвать
@divine3728 Жыл бұрын
вчера на решу егэ мне попались задачи на теорию игр под номером 28236 по 28238 включительно, где в условиях можно к куче прибавить один камень или возвести в квадрат. скажите, пожалуйста, как правильно отразить это условие в коде?
@black_inside Жыл бұрын
def moves(h): return h+1, h**2
@divine3728 Жыл бұрын
@@black_inside я так и написал, но у меня выдаёт ошибку
@mor9626 Жыл бұрын
@@divine3728 выдаёт ошибку, т.к. ты бесконечно возводишь 1 в квадрат, поэтому начни перебор с 2
@xra.08 ай бұрын
Для задания 46977 (одна куча, три хода, запоминание хода(одного и того же игрока)): from functools import lru_cache def m(s): A = [] x,steps = s if steps[0] != '+1': q = (steps[1],'+1') A.append((x + 1,q)) if steps[0] != '+2': q = (steps[1],'+2') A.append((x + 2,q)) if steps[0] != '*2': q = (steps[1],'*2') A.append((x * 2,q)) return A @lru_cache(None) def g(s): x, steps = s if x >= 21: return 'w' if any(g(x) == 'w' for x in m(s)): return 'p1' if all(g(x) == 'p1' for x in m(s)): return 'w1' if any(g(x) == 'w1' for x in m(s)): return 'p2' if all(g(x) == 'p1' or g(x) == 'p2' for x in m(s)): return 'w2' if any(g(x) == 'w1' or g(x) == 'w2' for x in m(s)): return 'p3' if all(g(x) == 'p1' or g(x) == 'p2' or g(x) == 'p3' for x in m(s)): return 'w3' for s in range(1,21): h = (s,(0,0)) if g(h) == 'p2': print(s) Не уверен в правильности хода Вани(3), но в целом код рабочий!
@АртёмМорозов-б7э Жыл бұрын
А можешь, пожалуйста, разобрать задачи по теории игр, когда в условии написано "не следует"
@inf99ballov Жыл бұрын
Скинь пожалуйста такое условие, что-то я таких не припомню
@АртёмМорозов-б7э Жыл бұрын
@@inf99ballovПросто на курсы по подготовке к ЕГЭ хожу, теорию игр по твоим шаблонам делаю, сегодня даже учителю это шаблон показывал. Также большое тебе спасибо за всё то, что ты делаешь для нас, твои видео очень помогают. Ну а вот такую задачу я не сделал. Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежат две кучи камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может добавить в одну из куч (по своему выбору) один камень или увеличить количество камней в куче в два раза. Например, пусть в одной куче 10 камней, а в другой 5 камней; такую позицию в игре будем обозначать (10, 5). Тогда за один ход можно получить любую из четырёх позиций: (11, 5), (20, 5), (10, 6), (10, 10). Для того чтобы делать ходы, у каждого игрока есть неограниченное количество камней. Игра завершается в тот момент, когда суммарное количество камней в кучах становится не менее 77. Победителем считается игрок, сделавший последний ход, т.е. первым получивший такую позицию, при которой в кучах будет 77 или больше камней. В начальный момент в первой куче было семь камней, во второй куче - S камней; 1 ≤ S ≤ 69. Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника. Описать стратегию игрока - значит описать, какой ход он должен сделать в любой ситуации, которая ему может встретиться при различной игре противника. В описание выигрышной стратегии не следует включать ходы играющего по этой стратегии игрока, не являющиеся для него безусловно выигрышными, т.е. не являющиеся выигрышными независимо от игры противника. Известно, что Ваня выиграл своим первым ходом после неудачного первого хода Пети. Укажите минимальное значение S, когда такая ситуация возможна. Вот "не следует", как мне кажется, там для неё команду "else" может использовать нужно?
@inf99ballov Жыл бұрын
@@АртёмМорозов-б7э Так это же самая обычная задача на две кучи камней. Тебя смущает формулировка: Неудачного хода Пети? Я решал такую задачу в видео, погляди внимательнее(3 по счету вроде))) там нужно просто в одном моменте all ан any поменять и все
@inf99ballov Жыл бұрын
@@АртёмМорозов-б7э А вот этот кусок: """ Будем говорить, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника. Описать стратегию игрока - значит описать, какой ход он должен сделать в любой ситуации, которая ему может встретиться при различной игре противника. В описание выигрышной стратегии не следует включать ходы играющего по этой стратегии игрока, не являющиеся для него безусловно выигрышными, т.е. не являющиеся выигрышными независимо от игры противника. """ Вообще рудимент, который остался с егэ 2020 годов, когда выигрышные стратегии расписывали руками - на него вообще забей)
@АртёмМорозов-б7э Жыл бұрын
@@inf99ballov понял, спасибо большое, что объяснил)
@Frensski Жыл бұрын
сколько баллов дает эти 3 задания в сумме??
@dakota-q5o11 ай бұрын
3
@ffiulopy2.0 Жыл бұрын
На ЕГЭ могут попасться только камни или ещё что-то?
@inf99ballov Жыл бұрын
может быть что угодно, но из года в год только камни дают или что-то на них похожее
@battleunit4701 Жыл бұрын
Кто знает как решить ошибку: cannot unpack non-iterable int object. Она возникает только тогда , когда в задаче 2 кучи .
@inf99ballov Жыл бұрын
скинь свою прогу, я скажу где ошибка
@battleunit4701 Жыл бұрын
@@inf99ballov спасибо ,но я уже разобрался) В конце , условие нужно было из game(s) сделать game(h)
@whysotired710 ай бұрын
а теория игр только на камни существует?
@rai_bon81179 ай бұрын
Так и не понял, что такое P1, P2, B1, B2?
@hiIamalina5 ай бұрын
А как же фишки?
@bo3duxah Жыл бұрын
Разве в первой задаче ответ не 7? Петя выбирает h*2 и получает 14 камней, потом Ваня выбирает h*2 и получает 28 камней >=25, то есть выигрывает. Или я что-то не понимаю?
@inf99ballov Жыл бұрын
В задаче написано при ЛЮБОЙ ИГРЕ ПЕТИ а значит что ваня должен выиграть при обоих его ходах а не только при умножении на два
@haemi6899 Жыл бұрын
какие 3 месяца. осталось 13 часов😋
@hash1r1ya Жыл бұрын
понимаю
@itchyyy152911 ай бұрын
код перестает работать при большом количестве камней
@anus834610 ай бұрын
import sys sys.setrecursionlimit(2500) # увеличивай значение, пока ошибка не пропадет это исправит проблему с глубиной рекурсии
@pslups9086 Жыл бұрын
метод алексея кабанова короче и красивей будет
@inf99ballov Жыл бұрын
Согласен, на мой взгляд, этот просто по-понятнее, ну а вы выбирайте сами)
@Stusl1k7 ай бұрын
голос на пятёрку похож)
@СергейПичугин-в5б6 ай бұрын
я ору чаечкой с названий файлов
@hedamn64166 ай бұрын
код не рабочий )
@kubsupreme16295 ай бұрын
Всмысле?
@kubsupreme16295 ай бұрын
Почему?
@hedamn64165 ай бұрын
@@kubsupreme1629 потому что как только в задаче действий которые можно сделать становится больше двух, и ты пишешь это в код, программа уже не выдает ответа
@seqwai57895 ай бұрын
@@hedamn6416 У меня такая же проблема возникла, потому что я в цикле писал только конечное число, типа for s in range(36): А надо от единицы до конечного: for s in range(1,36): У меня проблема решилась, надеюсь поможет
@varvarapro7839 Жыл бұрын
🦆
@artemvolkov25508 ай бұрын
имба
@alextarr430 Жыл бұрын
код некорректно работает при других числах
@inf99ballov Жыл бұрын
Код как раз работает корректно, возможно ты просто ошибся, скинь задачу и свое решение я посмотрю
@alextarr430 Жыл бұрын
@@inf99ballov я пробовал его на двух разных задачах и в обоих случаях он выдавал слишком большое число (19 задача), а при слишком маленьком значении (собственно говоря, правильном ответе) в результате было None. Из-за чего это может быть?
@inf99ballov Жыл бұрын
@@alextarr430 Ошибка могла быть где угодно, может быть ты all на any не менял потому что как правило в 19 задачи нужен неудачных ход пети. Но ответить точно смогу только если взгляну на пример
@alextarr430 Жыл бұрын
@@inf99ballov мои комментарии с задачей и кодом почему-то удаляются сами по себе после отправления(( Могу я скинуть на почту или еще куда-то?
@inf99ballov Жыл бұрын
@@alextarr430 по ссылке в описании есть телеграм канал, можешь в комменты просто скинь куда-нибудь под постом
@Jdjkjh11 ай бұрын
😂ты на того типа из волчонка похож
@Reilinsger9 ай бұрын
Теория подставы...
@surikatio Жыл бұрын
У меня задача аналогична первой, но всего лишь отличаются ходы и количество камней в куче, требуемое для выигрыша, код для задачи из видео работает, но для моей выдает макс глубину рекурсии... Изменено: проблема в том , что второй ход сначала умножает на 4, а затем вычитает из кучи 3 камня, но я все равно не пойму где рекурсия не может остановиться...
@surikatio Жыл бұрын
итак, проблему решил тем, что начал перебирать цикл не с 1, а с 2(просто другие решения данной проблемы выдают ошибку)
@capmacaron5 ай бұрын
спасибо за ребенка
@ИгорьКорюков-э6м10 ай бұрын
Программа работает не так, как на видео. Она неправильная
@inf99ballov9 ай бұрын
как же она тогда выдает правильные ответы?
@dima_51458 ай бұрын
у тебя голос как у пятёрки...
@begidurak Жыл бұрын
А как все это запомнить ахаха
@inf99ballov Жыл бұрын
практика и практика))
@dyingangell3340 Жыл бұрын
бл я один нечего не понимаю?
@Stayfashan_P Жыл бұрын
брух
@VWodolass4 ай бұрын
Лёша это бот!
@ayezxc6 ай бұрын
ты сигма
@вадикзаеб Жыл бұрын
огромное спасибо
@АревикКарян8 ай бұрын
Почему в задаче на две кучи 19 номер не считает? (не выдает никакой ответ,