Так вышло, что накануне Нового года встретились Санта-Клаус и Дед Мороз и решили выяснить, кто из них круче. Для этого они сыграли в игру «камень-ножницы-бумага».
Санта-Клаус выбросил «камень» дважды, «ножницы» четырежды и «бумагу» четырежды. Дед Мороз выбросил «камень» трижды, «ножницы» шесть раз и «бумагу» один раз. Ни одной ничьей не было.
Кто из них победил и с каким счётом?
Поначалу кажется, что задачка сложная, но давайте разберём её на составляющие. Вспомним, кто какие знаки выбросил.
Санта-Клаус:
- «камень» 🤜 — 2,
- «ножницы» ✌️ — 4,
- «бумага» 🫱 — 4.
Дед Мороз:
- «камень» 🤜 — 3,
- «ножницы» ✌️ — 6,
- «бумага» 🫱 — 1.
Поскольку по условию ничьих не было, получается, что Дед Мороз выбросил «ножницы» 6 раз не в те раунды, когда их выбросил Санта-Клаус. Тогда выходит, что эти шесть раундов были сыграны так:
- Дед Мороз ✌️ — 🤛 Санта-Клаус (победил Санта-Клаус);
- Дед Мороз ✌️ — 🤛 Санта-Клаус (победил Санта-Клаус);
- Дед Мороз ✌️ — 🫲 Санта-Клаус (победил Дед Мороз);
- Дед Мороз ✌️ — 🫲 Санта-Клаус (победил Дед Мороз);
- Дед Мороз ✌️ — 🫲 Санта-Клаус (победил Дед Мороз);
- Дед Мороз ✌️ — 🫲 Санта-Клаус (победил Дед Мороз).
Теперь посмотрим, какие броски остались: Санта-Клаус четырежды выбросил «ножницы». Тогда исход раундов получается такой:
- Дед Мороз 🤜 — ✌️ Санта-Клаус (победил Дед Мороз);
- Дед Мороз 🤜 — ✌️ Санта-Клаус (победил Дед Мороз);
- Дед Мороз 🤜 — ✌️ Санта-Клаус (победил Дед Мороз);
- Дед Мороз 🫱 — ✌️ Санта-Клаус (победил Санта-Клаус).
Посчитаем количество побед каждого:
- Дед Мороз — 7,
- Санта-Клаус — 3.
Получается, что выиграл Дед Мороз, и он круче Санта-Клауса! Но мы и не сомневались :-)
Призовём силу машин и победим эту задачу простым перебором. Логика будет такая:
- Создаём списки знаков каждого и перемешиваем их.
- Берём первый список Деда Мороза из числа перемешанных и сравниваем его поэлементно с первым списком Санта-Клауса из числа перемешанных.
- Если есть одинаковые элементы на одних и тех же позициях — переходим к следующему списку.
- Если одинаковых элементов не было, считаем результат игры. Если таких результатов в списке нет — добавляем их в список. Идея в том, чтобы не добавлять туда одинаковые результаты, а только те, что различаются.
- В конце выведем все найденные результаты.
Запишем всё это на языке Python:
import itertools
dm = ['к', 'к', 'к', 'н', 'н', 'н', 'н', 'н', 'н', 'б' ]
sc = ['к', 'к', 'н', 'н', 'н', 'н', 'б', 'б', 'б', 'б' ]
print('Перемешиваем комбинации Деда Мороза')
dm_all = list(itertools.permutations(dm))
print('Перемешиваем комбинации Санта-Клауса')
sc_all = list(itertools.permutations(sc))
dm_win = 0
sc_win = 0
dm_win_list = []
sc_win_list = []
print('Пожалуйста, подождите немного, перебираем все варианты')
for i in range(len(dm_all)):
for j in range(len(sc_all)):
dm_win = 0
sc_win = 0
# если есть одинаковые элементы на одних позициях — идём к следующей комбинации
if dm_all[i][0] == sc_all[j][0] or dm_all[i][1] == sc_all[j][1] or dm_all[i][2] == sc_all[j][2] or dm_all[i][3] == sc_all[j][3] or dm_all[i][4] == sc_all[j][4] or dm_all[i][5] == sc_all[j][5] or dm_all[i][6] == sc_all[j][6] or dm_all[i][7] == sc_all[j][7] or dm_all[i][8] == sc_all[j][8] or dm_all[i][9] == sc_all[j][9]:
break
for curr in range(10):
if dm_all[i][curr] == 'к' and sc_all[j][curr] == 'б':
sc_win += 1
if dm_all[i][curr] == 'к' and sc_all[j][curr] == 'н':
dm_win += 1
if dm_all[i][curr] == 'н' and sc_all[j][curr] == 'б':
dm_win += 1
if dm_all[i][curr] == 'н' and sc_all[j][curr] == 'к':
sc_win += 1
if dm_all[i][curr] == 'б' and sc_all[j][curr] == 'к':
dm_win += 1
if dm_all[i][curr] == 'б' and sc_all[j][curr] == 'н':
sc_win += 1
if dm_all[i][curr] == sc_all[j][curr]:
dm_win = 0
sc_win = 0
break
# если кто-то победил — заносим в список
if dm_win != 0 or sc_win != 0:
if dm_win not in dm_win_list and sc_win not in sc_win_list:
dm_win_list.append(dm_win)
sc_win_list.append(sc_win)
for i in range(len(dm_win_list)):
print('Результат: Дед Мороз: ' + str(dm_win_list[i]) + ' Санта-Клаус: ' + str(sc_win_list[i]))