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]]
fuente
Respuestas:
05AB1E ,
1612 bytesGuardado 4 bytes gracias a Grimy
Pruébalo en línea!
Explicación
fuente
ćsO-
es el incorporadoÆ
.À@¨
puede ser¦@
.Wolfram Language (Mathematica) ,
6762 bytesPruébalo en línea!
-4 bytes por @attinat
IntegerPartitions@d
: Obtenga todas las listas de enteros que sumand
Cases[,...]
: Filtrar por la siguiente condición:2#& @@# - d <= e &&
: Dos veces el primer elemento menos la suma es menor quee
, y ...Max@Ratios@#<=.5
: Las proporciones de elementos sucesivos de la lista son todas inferiores a 1/2.Como
e
es menor que .5, podemos convertir esto en una desigualdad encadenada.Para algunos bytes adicionales, esto es significativamente más rápido: ¡ Pruébelo en línea!
fuente
Jalea ,
1615 bytes-1 gracias a Erik the Outgolfer (un ajuste inteligente a la comprobación que permite un solo filtro)
Un enlace diádico que acepta un número entero positivo,
d
, a la izquierda y un número entero positivoe
, a la derecha que produce una lista de listas de números enteros positivos.Pruébalo en línea! (el pie de página formatea los resultados para evitar listar el formato de lista implícita que Jelly hace como un programa completo)
¿Cómo?
fuente
Haskell ,
595854 bytes1 byte guardado gracias a nimi
4 bytes guardados gracias a xnor
Pruébalo en línea!
fuente
#
directamente: ¡ Pruébelo en línea!JavaScript (V8) ,
88 8781 bytesToma entrada como
(e)(d)
. Imprime las secuencias en STDOUT.Pruébalo en línea!
Comentado
fuente
Pyth , 23 bytes
Pruébalo en línea!
fuente
Python 3 ,
213 bytesLista de comprensión gigante. Lo más probable es que no sea la mejor manera de hacer esto, pero no puedo entender cómo omitir las declaraciones if
Python 3 , 172 bytes
Pruébalo en línea!
Según las ediciones de @Jonas Ausevicius
fuente
all
puede tomar un generador, por lo que puede hacer enall(...)
lugar deall([...])
. Por último, dado que su envío es una función completamente anónima, no se le penaliza por la asignación (f=
) y, por lo tanto, puede deducirlo de su puntaje (-2 bytes).[*(...)]
lugar de lolist(...)
cual generalmente guarda un byte, pero en su caso guarda 2, ya que también le permite eliminar un espacio.[*filter(...)]
. También bienvenido :)Carbón de leña , 42 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. Explicación:
Primero cree una lista de listas de
[1]..[d]
.Para cada lista, cree nuevas listas con el prefijo de todos los números desde el primer número duplicado hasta
d
y agregue esas listas a la lista de listas que se procesarán. Esto asegura que todas las secuencias admisibles que contienen números no mayores qued
las creadas.Salida solo aquellas listas cuyo grado es
d
y el exceso no es mayor quee
. (La suma del grado y el exceso es igual al doble del primer número de la lista).fuente
Python 3 , 156 bytes
toma
d,e
como entrada; lista de salidas de tuplasRespuesta similar a @OrangeCherries y ayuda de los comentarios; pero más bytes guardados
Pruébalo en línea!
fuente
Jalea , 18 bytes
Pruébalo en línea!
fuente
Ruby , 78 bytes
Pruébalo en línea!
fuente