L'algebra di Steenrod è un'importante algebra che emerge dalla topologia algebrica. L'algebra di Steenrod è generata da operatori chiamati "quadrati di Steenrod", ne esiste uno per ogni numero intero i. C'è una base per l'algebra di Steenrod che consiste in "monomi ammissibili" nelle operazioni di squadratura. Il nostro obiettivo è generare questa base.
Una sequenza di numeri interi positivi viene definita ammissibile se ogni numero intero è almeno il doppio di quello successivo. Ad esempio, [7,2,1]
è ammissibile perché e . D'altra parte, non è ammissibile perché . (In topologia dovremmo scrivere per la sequenza ).[3,2]
[7,2,1]
Il grado di una sequenza è il totale delle sue voci. Ad esempio, il grado di [7,2,1]
è . L' eccesso di una sequenza ammissibile è il primo elemento meno il totale degli elementi rimanenti, quindi ha un eccesso di .[7,2,1]
Compito
Scrivi un programma che accetta una coppia di numeri interi positivi (d,e)
e genera l'insieme di tutte le sequenze ammissibili di grado d
e eccesso inferiore o uguale a e
. L'output è un set quindi l'ordine delle sequenze ammissibili non ha importanza.
Esempi:
Input: 3,1
Output: [[2,1]]
Qui stiamo cercando sequenze ammissibili per un totale di 3. Esistono due opzioni [3]
e [2,1]
. ( [1,1,1]
e [1,2]
hanno la somma 3 ma non sono ammessi). L'eccesso di [3]
è 3 e l'eccesso di [2,1]
è . Pertanto, l'unica sequenza con eccesso di è .[2,1]
Input: 6, 6
Output: [[6], [5, 1], [4, 2]] (or any reordering, e.g., [[5,1],[4,2],[6]])
Poiché l'eccesso è sempre inferiore o uguale al grado, non abbiamo alcuna condizione in eccesso. Così, stiamo solo cercando di trovare tutte le sequenze ammissibili di grado 6. Le opzioni sono [6]
, [5, 1]
e [4, 2]
. (Questi hanno un eccesso di , e )
Input: 10, 5
Output: [[7,3], [7,2,1], [6,3,1]]
Le sequenze ammissibili di grado 10 sono:
[[10], [9,1], [8,2], [7,3], [7,2,1], [6,3,1]]
Questi hanno un eccesso di , , , , e rispettivamente, quindi gli ultimi tre funzionano tutti.
punteggio
Questo è il codice golf: vince la soluzione più breve in byte.
Casi test:
Qualsiasi riordino dell'uscita è ugualmente buono, quindi per input (3, 3)
, output [[3],[2,1]]
o [[2,1],[3]]
sono ugualmente accettabili (comunque [[1,2],[3]]
non lo è).
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]]