Алгебра Стіенрода - важлива алгебра, що виходить в алгебраїчній топології. Алгебра Стіродрода генерується операторами, які називаються "квадрати Стіенрода", по одному існує для кожного натурального числа i. Існує основа алгебри Стіенрода, що складається з "допустимих одночленів" в операціях квадратування. Наша мета створити цю основу.
Послідовність натуральних чисел називається допустимою, якщо кожне ціле число є щонайменше вдвічі наступним. Так, наприклад [7,2,1]
, допустимо, тому що і . З іншого боку, це неприпустимо, оскільки . (У топології ми запишемо для послідовності ).[3,2]
[7,2,1]
Ступінь послідовності є сумою її записів. Так, наприклад, ступінь [7,2,1]
становить . Перевищення припустимої послідовності є першим елементом мінус сума інших елементів, так що має надлишок .[7,2,1]
Завдання
Напишіть програму, яка приймає пару натуральних чисел (d,e)
і виводить набір усіх допустимих послідовностей ступенів d
і перевищень менше або дорівнює e
. Вихід - це безліч, тому порядок допустимих послідовностей не має значення.
Приклади:
Input: 3,1
Output: [[2,1]]
Тут ми шукаємо допустимі послідовності із загальною кількістю 3. Є два варіанти [3]
та [2,1]
. ( [1,1,1]
і [1,2]
мають суму 3, але вони неприпустимі). Надлишок [3]
становить 3, а надлишок [2,1]
- . Таким чином, тільки послідовність з надлишком є .[2,1]
Input: 6, 6
Output: [[6], [5, 1], [4, 2]] (or any reordering, e.g., [[5,1],[4,2],[6]])
Оскільки перевищення завжди менше або дорівнює ступеню, ми не маємо надлишкової умови. Таким чином, ми просто намагаємося знайти всі допустимі послідовності ступеня 6. Параметри є [6]
, [5, 1]
і [4, 2]
. (Вони мають перевищення , та )
Input: 10, 5
Output: [[7,3], [7,2,1], [6,3,1]]
Допустимими послідовностями ступеня 10 є:
[[10], [9,1], [8,2], [7,3], [7,2,1], [6,3,1]]
Вони мають перевищення , , , , і відповідно, тому останні три працюють.
Оцінка балів
Це код гольфу: найкоротше рішення в байтах.
Тестові приклади:
Будь-яке упорядкування результатів однаково добре, тому для введення (3, 3)
, виведення [[3],[2,1]]
або [[2,1],[3]]
однаково прийнятного (однак, [[1,2],[3]]
це не так).
Input: 1, 1
Output: [[1]]
Input: 3, 3
Output: [[2,1], [3]]
Input: 3, 1
Output: [[2,1]]
Input: 6, 6
Output: [[6], [5, 1], [4, 2]]
Input: 6, 4
Output: [[5,1], [4,2]]
Input: 6, 1
Output: []
Input: 7, 7
Output: [[7], [6,1], [4,2,1], [5,2]]
Input: 7,1
Output: [[4,2,1]]
Input: 10, 10
Output: [[10], [9,1], [7,2,1], [6,3,1], [8,2], [7,3]]
Input: 10, 5
Output: [[7,3], [7,2,1], [6,3,1]]
Input: 26, 4
Output: [15, 7, 3, 1]
Input: 26, 6
Output: [[16, 7, 2, 1], [16, 6, 3, 1], [15, 7, 3, 1], [16, 8, 2], [16, 7, 3]]