Algebra Steenrod jest ważną algebrą, która pojawia się w topologii algebraicznej. Algebra Steenroda jest generowana przez operatory zwane „kwadratami Steenroda”, po jednym dla każdej dodatniej liczby całkowitej i. Istnieje podstawa algebry Steenroda składającej się z „dopuszczalnych jednomianów” w operacjach kwadratu. Naszym celem jest wygenerowanie tej podstawy.
Sekwencja liczb całkowitych dodatnich nazywana jest dopuszczalną, jeśli każda liczba całkowita jest co najmniej dwa razy większa od następnej. Na przykład [7,2,1]jest to dopuszczalne, ponieważ i . Z drugiej strony [3,2]nie jest dopuszczalne, ponieważ . (W topologii zapisywalibyśmy sekwencję [7,2,1] ).
Stopień sekwencji jest sumą go za wpisy. Na przykład stopień [7,2,1]wynosi . Nadmiar od dopuszczalnego sekwencji jest pierwszym elementem minus suma pozostałe elementy, to [7,2,1]jest nadmiar .
Zadanie
Napisz program, który bierze parę dodatnich liczb całkowitych (d,e)i wyświetla zbiór wszystkich dopuszczalnych sekwencji stopni di nadwyżek mniejszych lub równych e. Wyjście jest zbiorem, więc kolejność dopuszczalnych sekwencji nie ma znaczenia.
Przykłady:
Input: 3,1
Output: [[2,1]]
Tutaj szukamy dopuszczalnych sekwencji o sumie 3. Istnieją dwie opcje, [3]i [2,1]. ( [1,1,1]i [1,2]mają sumę 3, ale nie są dopuszczalne). Nadmiar [3]wynosi 3, a nadmiar [2,1]wynosi . Zatem jedyną sekwencją z nadmiarem jest [2,1].
Input: 6, 6
Output: [[6], [5, 1], [4, 2]] (or any reordering, e.g., [[5,1],[4,2],[6]])
Ponieważ nadwyżka jest zawsze mniejsza lub równa stopniowi, nie mamy nadwyżki. Tak więc, jesteśmy po prostu staramy się znaleźć wszystkie dopuszczalne sekwencje stopni 6. opcje są [6], [5, 1]i [4, 2]. (Mają one więcej niż , , a ).
Input: 10, 5
Output: [[7,3], [7,2,1], [6,3,1]]
Dopuszczalne sekwencje stopnia 10 to:
[[10], [9,1], [8,2], [7,3], [7,2,1], [6,3,1]]
Mają one odpowiednio , , , , i , więc wszystkie trzy ostatnie działają.
Punktacja
To jest kod golfowy: wygrywa najkrótsze rozwiązanie w bajtach.
Przypadki testowe:
Wszelkie zmiany kolejności danych wyjściowych są równie dobre, więc dla danych wejściowych (3, 3), wyjściowych [[3],[2,1]]lub [[2,1],[3]]są równie akceptowalne (jednak [[1,2],[3]]nie są).
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]]