P. Расклад таков…

Виталий любит играть в карты. Он решил выяснить, какие есть вариации вытащить из колоды определённые тройки карт. Напишите программу, которая выводит список вариантов согласно требованиям.

Формат ввода

В первой строке записана масть, которая должна присутствовать в тройке.
Во второй строке записан достоинство, которого не должно быть в тройке.

Формат вывода

Выведите на экран первые 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 вариантов.

Посмотреть код

Решение

Python
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))
Подписаться
Уведомить о
guest
4 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии