L'algèbre de Steenrod est une algèbre importante qui apparaît dans la topologie algébrique. L'algèbre de Steenrod est générée par des opérateurs appelés «carrés de Steenrod», un existe pour chaque entier positif i. Il y a une base pour l'algèbre de Steenrod consistant en "monômes admissibles" dans les opérations de quadrature. Notre objectif est de générer cette base.
Une séquence d'entiers positifs est dite admissible si chaque entier est au moins deux fois le suivant. Ainsi, par exemple, [7,2,1]
est admissible parce que et . En revanche, [3,2]
n'est pas admissible car . (En topologie, nous écririons pour la séquence [7,2,1]
).
Le degré d'une séquence est le total de ses entrées. Ainsi, par exemple, le degré de [7,2,1]
est . L' excès d'une séquence admissible est le premier élément , moins le total des éléments restants, de sorte que [7,2,1]
a excès .
Tâche
Écrivez un programme qui prend une paire d'entiers positifs (d,e)
et génère l'ensemble de toutes les séquences admissibles de degré d
et d'excès inférieur ou égal à e
. La sortie est un ensemble donc l'ordre des séquences admissibles n'a pas d'importance.
Exemples:
Input: 3,1
Output: [[2,1]]
Ici, nous recherchons des séquences admissibles avec un total de 3. Il y a deux options, [3]
et [2,1]
. ( [1,1,1]
et [1,2]
avoir la somme 3 mais ne sont pas admissibles). L'excès de [3]
est égal à 3 et l'excès de [2,1]
est . Ainsi, la seule séquence avec un excès est [2,1]
.
Input: 6, 6
Output: [[6], [5, 1], [4, 2]] (or any reordering, e.g., [[5,1],[4,2],[6]])
Étant donné que l'excès est toujours inférieur ou égal au degré, nous n'avons aucune condition d'excès. Ainsi, nous essayons simplement de trouver toutes les séquences admissibles de degré 6. Les options sont [6]
, [5, 1]
et [4, 2]
. (Ceux-ci ont un excès de , et )
Input: 10, 5
Output: [[7,3], [7,2,1], [6,3,1]]
Les séquences admissibles de degré 10 sont:
[[10], [9,1], [8,2], [7,3], [7,2,1], [6,3,1]]
Ceux-ci ont un excès de , , , , et respectivement, donc les trois derniers fonctionnent tous.
Notation
Voici le code golf: la solution la plus courte en octets gagne.
Cas de test:
Tout réarrangement de la sortie est également bon, donc pour l'entrée (3, 3)
, les sorties [[3],[2,1]]
ou [[2,1],[3]]
sont également acceptables (mais ce [[1,2],[3]]
n'est pas le cas).
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]]