Dada una lista de enteros no vacía, genera cada partición posible de la lista donde cada partición es una sublista no vacía.
Entonces, para la lista, [1, 2, 3, 4]
el resultado es:
[[1, 2, 3, 4]]
[[1, 2, 3], [4]]
[[1, 2], [3, 4]]
[[1, 2], [3], [4]]
[[1], [2, 3, 4]]
[[1], [2, 3], [4]]
[[1], [2], [3, 4]]
[[1], [2], [3], [4]]
El orden de las listas en la salida no importa, por lo que [[1, 2, 3, 4]]
podría ser primero, último o donde sea. El orden de los elementos debe ser preservado.
Este es el código de golf, por lo que gana la respuesta más corta.
Relacionado: Particionar una lista!
[...]
en el formato de salida? (Siempre y cuando las particiones estén claramente separadas, por ejemplo, por saltos de línea.):
como separador de lista, pero en la salida, las particiones en sí mismas no están envueltas en un par adicional de[...]
.[
y el último]
de cada línea?Respuestas:
Jalea , 2 bytes
Pruébalo en línea!
fuente
Retina ,
2719 bytesEl recuento de bytes asume la codificación ISO 8859-1.
Pruébalo en línea!
Explicación
Por supuesto, esto calcula todas las particiones usando el procesamiento de cadenas. La idea básica es que podemos generar todas las particiones al decidir
,
individualmente si queremos o no dividir la lista allí. Este tipo de cosas se pueden hacer en Retina haciendo coincidir cada uno,
por turno y utilizando un reemplazo que ofrezca las dos salidas posibles.La entrada actúa como el caso base: la partición donde todos los elementos todavía están en una sola lista.
Ahora repetidamente (
+
) hacemos coincidir la primera (1
) coma (,
), en cada línea (%
) (tratando esa línea como una cadena separada, que es relevante para$'
y `` $ 1 'en la sustitución).Esa coma se reemplaza con:
Recuerde que todo lo que está delante del partido y después del partido permanece en la cadena de todos modos, por lo que el resultado completo es en realidad lo
$`;$'¶$`];[$'
que explica por qué insertamos el sufijo y el prefijo en ese orden.Este bucle se detiene una vez que todas las comas desaparecen.
Finalmente, reemplace los puntos y comas con comas nuevamente para que coincida con el formato de entrada.
fuente
Pure Bash, 28
Aquí, las listas están separadas por dos puntos y entre corchetes. Por ejemplo, en la pregunta, la lista de entrada sería
1:2:3:4
y la salida es:Pruébalo en línea .
${1//:/REPLACEMENT}
reemplaza los dos puntos$1
con{:,]:[\}
[1{:,]:[}2{:,]:[}3{:,]:[}4]
\
escapes cuidadosos ) hacen que la expansión de la llave ocurra en último lugar y den el resultado deseado.Si es necesario que coincida exactamente con el
[[ , , ...]]
formato dado , podemos hacer esto en su lugar:Pure Bash, 47
Pruébalo en línea .
fuente
Pyth , 2 bytes
Con entrada
[1, 2, 3, 4]
(por ejemplo).Explicación :
./
es el operador de partición. Devuelve todas las divisiones de la lista de entrada en sublistas disjuntas. La entrada se alimenta implícitamente al programa.¡Pruébalo en línea!
fuente
05AB1E , 5 bytes
Pruébalo en línea!
fuente
.œ
:: Pruébelo en línea.Python 3 ,
827266 bytesPruébalo en línea!
-5 bytes gracias a @JonathanAllan
fuente
l
que al finalHaskell ,
595549 bytesPruébalo en línea!
Solución recursiva. Ejemplo de uso:
p [1,2,3]
devoluciones[[[1,2,3]],[[1,2],[3]],[[1],[2,3]],[[1],[2],[3]]]
.-6 bytes gracias a xnor !
fuente
do a:b<-p r;[(x:a):b,[x]:a:b]
(esto cambia el orden de las listas).<*>
hace exactamente lo que quieres[\(a:b)->(x:a):b,([x]:)]<*>p r
, aunque es más largo quedo
porque la primera lambda parece necesitar una coincidencia de patrones.J , 42 bytes
Genera todas las particiones de sublistas creando las claves para las sublistas de particiones de longitud 1 e iterando a la longitud de la lista de entrada. Cada sublista de partición se forma seleccionando de las teclas.
Por ejemplo, aquí está el proceso de crear las claves para una lista de longitud 4.
Pruébalo en línea!
fuente
J ,
2624 bytesPruébalo en línea!
fuente
Brachylog , 2 bytes
Pruébalo en línea!
Envío de funciones que produce resultados al actuar como generador. (El enlace TIO contiene código adicional para convertirlo en un programa completo, con fines de prueba).
Por cierto, aunque técnicamente no es un componente integrado, esto se usa con tanta frecuencia en Brachylog que a) probablemente merece una representación de un solo byte, yb) el
c
componente integrado puede tomar un parámetro para hacer afirmaciones sobre su entrada (mientras que con la mayoría de los componentes integrados, un parámetro habla sobre cómo producir la salida ).Explicación
fuente
APL, 26 bytes
Prueba:
Explicación:
X←⍴1↓⍵
:X
es la longitud de⍵
(la lista de entrada) con su primer elemento descartado⍳2*X
: los números [1..2 ^ X](X⍴2)⊤
: representación de base 2 de esos números, conX
posiciones (es decir,X
se ajustará a0
).↓⍉
: gira la matriz y la divide a lo largo de las líneas (⊤
da como resultado una matriz con los números a lo largo de las columnas), dando una matriz de vectores de bits1,¨
: anteponer un 1 a cada vector de bits.⊂∘⍵¨
: para cada vector de bits, dividir⍵
en cada 1.fuente
Haskell , 45 bytes
Pruébalo en línea!
Encontré esta solución hace un tiempo al pensar en un consejo de Haskell .
fuente
Python , 90 bytes
superado por los ovs (haciendo algo que pensé que había intentado trabajar: p)
Una función recursiva que construye la lista de particiones a partir de sectores de la entrada con la cola alcanzada cuando los sectores son de longitud 1.
Pruébalo en línea!
Esto
exec
ahorra 4 bytes sobre aowhile
3 sobre unfor
bucle (abajo) ya que significa solo dos\n
segundos en lugar de dos niveles de sangría, lo que permite que toda la función esté en una línea (mientras que el orden de corte no importa).fuente
Python 3 , 67 bytes
Pruébalo en línea!
fuente
Haskell, 59 bytes
fuente
Ruby ,
6257 bytesPruébalo en línea!
Cómo funciona:
fuente
JavaScript (ES6), 87 bytes
Explicación:
b
es la lista de sublistas anteriores,c
es la sublista actual, (que comienza como el primer elemento de la matriz, ya que debe estar en la primera sublista) mientras qued
es la lista de todas las sublistas. El resto de los elementos de la matriz se procesan recursivamente. En cada caso, hay dos opciones: el siguiente elemento se agrega a la sublista actual o la sublista actual se completa y el siguiente elemento inicia una nueva sublista. Los resultados recursivos se concatenan juntos. Cuando la matriz se agota, el resultado es la lista de todas las sublistas.fuente
APL (NARS) 38 caracteres, 76 bytes
esto usa la función Nars 11 1‼ kk pero es muy lenta, inutilizable para una matriz arg de 9 elementos ya ...
esto a continuación es la función que no utiliza el incorporado:
Vemos el tipo de cada resultado:
No sé cómo funciona, es solo un intento heurístico ...
Posible cometo un error; ambas funciones construyen las particiones de la lista, independientemente de la entrada, y no solo 1 2 ... n.
fuente
Axioma, 251 bytes
Si alguien encuentra algo mejor ... ungof y prueba:
Si esto es demasiado espacio, dilo y elimino ejemplos ...
fuente