Aqui está um quebra-cabeça de programação para você:
Dada uma lista de pares de cadeias e números correspondentes, por exemplo [[A,37],[B,27],[C,21],[D,11],[E,10],[F,9],[G,3],[H,2]]
, produza outra lista que terá apenas as cadeias da seguinte maneira:
A contagem total de qualquer sequência deve ser exatamente igual ao seu número correspondente nos dados de entrada.
Nenhuma sequência deve ser repetida adjacentemente na sequência e cada sequência deve aparecer na lista de saída.
A seleção da próxima string deve ser feita aleatoriamente, desde que não quebrem acima de duas regras. Cada solução deve ter uma probabilidade diferente de zero de ser escolhida.
Se nenhuma combinação for possível, a saída deve ser justa
0
.
A lista de entrada pode ser fornecida em qualquer ordem (classificada ou não) e as seqüências de caracteres na lista podem ter qualquer comprimento.
Saída de amostra para a entrada de amostra acima 1
[A,B,A,B,A,B,A,B,A,B,A,B,A,B,A,B,A,B,A,B,A,B,A,B,A,B,A,B,A,B,A,B,A,B,A,B,A,B,A,B,A,B,A,B,A,B,A,B,A,B,A,B,A,B,A,C,A,C,A,C,A,C,A,C,A,C,A,C,A,C,A,C,A,C,D,C,D,C,D,C,D,C,D,C,D,C,D,C,D,C,D,C,D,C,D,C,E,F,E,F,E,F,E,F,E,F,E,F,E,F,E,F,E,F,E,G,H,G,H,G]
Amostra de entrada 2:
[[A,6],[B,1],[C,1]]
Saída para segunda entrada:
0
pois nenhuma lista é possível com base em regras.
Entrada de amostra 3:
[[AC,3],[BD,2]]
saída válida: [AC,BD,AC,BD,AC]
saída inválida: [AC,BD,AC,AC,BD]
Se mais esclarecimentos forem necessários, não hesite em me informar nos comentários e eu agirei prontamente.
Isso é código-golfe , então o código mais curto em bytes para cada idioma vence!