introduction
Dobble / SpotIt est un jeu de cartes, où les gens doivent repérer le même symbole sur une paire de cartes dans les plus brefs délais, l'indiquer et passer à la paire suivante. Chaque carte a plusieurs symboles (8 en version normale), mais exactement un est commun à chaque paire de cartes.
Exemple d'une copie physique du jeu:
Défi
Écrivez un programme qui, compte tenu de l'ensemble de symboles (caractères ascii simples) et du nombre de symboles sur une seule carte, produira des cartes de liste de sortie avec des symboles pour chaque carte. Il existe évidemment de nombreuses combinaisons équivalentes, votre programme n'a qu'à écrire l'une des combinaisons qui produit le plus grand nombre de cartes pour une entrée donnée.
C'est un code-golf, donc plus court le code, mieux c'est.
Il serait également formidable que le calcul se termine avant la mort thermique de l'univers pour le cas le plus compliqué.
Contribution
Deux arguments pour fonctionner / stdin (votre choix)
Le premier étant une collection de symboles, quelque chose comme «ABCDE» ou [«A», «B», «C», «D», «E»] - votre choix de format, que ce soit une chaîne, un ensemble, une liste, un flux , ou tout ce qui est idiomatique pour la langue de votre choix. Les caractères seront donnés à partir de l'ensemble de [A-Za-z0-9], pas de doublons (donc la taille maximale de l'ensemble de symboles d'entrée est 62). Ils ne seront pas nécessairement classés dans vous pouvez donc également obtenir "yX4i9A" pour le boîtier à 6 symboles).
Le deuxième argument est un entier, indiquant la quantité de symboles sur une seule carte. Ce sera <= que la taille du jeu de symboles.
Production
Imprimez plusieurs lignes séparées par des retours à la ligne, chacune d'entre elles contenant des symboles pour une seule carte.
Exemples
ABC
2
>>>>
AB
BC
AC
Ou
ABCDEFG
3
>>>>
ABC
BDE
CEF
BFG
AEG
CDG
ADF
Ou
ABCDE
4
>>>>
ABCD
Conseils
- Le nombre de cartes produites ne peut pas être supérieur au nombre de symboles distincts et dans de nombreuses combinaisons, il sera considérablement plus petit
- Vous voudrez peut-être lire un peu de fond en mathématiques si vous avez besoin d'aide avec le côté mathématique du problème
Ceci est mon premier défi de golf de code, alors veuillez pardonner les éventuels problèmes de formatage / style - je vais essayer de corriger les erreurs si vous les pointez dans les commentaires.
('abcdefghijklmnopqrstu', 5)
-> ['abcde', 'afghi', 'ajklm', 'anopq', 'arstu', 'bfjnr', 'bgkpt', 'bhlou', 'bimqs', 'cfkqu', 'cgjos', 'chmpr', 'cilnt', 'dfmot', 'dglqr', 'dhkns', 'dijpu', 'eflps', 'egmnu', 'ehjqt', 'eikor']
ou une autre solution de travail à 21 cartes. (Notez que c'est le plan fini projectif d'ordre 4).