Вот вам загадка программирования:
Например, при наличии списка пар строк и соответствующих чисел [[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]
Если необходимы дальнейшие разъяснения, пожалуйста, не стесняйтесь, сообщите мне в комментариях, и я буду действовать незамедлительно.
Это код-гольф , поэтому выигрывает самый короткий код в байтах для каждого языка!