He disfrutado leyendo este sitio; Esta es mi primera pregunta. Las ediciones son bienvenidas.
Dados los enteros positivos n y m , calcule todas las particiones ordenadas de m en exactamente n partes enteras positivas, e imprímalas delimitadas por comas y líneas nuevas. Cualquier orden está bien, pero cada partición debe aparecer exactamente una vez.
Por ejemplo, dados m = 6 yn = 2, las posibles particiones son pares de enteros positivos que suman 6:
1,5
2,4
3,3
4,2
5,1
Tenga en cuenta que [1,5] y [5,1] son particiones ordenadas diferentes. La salida debe estar exactamente en el formato anterior, con una nueva línea final opcional. (EDITAR: el orden exacto de las particiones no importa). La entrada / salida se realiza mediante E / S de código de golf estándar .
Otro ejemplo de salida para m = 7, n = 3:
1,1,5
1,2,4
2,1,4
1,3,3
2,2,3
3,1,3
1,4,2
2,3,2
3,2,2
4,1,2
1,5,1
2,4,1
3,3,1
4,2,1
5,1,1
El código más pequeño en bytes después de 1 semana gana.
Nuevamente, edite si es necesario.
Apéndice:
@TimmyD preguntó qué tamaño de entrada de entero tiene que soportar el programa. No hay un mínimo estricto más allá de los ejemplos; de hecho, el tamaño de salida aumenta exponencialmente, modelado aproximadamente por: líneas = e ^ (0.6282 n - 1.8273).
n | m | lines of output
2 | 1 | 1
4 | 2 | 2
6 | 3 | 6
8 | 4 | 20
10 | 5 | 70
12 | 6 | 252
14 | 7 | 924
16 | 8 | 3432
18 | 9 | 12870
20 | 10 | 48620
22 | 11 | 184756
24 | 12 | 705432
Respuestas:
Pyth, 14 bytes
Pruébelo en línea: Demostración o conjunto de pruebas
Explicación:
fuente
jjL\,fqsTQ^SQE
.Python 3, 77 bytes
Una función recursiva que construye cada cadena de salida y la imprime. Intenta cada primer número posible, recurriendo hacia abajo para encontrar una solución con la suma disminuida correspondiente
n
, y un sumando menosm
, y un prefijo de cadenas
con ese número. Si tanto la suma requerida como el número de términos son iguales a 0, hemos dado en el blanco, por lo que imprimimos el resultado, cortando la coma inicial. Esto sem|n
marca como 0 (Falsey).79 caracteres en Python 2:
fuente
CJam, 22 bytes
Pruébelo en línea en el intérprete de CJam .
Cómo funciona
fuente
Pyth,
2018 bytes-2 bytes por @Dennis!
Esto toma
n
como la primera línea de entrada ym
como la segunda.Pruébalo aquí .
fuente
Haskell, 68 bytes
Ejemplo de uso:
Cómo funciona:
sequence $ replicate n list
crea todas las combinaciones den
elementos dibujados de formalist
. Tomamos todo lox
de[1..m]
dondesum
es igualm
.unlines
yinit$tail$show
producir el formato de salida requerido.fuente
Dyalog APL , 33 bytes
Toma
m
como argumento izquierdo,n
como argumento derecho.Casi la mitad (entre
{
y⍺
) corresponde al formato requerido.fuente
Mathematica, 65 bytes
IntegerPartitions
hace la tarea El resto es solo para ordenar las tuplas y formatear el resultado.fuente
Pitón 3, 112
No he logrado un trazador de líneas 1 en un tiempo. :)
fuente
Python 2.7,
174170152 bytesRespuesta gorda. Al menos es legible :)
fuente
>
, despuésreplace
y después de la coma.Julia, 105 bytes
Esta es una función que lee dos argumentos enteros y escribe los resultados en STDOUT con un solo avance de línea final.
Sin golf:
fuente
Perl 6 , 54 bytes
Si el resultado podría ser una lista de listas
Por la forma en que está redactado actualmente, tengo que agregar un
join
a la lambda.fuente