Виталий любит играть в карты. Он решил выяснить, какие есть вариации вытащить из колоды определённые тройки карт. Напишите программу, которая выводит список вариантов согласно требованиям.
Формат ввода
В первой строке записана масть, которая должна присутствовать в тройке.
Во второй строке записан достоинство, которого не должно быть в тройке.
Формат вывода
Выведите на экран первые 10 получившихся троек.
Карты в каждой комбинации должны быть отсортированы лексикографически (по строке названия карты). Карты комбинации выводятся через запятую с пробелом после неё.
Комбинации между собой также должны быть отсортированы в лексикографическом порядке по строке, представляющей комбинацию целиком.
Примечание
Обратите внимание: валет-дама-король-туз лексикографически упорядочены. Но «10 …» лексикографически младше, чем «2 …», а бубны младше, чем пики.
Масти в именительном и родительном падежах:
Именительный | Родительный |
---|---|
буби | бубен |
пики | пик |
трефы | треф |
черви | червей |
Пример
Ввод
пики
10
Вывод
2 бубен, 2 пик, 2 треф
2 бубен, 2 пик, 2 червей
2 бубен, 2 пик, 3 бубен
2 бубен, 2 пик, 3 пик
2 бубен, 2 пик, 3 треф
2 бубен, 2 пик, 3 червей
2 бубен, 2 пик, 4 бубен
2 бубен, 2 пик, 4 пик
2 бубен, 2 пик, 4 треф
2 бубен, 2 пик, 4 червей
Ввод
трефы
король
Вывод
10 бубен, 10 пик, 10 треф
10 бубен, 10 пик, 2 треф
10 бубен, 10 пик, 3 треф
10 бубен, 10 пик, 4 треф
10 бубен, 10 пик, 5 треф
10 бубен, 10 пик, 6 треф
10 бубен, 10 пик, 7 треф
10 бубен, 10 пик, 8 треф
10 бубен, 10 пик, 9 треф
10 бубен, 10 пик, валет треф
Решение
Задача на генерацию составных последовательностей с заданными характеристиками.
Правильный ответ можно получить с помощью permutations(), но это играет злую шутку в следующей задаче. Правильно использовать combinations(), потому что она не меняет последовательности элементов.
Первым делом считываем входные параметры и из списка достоинств карт изымаем ненужное значение.
Далее с помощью product() генерируем колоду.
Готовим тройки с помощью permutations() и фильтруем их оставляя только те варианты, где есть требуемая масть.
Сортируем тройки и печатаем первые 10 вариантов.
Посмотреть код
Решение
from itertools import chain, permutations, product
suit = input().strip()
rank = input().strip()
suits = {'буби': 'бубен', 'пики': 'пик', 'трефы': 'треф', 'черви': 'червей'}
ranks = ['10', '2', '3', '4', '5', '6', '7', '8', '9', 'валет', 'дама', 'король', 'туз']
ranks.remove(rank)
deck = product(ranks, suits.values())
triplets = permutations(deck, 3)
triplets = [triplet for triplet in triplets if suits[suit] in chain.from_iterable(triplet)]
# triplets.sort()
sorted_combinations = sorted(triplets)
for combination in sorted_combinations[:10]:
print(', '.join(f'{rank} {suit}' for rank, suit in combination))