Introducción
Dobble / SpotIt es un juego de cartas, donde las personas deben detectar el mismo símbolo en un par de cartas en el menor tiempo posible, indicarlo y pasar al siguiente par. Cada tarjeta tiene múltiples símbolos (8 en la versión normal), pero exactamente uno es común entre cada par de tarjetas.
Ejemplo de copia física del juego:
Desafío
Escriba un programa, que dado el conjunto de símbolos (caracteres ascii individuales) y el número de símbolos en una sola tarjeta producirá tarjetas de listado de salida con símbolos para cada tarjeta. Obviamente, hay muchas combinaciones equivalentes, su programa solo tiene que escribir cualquiera de las combinaciones que produzca la mayor cantidad de tarjetas para la entrada dada.
Es un código de golf, así que más corto el código, mejor.
También sería genial si el cálculo terminara antes de la muerte por calor del universo para el caso más complicado.
Entrada
Dos argumentos para funcionar / stdin (su elección)
El primero de ellos es la colección de símbolos, algo así como 'ABCDE "o [' A ',' B ',' C ',' D ',' E ']: su elección de formato, ya sea cadena, conjunto, lista, secuencia , o lo que sea idiomático para el idioma de elección. Los caracteres se darán del conjunto de [A-Za-z0-9], sin duplicados (por lo que el tamaño máximo del conjunto de símbolos de entrada es 62). No se ordenarán necesariamente en ( para que pueda obtener "yX4i9A" también para el caso de 6 símbolos).
El segundo argumento es un número entero, que indica la cantidad de símbolos en una sola tarjeta. Será <= que el tamaño del conjunto de símbolos.
Salida
Imprima varias líneas separadas por nuevas líneas, cada una de las cuales contiene símbolos para una sola tarjeta.
Ejemplos
ABC
2
>>>>
AB
BC
AC
O
ABCDEFG
3
>>>>
ABC
BDE
CEF
BFG
AEG
CDG
ADF
O
ABCDE
4
>>>>
ABCD
Consejos
- El número de cartas producidas no puede ser mayor que la cantidad de símbolos distintos y en muchas combinaciones será considerablemente menor
- Es posible que desee leer algunos antecedentes matemáticos si necesita ayuda con el lado matemático del problema
Este es mi primer desafío de código de golf, así que perdone posibles problemas con el formato / estilo. Intentaré corregir los errores si los señala en los comentarios.
('abcdefghijklmnopqrstu', 5)
-> ['abcde', 'afghi', 'ajklm', 'anopq', 'arstu', 'bfjnr', 'bgkpt', 'bhlou', 'bimqs', 'cfkqu', 'cgjos', 'chmpr', 'cilnt', 'dfmot', 'dglqr', 'dhkns', 'dijpu', 'eflps', 'egmnu', 'ehjqt', 'eikor']
o alguna otra solución de trabajo de 21 tarjetas. (Tenga en cuenta que este es el plano finito proyectivo de orden 4).