Introdução
Dobble / SpotIt é um jogo de cartas, no qual as pessoas precisam identificar o mesmo símbolo no par de cartas no menor tempo possível, indicá-lo e passar para o próximo par. Cada cartão possui vários símbolos (8 na versão normal), mas exatamente um é comum entre cada par de cartões.
Exemplo da cópia física do jogo:
Desafio
Escreva um programa cujo conjunto de símbolos (caracteres simples ASCII) e o número de símbolos no cartão único produzirão cartões de listagem de saída com símbolos para cada cartão. Obviamente, existem muitas combinações equivalentes, seu programa apenas precisa escrever qualquer combinação que produza a maior quantidade de cartões para determinada entrada.
É um código de golfe, então, quanto mais curto o código, melhor.
Também seria ótimo se a computação terminasse antes da morte por calor do universo, para os casos mais complicados.
Entrada
Dois argumentos para funcionar / stdin (sua escolha)
O primeiro deles é a coleção de símbolos, algo como 'ABCDE "ou [' A ',' B ',' C ',' D ',' E '] - sua escolha de formato, seja string, conjunto, lista, fluxo ou o que for idiomático para o idioma de escolha. Os caracteres serão fornecidos no conjunto de [A-Za-z0-9], sem duplicatas (o tamanho máximo do conjunto de símbolos de entrada é 62). Eles não serão solicitados necessariamente em ( para que você possa obter "yX4i9A" também para caixa com 6 símbolos).
O segundo argumento é inteiro, indicando a quantidade de símbolos no cartão único. Será menor que o tamanho do conjunto de símbolos.
Resultado
Imprima várias linhas separadas por novas linhas, cada uma delas contendo símbolos para um único cartão.
Exemplos
ABC
2
>>>>
AB
BC
AC
Ou
ABCDEFG
3
>>>>
ABC
BDE
CEF
BFG
AEG
CDG
ADF
Ou
ABCDE
4
>>>>
ABCD
Dicas
- O número de cartões produzidos não pode ser maior que a quantidade de símbolos distintos e, em muitas combinações, será consideravelmente menor
- Você pode ler alguns conhecimentos matemáticos se precisar de ajuda com o lado matemático do problema
Este é o meu primeiro desafio de golfe com código, por isso, perdoe possíveis problemas com formatação / estilo - tentarei corrigir erros se você os apontar nos comentários.
('abcdefghijklmnopqrstu', 5)
-> ['abcde', 'afghi', 'ajklm', 'anopq', 'arstu', 'bfjnr', 'bgkpt', 'bhlou', 'bimqs', 'cfkqu', 'cgjos', 'chmpr', 'cilnt', 'dfmot', 'dglqr', 'dhkns', 'dijpu', 'eflps', 'egmnu', 'ehjqt', 'eikor']
ou alguma outra solução de trabalho com 21 placas. (Observe que este é o plano finito projetivo da ordem 4).