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]]
la source
Réponses:
05AB1E ,
1612 octets4 octets enregistrés grâce à Grimy
Essayez-le en ligne!
Explication
la source
ćsO-
est le intégréÆ
.À@¨
Peut également l' être¦@
.Wolfram Language (Mathematica) ,
6762 octetsEssayez-le en ligne!
-4 octets par @attinat
IntegerPartitions@d
: Obtenir toutes les listes d'entiers sommant àd
Cases[,...]
: Filtrer par la condition suivante:2#& @@# - d <= e &&
: Deux fois le premier élément moins la somme est inférieure àe
, et ...Max@Ratios@#<=.5
: Les ratios des éléments successifs de la liste sont tous inférieurs à 1/2.Parce qu'il
e
est inférieur à 0,5, nous pouvons transformer cela en une inégalité chaînée.Pour quelques octets supplémentaires, c'est beaucoup plus rapide: essayez-le en ligne!
la source
Gelée ,
1615 octets-1 grâce à Erik l'Outgolfer (un ajustement intelligent de la vérification permettant un seul filtre)
Un lien dyadique acceptant un entier positif
d
, à gauche et un entier positife
, à droite qui donne une liste de listes d'entiers positifs.Essayez-le en ligne!(le pied de page met en forme les résultats pour éviter la liste, le formatage de liste implicite que Jelly fait comme un programme complet)
Comment?
la source
Haskell ,
595854 octets1 octet économisé grâce à nimi
4 octets économisés grâce à xnor
Essayez-le en ligne!
la source
#
directement: Essayez-le en ligne!JavaScript (V8) ,
88 8781 octetsPrend l'entrée comme
(e)(d)
. Imprime les séquences dans STDOUT.Essayez-le en ligne!
Commenté
la source
Pyth , 23 octets
Essayez-le en ligne!
la source
Python 3 ,
213 octetsCompréhension des listes géantes. Ce n'est probablement pas la meilleure façon de le faire, mais je ne sais pas comment ignorer les instructions if
Python 3 , 172 octets
Essayez-le en ligne!
Selon les révisions de @Jonas Ausevicius
la source
all
peuvent également prendre un générateur, vous pouvez donc simplement le faire à laall(...)
place deall([...])
. Enfin, puisque votre soumission est une fonction totalement anonyme, vous n'êtes pas pénalisé pour l'affectation (f=
) et pouvez donc la déduire de votre score (-2 octets).[*(...)]
au lieu delist(...)
qui enregistre généralement un octet mais dans votre cas enregistre 2 car il vous permet également de supprimer un espace.[*filter(...)]
. Bienvenue également :)Fusain , 42 octets
Essayez-le en ligne! Le lien est vers la version détaillée du code. Explication:
Créez d'abord une liste de listes à partir de
[1]..[d]
.Pour chaque liste, créez de nouvelles listes en préfixant tous les numéros du premier nombre doublé jusqu'à
d
et ajoutez ces listes à la liste des listes à traiter. Cela garantit que toutes les séquences admissibles contenant des nombres non supérieurs à ceuxd
créés sont créées.N'afficher que les listes dont le degré est
d
et l'excès n'est pas supérieur àe
. (La somme du degré et de l'excès est égale au double du premier nombre de la liste.)la source
Python 3 , 156 octets
prend
d,e
en entrée; affiche la liste des tuplesSemblable à la réponse @OrangeCherries et à l'aide des commentaires; mais plus d'octets enregistrés
Essayez-le en ligne!
la source
Gelée , 18 octets
Essayez-le en ligne!
la source
Rubis , 78 octets
Essayez-le en ligne!
la source