Имбу рассказываешь! Спасибо первоисточнику и тебе за распространение.
@Shirmik3 жыл бұрын
Спасибо за разбор! Видел этот метод у "Информатика Роди" и... Он там ничего толком не пояснил. Я просто подумал, что это паракостыльный способ, которым автор видео сам не умеет пользоваться. Я удивился. увидев этот код тут, но тут препод всё пояснил. К слову, люблю, когда в видео подобные преподы не приводят регалий, вроде: "Сдал ЕГЭ по информатике на 99,5 баллов, выпустил 999 стобалльников, рекомендуют 666777 выпускников из 666778 занимавшихся", а сразу начинают с сути. Это вызывает гораздо больше уважения
@AlexanderMishchenko3 жыл бұрын
Благодарю! Вы очень помогли!
@МатикЛавров2 жыл бұрын
Хорошо объясняешь спасибо большое 5звезд из 5. Стараешься переживать как можно больше, для того чтобы всей аудитории было понятно. На большинстве попадавшихся мне видео с разборами задания блогеры прямым текстом говорят я не буду объяснять вам что это за функция и т.д. Я показываю прогу, с которой задание можно решить , а не учу языку программирования.
@sofafrom10473 жыл бұрын
АР, просто спасибо нереальное я наконец-то поняла!!!
@ya-ul9lr2 жыл бұрын
Пересмотрел раз 5 и наконец-то понял, спасибо
@motacillafeldegg133 жыл бұрын
9:35 не список, а кортеж, кортеж объявляется не круглыми скобками (это вызов функции), а перечислением через запятую
@felicxo3 жыл бұрын
Написал комментарий, нашел Ваш, удалил свой
@MAJIAYKA3 жыл бұрын
кортеж также объявляется tuple()
@felicxo3 жыл бұрын
@@MAJIAYKA гениально, но речь про конструктор типа, что по сути просто синтаксический сахар
@shkolkovo3 жыл бұрын
1) я-то сам это прекрасно понимаю 2) пересмотрел конкретно этот таймкод, кажется я слово "список" применил не как синтаксический термин, а как слово из русского языка, имея в виду то же самое, как если бы я сказал слово "последовательность". Вы бы написали аналогичный комментарий, если бы я использовал слово "последовательность"?
@HellRaicer3 жыл бұрын
спасиюбо за вами труды, благодаря вам с30 баллов до 55 поднял
@shkolkovo3 жыл бұрын
Не звучит как супер-результат пока что. Вы в 2022 сдаёте? Ещё успеваете поботать
@StFoReaL2 жыл бұрын
@@shkolkovo хватит этого.
@softisoul6052 жыл бұрын
Огромное спасибо за ваше видео!!!!!
@ARTOMYS3 жыл бұрын
24:46 - это шо ещё за инопланетный робо-битбокс
@evilhan1669 Жыл бұрын
ребят ,срочный вопрос , где задача для двух куч, там цикл фор ,там написано 12,i почему именно 12 , я попробовал и от этого напрямую ответ зависит , помогите , очень надо
@egorlaptev2572 жыл бұрын
20, 21 - решает, а 19, самое легкое, нет 😢
@dmitirymulyakov66632 жыл бұрын
19 в уме решается за 10 секунд)
@саня-в1ц5ж2 жыл бұрын
если ещё актуально, то в случае когда в 19 нужно минимальное значение при котором побеждает Ваня при ошибке Пети, нужно менять второе условие на any
@tupoijozh Жыл бұрын
@@саня-в1ц5ж ты мой герой) Теперь забираю большинство 19-21) 80 баллов
@саня-в1ц5ж Жыл бұрын
@@tupoijozh будь здоров, тоже это задание нарешал, решаю абсолютно все типы
@thesixxteenteam47363 жыл бұрын
зашел на видео думая что меня научат программировать игры.....
@shkolkovo3 жыл бұрын
А вас не научили? Три задачи на игры в ЕГЭ
@thomasshelby62722 жыл бұрын
@@shkolkovo он имел ввиду игры которые играют ну типо геймдев
@angelinaa.52602 жыл бұрын
@@thomasshelby6272 так написано же про теорию игр, а не про игры
@thomasshelby62722 жыл бұрын
@@angelinaa.5260 я это знаю, а автор основного комментария либо нет либо пошутил так
@nwfrusya93893 жыл бұрын
А functools является стандартной библиотекой?
@Shirmik3 жыл бұрын
Да. У Python очень богатая библиотека. Всякие itrtools, math, functools и прочие
@АлександрМежов-и3е2 жыл бұрын
Спасибо! А как быть, если условие выигрыша такое: Игра завершается в тот момент, когда количество камней в куче становится не менее 20. Если при этом в куче оказалось не более 30 камней, то победителем считается игрок, сделавший последний ход. В противном случае победителем становится его противник. В начальный момент в куче было S камней, 1 ≤ S ≤ 19.
@shum4706 Жыл бұрын
разобрались?
@aii_rin_2 жыл бұрын
СПАСИБО
@TimTV_Club2 жыл бұрын
Работает через раз
@ruslangaliullin43143 жыл бұрын
в 21ом ответ 15
@alarmstories3 жыл бұрын
Зачетное превью
@sqrtlsk3 жыл бұрын
Как с убывающими кучами делать?
@MAJIAYKA3 жыл бұрын
Да, да, +
@MAJIAYKA3 жыл бұрын
Думаю, надо lru_cache самому реализовать
@shkolkovo3 жыл бұрын
а в чём проблема? Немножко подкрутить условия выхода из рекурсии и действия в moves(h) и всё
@ИльяШокало-с6ч3 жыл бұрын
@@shkolkovo а конкретне?)))
@quickflickteam2 жыл бұрын
А какой ответ на задачу 19 с двумя кучами в конце видео и как ьыли поставлены вопросы?
@sheward76543 жыл бұрын
Почему то у меня код не работает. Пишет при проверке на сумму "int" object is not iterable. И ещё когда делаю множественное присваивание пишет cannot unpack non-iterable int object
@heal_suiz86853 жыл бұрын
Почему модуль lru_cashe не хочет импортироваться?
@sqrtlsk3 жыл бұрын
cache там
@justieku3 жыл бұрын
У меня RecursionError: maximum recursion depth exceeded выдаёт... В python вроде до 10 тыс. самовызова функции
@shkolkovo3 жыл бұрын
Вероятно, запустили на цикле с нулём или как-то иначе ушли в бесконечную рекурсию. Типа идея в том, что на нуле например ход "умножение на два" не меняет позицию, что потенциально создаёт RDE
@justieku3 жыл бұрын
@@shkolkovo ахахах на егэ я завалил это задание))) Поздно вы ответили
@someuser2573 жыл бұрын
Ребят, кто пробовал, у меня на 19 номер всегда неправильно, а 20-21 верно. Нет ли ошибки в первом elif?
@kirills82893 жыл бұрын
Во втором elif замени all на any (только для 19 задания)
@emerald62753 жыл бұрын
@@kirills8289 почему?
@НиколайНиколаевич-р5п3 жыл бұрын
@@emerald6275 Потому что нам достаточно "глупой" игры от Пети. То есть Петя может проиграть, когда это не обязательно.
@theunt81113 жыл бұрын
У меня наоборот 21 всегда не работает. Я и с одной кучей пытался решить и с двумя, В2 никогда нету. Это как вообще?
@someuser2573 жыл бұрын
@@theunt8111 как оказалось, 19 и не должна выводить, там нужно смотреть, что приводит к нужной позиции. А 21 работает, проверь внимательно код на any/all и условие or
@nuxs3 жыл бұрын
Программисты: решают через рекурсию и показывают, насколько решение элегантно Те же программисты: функциональное программирование? Да зачем оно нужно? Оно же сложное, непонятное и нигде не используется
@felicxo3 жыл бұрын
Многие ходят фп- тропками, просто сами не знают
@tameblander89313 жыл бұрын
Functools- это встроенная библиотека? Тоесть её точно можно будет импортировать на егэ?
@ПавелЗахаров-ц3с3 жыл бұрын
да. Такая же как и itertools, они уже установлены в питон
@shkolkovo3 жыл бұрын
да
@tameblander89313 жыл бұрын
@@shkolkovo Большое спасибо, правда немного поздновато))
@AlexanderMishchenko3 жыл бұрын
Программа для двух куч вообще не выводит В1. Что делать?
@випко3 жыл бұрын
В комментах поднимался похожий вопрос, но никто так и не дал вразумительного ответа, решающего эту проблему. На любых условиях (кроме Вашего, разумеется) 19ая задача решается неверно. 20ая и 21ая решаются безотказно и на одну, и на две кучи. Не знаю, получу ли я решение данной проблемы, но очень на это надеюсь P.s. пример заданий с решуЕГЭ, на которых 19ое решается неверно: Две кучи: - 27790 - 36032 - 27768 Одна куча: - 27808 - 28227 - 27811
@sqrtlsk3 жыл бұрын
во втором elif all на any нужно заменить
@MAJIAYKA3 жыл бұрын
Да,да, решение неверное... Если бы ты понимал, что в проге происходит, сменил бы просто any на all, где надо. Удачи в изучениях
@shkolkovo3 жыл бұрын
Так не следует зубрить код, я для чего 24 минуты в видео объяснял что каждая строчка делает?
@-Overwhelmed- Жыл бұрын
Я сам с начала не понял, а потом прочитал условие и в нём написано что не обязательно все ходы пети должны вести к победе вани, в только неудачный ход, следовательно all(,,,,,,,,) не работает т.к таких ситуаций в данной задаче просто не существует, а если заменить all на any, то слетают ответы на 20 и 21, но ответ на 19 получаеться правильный, так что всегда надо думать своей головой, и если уж решил зубрить чужой код, то хотя бы постарайся разобраться как он работает. Всем удачи на предстоящем ЕГЭ будущие умы России
@TigerRUS2 жыл бұрын
почему-то в моём случае этот код не выводит верного результата для одного из трёх задач, не понимаю почему. Вроде бы да, 8 * 3, 24 * 3 > 64 выигрывает В2, но там None
@bezdarnost8715 Жыл бұрын
Условие : При этом нельзя повторять ход, который этот же игрок делал на предыдущем ходу.
@_matros_3 жыл бұрын
Почему объект составляющий 2 кучи равняется именно 12?
@shkolkovo3 жыл бұрын
не понял вопрос, можно с таймкодом конкретным?
@МатикЛавров2 жыл бұрын
А что делать , если программа выдает 'превышена максимальная глубина рекурсии'?
@Motro9162 жыл бұрын
import sys sys.setrecursionlimit(100000)
@scarl1214 Жыл бұрын
@@Motro916 не работает, у меня в задании победа начинается с 2022 и рекурсивным методом не выходит от слова совсем. Пытался через cache, а также через лимит глубины рекурсии, но программа просто не работает
@Motro916 Жыл бұрын
@@scarl1214 тогда попытайся найти закономерность, и ты поймёшь, что все очень легуо
@MrKirby-es5nf3 жыл бұрын
Нужна помощь! Из-за сложного действия 3*h-2 программа ломается. Что делать? Пишет: RecursionError: maximum recursion depth exceeded Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может: добавить в кучу один камень (действие А) или утроить количество камней в куче, а затем убрать из кучи 2 камня (действие Б). Игра завершается в тот момент, когда количество камней в куче становится более 39. Победителем считается игрок, сделавший последний ход, то есть первым получивший кучу, в которой будет 40 или больше камней. В начальный момент в куче было S камней, 2 ≤ S ≤ 39.
@Шерхан-т5в3 жыл бұрын
Покажи всю прогу
@MrKirby-es5nf3 жыл бұрын
@@Шерхан-т5в from functools import lru_cache def moves(h): return h+1,h*3-2 @lru_cache(None) def f(h): if (h>=40): return 'END' elif (any(f(x)=='END' for x in moves(h))): return 'П1' elif (all(f(x)=='П1' for x in moves(h))): return 'В1' elif (any(f(x)=='В1' for x in moves(h))): return 'П2' elif (all(f(x)=='П2' or f(x)=='П1' for x in moves(h))): return 'В2' for i in range(1,100): print(i,f(i)) ЗАДАНИЕ: Два игрока, Петя и Ваня, играют в следующую игру. Перед игроками лежит куча камней. Игроки ходят по очереди, первый ход делает Петя. За один ход игрок может: добавить в кучу один камень (действие А) или утроить количество камней в куче, а затем убрать из кучи 2 камня (действие Б). Например, имея кучу из 20 камней, за один ход можно получить кучу из 21 камня или из 58 камней. У каждого игрока, чтобы делать ходы, есть неограниченное количество камней. Игра завершается в тот момент, когда количество камней в куче становится более 39. Победителем считается игрок, сделавший последний ход, то есть первым получивший кучу, в которой будет 40 или больше камней. В начальный момент в куче было S камней, 2 ≤ S ≤ 39. Говорят, что игрок имеет выигрышную стратегию, если он может выиграть при любых ходах противника. Описать стратегию игрока - значит, описать, какой ход он должен сделать в любой ситуации, которая ему может встретиться при различной игре противника. Известно, что Ваня выиграл своим первым ходом после неудачного первого хода Пети. Укажите минимальное значение S, когда такая ситуация возможна. 2)П2 3)В2 Тут что-то с допустимым диапазоном, если написать h*3-1, то все отлично построится. Заранее спасибо за помощь!
@СергейГордиенко-п4д3 жыл бұрын
Просто не бери S=1. Если ты его берёшь, то получается что 3S-2=3-2=1, цикл вызовов замкнулся. Точно так же ты не должен рекурсивно, например, возводить 1 в какую-то степень
@MrKirby-es5nf3 жыл бұрын
@@СергейГордиенко-п4д Спасибо огромное!
@MrKirby-es5nf3 жыл бұрын
@@СергейГордиенко-п4д Подскажи, что делать, если произведение 2 куч должно быть больше чего-то? Там где раньше писалось sum(h)
@asyag45533 жыл бұрын
У меня задание с одной кучей, один из ходов - возвести в квадрат. Пишет ошибка :превышена максимальная рекурсионная глубина... Как исправить?
@djivs94753 жыл бұрын
в начале программы напиши from sys import * setrecursionlimit(1000000) во второй строке подбираешь число чтобы программа проходила
@maks1moff2933 жыл бұрын
скорее всего ты бесконечно единичку возводишь
@СергейГордиенко-п4д3 жыл бұрын
Добавь в moves() условие, что единица в квадрат не возводится
@shkolkovo3 жыл бұрын
@@maks1moff293 скорее всего он бесконечно единичку возводит, да
@ИльяГришин-щ9ц2 жыл бұрын
зачем показывать людям декоратор, если они не понимают, что это, даже не было никаких пояснений насчет конструкции, просто челики зубрят, а смысл не понимают, тогда зачем им вообще программировать, бред
@langu0r14893 жыл бұрын
Не выдает верный ответ по условию "у Вани нет стратегии, которая позволит ему гарантированно выиграть первым ходом, но ситуация, когда Ваня выигрывает первым ходом, реализоваться может", нужно найти минимальное В2 Нужное В2 выводит, но оно не является минимальным
@noble_ru2 жыл бұрын
Меняй с all на any
@МаксимКузаков-ь5т3 жыл бұрын
Ну стоит сказать сдающим, что задачи на ЕГЭ бывают и не про камни.
@asdqwe34833 жыл бұрын
ни разу не было не на камни
@mmxx002 жыл бұрын
Думаю, уже стоит сказать, что не нужно решать задания с решуегэ и прочих помоек
@getstickbugged_lol9502 жыл бұрын
@@mmxx00 а кроме решу егэ что ещё помойка?)
@mmxx002 жыл бұрын
@@getstickbugged_lol950 сборники крылова
@bi8oma2 жыл бұрын
у меня не выходит, что не так в проге? from functools import lru_cache def moves(h): a, b = h return (a+1, b), (a, b+2), (a*2, b), (a, b*2) @lru_cache(None) def f(h): if(sum(h) >= 41): return 'END' elif(any(f(x)=='END' for x in moves(h))): return 'П1' elif(all(f(x)=='П1' for x in moves(h))): return 'В1' elif(any(f(x)=='В1' for x in moves(h))): return 'П2' elif(all(f(x)=='П2' or f(x)=='П1' for x in moves(h))): return 'В2' for i in range(1, 100): h = 8, i print(i, f(h))
@nikitarusspl-75242 жыл бұрын
Не работает с 27804. Ответы в 19 и 21 число 3 , но этот код показывает с 1-8 значение None 10-11 None .
@UVZK2 жыл бұрын
Потому что в 19 условием является неудачный ход, то есть ты во втором elif меняешь all на any
@qimbe74412 жыл бұрын
Как будет выглядеть программа, если в задаче есть условие:"При этом нельзя повторять ход, который только что сделал второй игрок. "?
@Alto_Clef2 жыл бұрын
решайте ручками ;)
@kotik7493 Жыл бұрын
почему именно 12, подскажите, пожалуйста . 22:39 Спасибо огромное за видос, наконец-то нашла для себя подходящий способ решения
@tot_samiy_na_898 Жыл бұрын
12- это исходное значение камней во 2 куче(дано в условии)
@evilhan1669 Жыл бұрын
@@tot_samiy_na_898 боже , я час думал почему там именно 12 и почему у меня задача не получается , спасибо большое ))))))
@lxqtpr3 жыл бұрын
Возник вопрос. Что делать, если меня просят найти минимальное значение , при котором Ваня победит первым ходом?
@gqsak3 жыл бұрын
Сначала вы в первом задание в exel показали, что первый столбик это Петя, а второй Ваня, где все столбцы умножены на три, а потом вы перенесли на два столбца и сделали первую таблицу Ваней, а вторую Петей и в итоге какая-то Путаница.
@shkolkovo3 жыл бұрын
Не, Тимур, они же меняются очередностью хода. Мы переходим на следующую задачу, где Петя делает первый ход, а потом Ваня должен сходить в ответ, а затем Петя должен выиграть в конце. Они как бы наоборот получается работают. Посмотрите отдельно вот тут: kzbin.info/www/bejne/b3e2ZWlmis6Ehpo
@camgal043 жыл бұрын
эм, moves возвращает кортеж, а не список
@fkel73413 жыл бұрын
а почему перезалив? не успел вчера досмотреть...
@shkolkovo_phys3 жыл бұрын
Да видос багнутый залился сначала, перезалили полную версию сейчас, всё красиво, досматривайте :)
@igornevertired46983 жыл бұрын
Что делать, если такое условие? "Игра завершается в тот момент, когда количество камней в куче превышает 365". Программа пишет, что превышен лимит рекурсии
@shkolkovo3 жыл бұрын
ну вероятно проблема не в том, что у вас рекурсия превышается на таких числах, а в том, что вы запускаете неправильно на каком-нибудь нулевом тесте или ещё каким-то образом делаете бесконечную рекурсию
@-Overwhelmed- Жыл бұрын
Если проблема только в рекурсиях, то в начале кода пиши это: import sys sys.setrecursionlimit(3000) # Значение в скобках любое, но смысла ставить меньше 1500 ноль
@LinkerSharp3 жыл бұрын
для двух куч программа как-то странно работает
@shkolkovo3 жыл бұрын
можно конкретнее?
@LinkerSharp3 жыл бұрын
@@shkolkovo у меня эта программа не всегда выводила В1
@Goga-f3b3 жыл бұрын
Через рекурсию проще
@de_pholt2 жыл бұрын
он не работает, он не решает задачи на решу егэ, значения в ответе на сайте одни, а в программе None
@АнтонКоролёв-ф2й3 жыл бұрын
В задаче надо кучи минусовать и делить и выигрывает если = Что делать, рукурсия ерор короче
@АннаКоузова-р9щ3 жыл бұрын
экселем тогда я не смогла, например, в квадрат возвести, тоже ерор пишет((
@Shirmik3 жыл бұрын
Проверь, не пытается ли функция делить единичку или нолик, не уходит ли в минус. Поставь дополнительные ограничения
@СергейГордиенко-п4д3 жыл бұрын
Найдите значения S, при, которых при действии moves(S) вернётся опять S
@hit71522 жыл бұрын
Так и не разобрался? Такая же проблема, ни расширение границ рекурсии, ни что-то другое не помогает( деления на 0 и на единичку нету...
@LinkerSharp3 жыл бұрын
там почему-то не выводится победа Вани при первом ходе...
@ffedook3 жыл бұрын
такой же вопрос
@shkolkovo3 жыл бұрын
не понял, выводится же всё
@LinkerSharp3 жыл бұрын
@@shkolkovo 22:50 - если рассматривать значения, которые скроллятся в консоли, то я вижу 1 ... -- none 23 24 -- П2 25 ... -- none 28 29 -- В2 30 -- П2 31 ... -- П1 61 62 ... -- END 99 но я не увидел В1... может, он был выше... но у меня программа иногда не выводила В1, даже если прописывать функции только для П1 и В1
@ban_anna3 жыл бұрын
Для двух куч не выдает ответ, когда В выиграет 2м ходом, там ручками надо
@shkolkovo_phys3 жыл бұрын
как не выдаёт? Выдаёт
@romanborisenko56533 жыл бұрын
@@shkolkovo_phys вот так, просто намертво зависает, если не ограничивать рекурсию
@guiterenzog27233 жыл бұрын
Почему в последнем elif еще добавляем П2?
@shkolkovo_phys3 жыл бұрын
Потому что Ваня может выиграть первым ИЛИ вторым ходом в условии 21й задачи. Типа если Петин первый ход приведёт в П1 (позиция с победой за один ход), то Ваня выиграл сразу. Если Петин первый ход приведёт в П2 (позиция с победой за два хода), то Ваня выиграл за два хода. Поэтому нас как раз интересует чтобы Ваня выиграл за 1 или за 2 хода, значит все ходы должны вести либо в П1 либо в П2.
@guiterenzog27233 жыл бұрын
@@shkolkovo_phys спасибо, теперь понятно)
@mrboogi4823 жыл бұрын
Очень сложно
@Shirmik3 жыл бұрын
Сложно, но не настолько уж. Просто сама структура программы не вполне понятная умозрительно, но иначе она бы была сверхусложнённой
@андрюхают2 жыл бұрын
почему h=12
@bi8oma2 жыл бұрын
потому что в начальный момент в первой куче было 12 камней
@чашкаслапшой3 жыл бұрын
а что делать,если дают условие: Для начальных позиций (6, 32), (7, 32), (8, 31) укажите, кто из игроков имеет выигрышную стратегию ?
@shkolkovo_phys3 жыл бұрын
стартуете с этих позиций и смотрите, выигрывают ли они в пределах двух ходов с помощью этого кода. Хотите бОльшую глубину - по аналогии допишите через any и all ещё строчки в функции
@user20213A3 жыл бұрын
Но ведь это неверное решение, у нас в начале видео еще был ответ 7, а вы указываете, что только если из всех позиций выигрыш у П1, то В1
@user20213A3 жыл бұрын
получается, что можно написать условие что any(...) and not all(...): return "19 здесь"
@shkolkovo3 жыл бұрын
@@user20213A да, именно так
@lustfulglance4373 жыл бұрын
Хотя бы упоминали тех кто придумал это решение
@robertzaks3013 жыл бұрын
Тогда кто конкретно придумал рекурсию? Я вот гуглил, но не нашел конкрентного автора, который придумал это понятие. Поэтому хз кого вы там упомянать хотели
@darya24153 жыл бұрын
автора идеи назвали в видео и ссылку на его канал тоже прикрепили в описание)
@lustfulglance4373 жыл бұрын
@@darya2415 тогда без проблем, видимо не заметил в описании ссылку😴😴
@shkolkovo_phys3 жыл бұрын
АР: упоминает автора решения Комментаторы: всё равно недовольны
@svetakochetova79483 жыл бұрын
Ну ты и душнила)
@GRAF_D2MIN3 жыл бұрын
Это не работает
@GRAF_D2MIN3 жыл бұрын
а точнее работает не во всех случаях
@shkolkovo_phys3 жыл бұрын
например где не работает?
@alekox24073 жыл бұрын
@@shkolkovo_phys на задание с уменьшением кучек, где из куч вычитается 1 и тп.