Voici un puzzle de programmation pour vous:
À partir d'une liste de paires de chaînes et de numéros correspondants, par exemple [[A,37],[B,27],[C,21],[D,11],[E,10],[F,9],[G,3],[H,2]]
, affichez une autre liste qui contiendra uniquement les chaînes de la manière suivante:
Le nombre total de toute chaîne doit être exactement égal à son nombre correspondant dans les données d'entrée.
Aucune chaîne ne doit être répétée de manière adjacente dans la séquence, et chaque chaîne doit apparaître dans la liste de sortie.
La sélection de la chaîne suivante doit être effectuée de manière aléatoire tant qu'ils ne dépassent pas deux règles. Chaque solution doit avoir une probabilité non nulle d'être choisie.
Si aucune combinaison n'est possible, la sortie doit être juste
0
.
La liste d'entrée peut être donnée dans n'importe quel ordre (trié ou non trié) et les chaînes de la liste peuvent être de n'importe quelle longueur.
Exemple de sortie pour l'entrée d'échantillon ci-dessus 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]
Échantillon d'entrée 2:
[[A,6],[B,1],[C,1]]
Sortie pour la deuxième entrée:
0
car aucune liste n'est possible sur la base de règles.
Exemple d'entrée 3:
[[AC,3],[BD,2]]
sortie valide: [AC,BD,AC,BD,AC]
sortie invalide: [AC,BD,AC,AC,BD]
Si des éclaircissements supplémentaires sont nécessaires, n'hésitez pas à me le dire dans les commentaires et j'agirai rapidement en conséquence.
C'est le code-golf , donc le code le plus court en octets pour chaque langue gagne!