Теория игр 19-21 — презентация
logo
Теория игр 19-21
  • Теория игр 19-21
  • Теория
  • Задача 19251 с Комп ЕГЭ
  • Теория игр 19-21
  • Задача 12448 с Комп ЕГЭ
  • Теория игр 19-21
  • Задача 19750 с Комп ЕГЭ
  • Теория игр 19-21
1/8

Первый слайд презентации: Теория игр 19-21

Программный способ

Изображение слайда

Слайд 2: Теория

Any и all — это две встроенные функции в Python, которые проверяют, являются ли какие-либо или все элементы истинными. Any () возвращает True, если хотя бы один элемент в итерируемом типе (списке, строке или кортеже) равен True. Если все элементы не истинны или итерируемый объект пуст, any () возвращает False. All () возвращает True, если все элементы в итерируемом типе равны True или итерируемый объект пуст. В остальных случаях all () возвращает False.

Изображение слайда

Слайд 3: Задача 19251 с Комп ЕГЭ

Изображение слайда

Слайд 4

def f(s, m): if s >=132 : return m%2==0 if m == 0: return 0 h = [ f(s + 3, m - 1), f(s +6, m - 1), f(s * 3, m - 1) ] return any(h) if m % 2 != 0 else all(h) print([s for s in range(1,132) if f(s, 2) ]) print([s for s in range(1,132) if not f(s, 1) and f(s, 3) ]) print([s for s in range(1,132) if f(s, 4) and not f(s, 2) ]) def f(s, m) - рекурсивную функция, которая принимает два параметра s — текущее количество камней в куче, m — количество оставшихся ходов. Игра заканчивается, когда в куче становиться 132 или более камней. Если m чётное (m % 2 == 0), значит, последний ход делал Ваня, и он победил, иначе выиграл Петя. Если m == 0, значит, ходы закончились, но никто не достиг 132 камней, игра завершилась без победителя. Список h – вызовы функции, с учётом того, что игрок может увеличить кол-во камней в куче. Необходимо рассмотреть все варианты, поэтому через запятую перечисляем их. Мы делаем m-1, чтобы передать ход следующему игроку. Если m нечётное (ходит Петя), ему достаточно хотя бы одного выигрышного варианта ( any (h)). То есть если существует хотя бы одна такая стратегия, Петя ей воспользуется. Так как Ваня ходит после Пети, ему необходимо не создавать такие условия, при которых Петя смог б найти выигрышную стратегию своим следующим ходом. Значит нам нужно рассмотреть все варианты ходов – all (h). Для 19 номера нам нужна победа Вани первым его ходом, относительно всей игры это 2 ход. Для 20 номера нам нужна победа Пети именно вторым его ходом, относительно всей игры это 3 ход. Для 21 номера нам нужна победа Вани именно вторым его ходом, относительно всей игры это 4 ход.

Изображение слайда

Слайд 5: Задача 12448 с Комп ЕГЭ

Изображение слайда

Слайд 6

def f(a, b, m): if a * b >= 777 : return m % 2 == 0 if m == 0: return 0 h = [f(a + 3, b, m - 1), f(a, b + 3, m - 1), f(a * 2, b, m - 1), f(a, b * 2, m - 1)] return any(h) if m % 2 != 0 else all(h) # Для 19 номера any(h) везде print([s for s in range(1, 111) if f( 7, s, 2)]) print([s for s in range(1, 111) if not f( 7, s, 1) and f( 7, s, 3)]) print([s for s in range(1, 111) if f( 7, s, 4) and not f( 7, s, 2)]) def f(s, m) - функция, которая принимает три параметра а, b — текущее количество камней в куче двух кучах, m — количество оставшихся ходов. Игра заканчивается, когда в произведение камней >=777. Начальное количество камней в первой куче — 7, во второй — S, причем 1 ≤S≤ 110. В условии 19 номера сказано: известно, что Ваня выиграл своим первым ходом после неудачного первого хода Пети. Тогда нас интересует вариант где существует первая победа Вани, а не его гарантированная победа. То есть, Ваня должен иметь хотя бы один выигрышный ход, а не все возможные. Поэтому для 19 номера будем возвращать: any(h) if m % 2 != 0 else any(h). Для всех остальных номеров обратно возвращаем: any(h) if m % 2 != 0 else all(h). Для 19) Для 20-21)

Изображение слайда

Слайд 7: Задача 19750 с Комп ЕГЭ

Изображение слайда

Последний слайд презентации: Теория игр 19-21

def f(s, m): if s <= 19 : return m % 2 == 0 if m == 0: return 0 if s % 2 == 0 : h = [f(s - 5, m - 1), f(s // 2, m - 1)] if s % 3 == 0 : h = [f(s - 5, m - 1), f(s // 3, m - 1)] if s % 2 != 0 and s % 3 != 0 : h = [f(s - 5, m - 1), f(s + 1, m - 1)] return any(h) if m % 2 != 0 else all(h) print([s for s in range(20, 100) if f(s, 2)]) print([s for s in range(20, 100) if not f(s, 1) and f(s, 3)]) print([s for s in range(20, 100) if f(s, 4) and not f(s, 2)]) Игра заканчивается, когда в куче становиться 19 или меньше камней. Заметим что на первое условие никаких ограничений нет, значит, будем рассматривать его во всех остальных ограничениях. Условия: 1. Уменьшить количество камней на 5. 2. Если количество камней чётное, уменьшить в два раза. 3. Если количество камней кратно трём, уменьшить в три раза. 4. Если количество камней нечётное и не кратно трём, добавить 1 камень.

Изображение слайда

Похожие презентации

Ничего не найдено