El álgebra de Steenrod es un álgebra importante que surge en la topología algebraica. El álgebra de Steenrod es generado por operadores llamados "cuadrados de Steenrod", existe uno para cada entero positivo i. Hay una base para el álgebra de Steenrod que consiste en "monomios admisibles" en las operaciones de cuadratura. Nuestro objetivo es generar esta base.
Una secuencia de enteros positivos se llama admisible si cada entero es al menos dos veces el siguiente. Entonces, por ejemplo, [7,2,1]
es admisible porque y . Por otro lado, [3,2]
no es admisible porque . (En topología escribiríamos para la secuencia [7,2,1]
).
El grado de una secuencia es el total de sus entradas. Entonces, por ejemplo, el grado de [7,2,1]
es . El exceso de una secuencia admisible es el primer elemento menos el total de los elementos restantes, por lo que [7,2,1]
tiene un exceso de .
Tarea
Escriba un programa que tome un par de enteros positivos (d,e)
y genere el conjunto de todas las secuencias admisibles de grado d
y exceso menor o igual que e
. La salida es un conjunto, por lo que el orden de las secuencias admisibles no importa.
Ejemplos:
Input: 3,1
Output: [[2,1]]
Aquí estamos buscando secuencias admisibles con un total 3. Hay dos opciones, [3]
y [2,1]
. ( [1,1,1]
y [1,2]
tienen suma 3 pero no son admisibles). El exceso de [3]
es 3 y el exceso de [2,1]
es . Por lo tanto, la única secuencia con exceso de es [2,1]
.
Input: 6, 6
Output: [[6], [5, 1], [4, 2]] (or any reordering, e.g., [[5,1],[4,2],[6]])
Dado que el exceso siempre es menor o igual que el grado, no tenemos condición de exceso. Por lo tanto, sólo estamos tratando de encontrar todas las secuencias admisibles de grado 6. Las opciones son [6]
, [5, 1]
y [4, 2]
. (Estos tienen un exceso de , y ).
Input: 10, 5
Output: [[7,3], [7,2,1], [6,3,1]]
Las secuencias admisibles de grado 10 son:
[[10], [9,1], [8,2], [7,3], [7,2,1], [6,3,1]]
Estos tienen un exceso de , , , , y respectivamente, por lo que los tres últimos funcionan.
Puntuación
Este es el código de golf: la solución más corta en bytes gana.
Casos de prueba:
Cualquier reordenación de la salida es igualmente buena, por lo que para entrada (3, 3)
, salidas [[3],[2,1]]
o [[2,1],[3]]
son igualmente aceptables (sin embargo, [[1,2],[3]]
no lo es).
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]]