Oto puzzle programowania dla Ciebie:
Biorąc na przykład listę par ciągów znaków i odpowiadających im liczb, [[A,37],[B,27],[C,21],[D,11],[E,10],[F,9],[G,3],[H,2]]
wypisz inną listę, która będzie miała tylko ciągi znaków w następujący sposób:
Całkowita liczba dowolnego łańcucha powinna być dokładnie równa odpowiadającej mu liczbie w danych wejściowych.
Żaden ciąg nie powinien być powtarzany w sekwencji obok siebie, a każdy ciąg powinien pojawiać się na liście wyników.
Wyboru następnego ciągu należy dokonać losowo, o ile nie przekroczą one dwóch reguł. Każde rozwiązanie powinno mieć niezerowe prawdopodobieństwo wyboru.
Jeśli żadna kombinacja nie jest możliwa, wynik powinien być sprawiedliwy
0
.
Lista wejściowa może być podana w dowolnej kolejności (posortowana lub nieposortowana), a ciągi na liście mogą mieć dowolną długość.
Przykładowy wynik dla powyższego przykładowego wejścia 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]
Próbka wejściowa 2:
[[A,6],[B,1],[C,1]]
Wyjście dla drugiego wejścia:
0
ponieważ żadna lista nie jest możliwa na podstawie reguł.
Przykładowe wejście 3:
[[AC,3],[BD,2]]
prawidłowe wyjście: [AC,BD,AC,BD,AC]
nieprawidłowe wyjście: [AC,BD,AC,AC,BD]
Jeśli potrzebne są dalsze wyjaśnienia, proszę nie wahaj się powiedzieć mi w komentarzach, a niezwłocznie podejmę odpowiednie działania.
To jest golf golfowy , więc wygrywa najkrótszy kod w bajtach dla każdego języka!