introduzione
Dobble / SpotÈ un gioco di carte, in cui le persone devono individuare lo stesso simbolo sulla coppia di carte nel minor tempo possibile, indicarlo e passare alla coppia successiva. Ogni carta ha più simboli (8 nella versione normale), ma esattamente uno è comune tra ogni coppia di carte.
Esempio dalla copia fisica del gioco:
Sfida
Scrivere un programma che fornisca una serie di simboli (singoli caratteri ASCII) e il numero di simboli su una singola scheda produrrà schede di elenco di output con simboli per ogni carta. Esistono ovviamente molte combinazioni equivalenti, il tuo programma deve solo scrivere una qualsiasi delle combinazioni che produce il maggior numero di carte per un dato input.
È un codice-golf, quindi più breve il codice, meglio.
Sarebbe anche bello se il calcolo finisse prima della morte per calore dell'universo per il caso più complicato.
Ingresso
Due argomenti per function / stdin (la tua scelta)
Prima di tutto si tratta di una raccolta di simboli, qualcosa come 'ABCDE "o [' A ',' B ',' C ',' D ',' E '] - la tua scelta di formato, sia esso stringa, set, elenco, stream o qualsiasi altra cosa sia idiomatica per la lingua scelta. I caratteri saranno dati dall'insieme di [A-Za-z0-9], nessun duplicato (quindi la dimensione massima dell'insieme dei simboli di input è 62). Non saranno necessariamente ordinati in ( così puoi ottenere "yX4i9A" anche per la custodia a 6 simboli).
Il secondo argomento è un numero intero, che indica la quantità di simboli su una singola carta. Sarà <= della dimensione del set di simboli.
Produzione
Stampa più righe separate da newline, ognuna contenente simboli per singola scheda.
Esempi
ABC
2
>>>>
AB
BC
AC
O
ABCDEFG
3
>>>>
ABC
BDE
CEF
BFG
AEG
CDG
ADF
O
ABCDE
4
>>>>
ABCD
suggerimenti
- Il numero di carte prodotte non può essere maggiore della quantità di simboli distinti e in molte combinazioni sarà considerevolmente più piccolo
- Potresti voler leggere Alcuni retroscena di matematica se hai bisogno di aiuto con il lato matematico del problema
Questa è la mia prima sfida per il golf del codice, quindi ti prego di perdonare possibili problemi con la formattazione / lo stile: cercherò di correggere gli errori se li punti nei commenti.
('abcdefghijklmnopqrstu', 5)
-> ['abcde', 'afghi', 'ajklm', 'anopq', 'arstu', 'bfjnr', 'bgkpt', 'bhlou', 'bimqs', 'cfkqu', 'cgjos', 'chmpr', 'cilnt', 'dfmot', 'dglqr', 'dhkns', 'dijpu', 'eflps', 'egmnu', 'ehjqt', 'eikor']
o qualche altra soluzione funzionante con 21 carte. (Notare che questo è il piano finito proiettivo di ordine 4).