Ось головоломка програмування для вас:
Наприклад [[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]
Якщо потрібне додаткове роз'яснення, будь ласка, не соромтесь сказати мені у коментарях, і я негайно діятиму відповідно до цього.
Це код-гольф , тому найкоротший код у байтах для кожної мови виграє!