Вот вам загадка программирования:
Например, при наличии списка пар строк и соответствующих чисел [[A,37],[B,27],[C,21],[D,11],[E,10],[F,9],[G,3],[H,2]]
выведите другой список, в котором будут только строки следующим образом:
Общее количество любой строки должно быть точно равно ее соответствующему числу во входных данных.
Никакая строка не должна повторяться рядом в последовательности, и каждая строка должна появляться в списке вывода.
Выбор следующей строки должен выполняться случайным образом, если они не нарушают два правила. Каждое решение должно иметь ненулевую вероятность быть выбранным.
Если комбинация невозможна, вывод должен быть просто
0
.
Список ввода может быть задан в любом порядке (отсортирован или не отсортирован), а строки в списке могут иметь любую длину.
Пример вывода для приведенного выше примера ввода 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]
Пример ввода 2:
[[A,6],[B,1],[C,1]]
Выход для второго входа:
0
так как список невозможен по правилам.
Пример ввода 3:
[[AC,3],[BD,2]]
действительный вывод: [AC,BD,AC,BD,AC]
неверный вывод: [AC,BD,AC,AC,BD]
Если необходимы дальнейшие разъяснения, пожалуйста, не стесняйтесь, сообщите мне в комментариях, и я буду действовать незамедлительно.
Это код-гольф , поэтому выигрывает самый короткий код в байтах для каждого языка!