Вступление
Dobble / SpotIt - это карточная игра, в которой люди должны в кратчайшие сроки найти один и тот же символ на паре карт, указать его и перейти к следующей паре. Каждая карта имеет несколько символов (8 в обычной версии), но ровно один является общим для каждой пары карт.
Пример из физической копии игры:
Вызов
Напишите программу, в которой по заданному набору символов (одиночные символы ascii) и количеству символов на одной карточке будут выводиться списки карточек с символами для каждой карточки. Очевидно, есть много эквивалентных комбинаций, ваша программа просто должна написать любую из комбинаций, которая производит наибольшее количество карт для заданного ввода.
Это код-гольф, поэтому чем короче код, тем лучше.
Было бы также здорово, если бы вычисление закончилось до тепловой смерти вселенной для самого сложного случая.
вход
Два аргумента для функции / stdin (ваш выбор)
Во-первых, это набор символов, например, «ABCDE» или ['A', 'B', 'C', 'D', 'E'] - ваш выбор формата, будь то строка, набор, список, поток или что-либо идиоматическое для выбранного языка. Символы будут заданы из набора [A-Za-z0-9], без дубликатов (поэтому максимальный размер входного набора символов равен 62). Они не будут упорядочены в ( так что вы можете получить "yX4i9A" также для случая с 6 символами).
Второй аргумент - целое число, указывающее количество символов на одной карточке. Это будет <= чем размер набора символов.
Выход
Выведите несколько строк, разделенных символами новой строки, каждая из которых содержит символы для одной карточки.
Примеры
ABC
2
>>>>
AB
BC
AC
Или
ABCDEFG
3
>>>>
ABC
BDE
CEF
BFG
AEG
CDG
ADF
Или
ABCDE
4
>>>>
ABCD
Советы
- Количество выпущенных карт не может быть больше количества различных символов, и во многих комбинациях оно будет значительно меньше.
- Возможно, вы захотите прочитать некоторые математические знания, если вам нужна помощь с математической стороной проблемы
Это мое первое испытание для игры в гольф, поэтому, пожалуйста, простите возможные проблемы с форматированием / стилем - я постараюсь исправить ошибки, если вы укажете их в комментариях.
('abcdefghijklmnopqrstu', 5)
-> ['abcde', 'afghi', 'ajklm', 'anopq', 'arstu', 'bfjnr', 'bgkpt', 'bhlou', 'bimqs', 'cfkqu', 'cgjos', 'chmpr', 'cilnt', 'dfmot', 'dglqr', 'dhkns', 'dijpu', 'eflps', 'egmnu', 'ehjqt', 'eikor']
или другое 21-карточное рабочее решение. (Обратите внимание, что это проективная конечная плоскость порядка 4).