Ecco un puzzle di programmazione per te:
Dato un elenco di coppie di stringhe e numeri corrispondenti, ad esempio [[A,37],[B,27],[C,21],[D,11],[E,10],[F,9],[G,3],[H,2]]
, genera un altro elenco che avrà solo le stringhe nel modo seguente:
Il conteggio totale di qualsiasi stringa deve essere esattamente uguale al suo numero corrispondente nei dati di input.
Nessuna stringa deve essere ripetuta adiacenti nella sequenza e ogni stringa deve apparire nell'elenco di output.
La selezione della stringa successiva dovrebbe essere fatta in modo casuale purché non si infrangano sopra le due regole. Ogni soluzione dovrebbe avere una probabilità diversa da zero di essere scelta.
Se non è possibile alcuna combinazione, l'output dovrebbe essere giusto
0
.
L'elenco di input può essere fornito in qualsiasi ordine (ordinato o non ordinato) e le stringhe nell'elenco possono essere di qualsiasi lunghezza.
Output di esempio per l'ingresso di esempio sopra 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]
Ingresso campione 2:
[[A,6],[B,1],[C,1]]
Uscita per secondo ingresso:
0
poiché nessun elenco possibile in base alle regole.
Esempio di input 3:
[[AC,3],[BD,2]]
uscita valida: [AC,BD,AC,BD,AC]
uscita non valida: [AC,BD,AC,AC,BD]
Se sono necessari ulteriori chiarimenti, per favore, non esitate a dirmelo nei commenti e agirò prontamente di conseguenza.
Questo è code-golf , quindi vince il codice più breve in byte per ogni lingua!