Вступ
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).