Dada una lista finita, devuelva una lista de todos sus prefijos, incluida una lista vacía, en orden ascendente de su longitud.
(Básicamente implementando la función Haskell inits
).
Detalles
- La lista de entrada contiene números (u otro tipo si es más conveniente).
- El resultado debe ser una lista de listas .
- El envío puede, pero no tiene que ser una función, se puede usar cualquier E / S predeterminada .
- Hay una respuesta CW para todas las soluciones triviales .
Ejemplo
[] -> [[]]
[42] -> [[],[42]]
[1,2,3,4] -> [[], [1], [1,2], [1,2,3], [1,2,3,4]]
[4,3,2,1] -> [[], [4], [4,3], [4,3,2], [4,3,2,1]]
Respuestas:
Haskell , 20 bytes
Editar: Sin embargo, un byte más corto con un escaneo completamente diferente.
Una función anónima que supera ligeramente la importación trivial.
Pruébalo en línea!
=<<
para la abreviatura(scanr(\_->init)=<<id) l = scanr(\_->init) l l
.l
de derecha a izquierda, recogiendo resultados intermedios con la función\_->init
.init
al valor inicial del escaneo, que también esl
.fuente
brainfuck ,
2112 bytes-9 bytes gracias a Arnauld que sugiere el separador en
ÿ
lugar de las nuevas líneasPruébalo en línea!
Toma bytes a través de STDIN sin bytes nulos e imprime una serie de prefijos separados por el
ÿ
carácter con unÿ
carácter inicial . Por ejemplo, para la entradaPrefixes
, la salida esÿÿPÿPrÿPreÿPrefÿPrefiÿPrefixÿPrefixeÿPrefixes
.Para facilitar la lectura, aquí hay una versión con nuevas líneas .
Explicación:
fuente
JavaScript (ES6), 33 bytes
Pruébalo en línea!
¿Cómo?
fuente
CW para todas las entradas triviales
Limpio , 19 bytes
La versión de Haskell también funciona en Clean.
Pruébalo en línea!
Haskell , 22 bytes
Pruébalo en línea!
Prólogo (SWI) , 6 bytes
Pruébalo en línea!
fuente
Jalea , 3 bytes
Pruébalo en línea!
Cómo funciona
fuente
Japt , 4 bytes
Pruébalo en línea!
Explicación:
fuente
Perl 6 , 13 bytes
Pruébalo en línea!
Para explicar:
En Perl 6 se puede envolver un operador entre corchetes como una forma alternativa de escribir una reducción de la lista.
[+] @array
Devuelve la suma de los elementos@array
,[*] @array
retorna el producto, etc. También puede preceder al operador con una barra invertida para hacer una reducción "triangular", que algunas lenguas llaman "exploración". Así que[\+] @array
devuelve una lista que consiste en el primer elemento de@array
, luego la suma de los dos primeros elementos, luego la suma de los primeros tres elementos, etc.Aquí
[\,] @_
hay una reducción triangular sobre la matriz de entrada@_
utilizando el operador de construcción de lista,
. Por lo tanto, se evalúa en una lista de listas: el primer elemento de@_
, los dos primeros elementos de@_
, etc. Eso es casi lo que se necesita, pero el problema requiere primero una lista vacía. Entonces, el primer elemento de la lista de retorno es una lista literalmente vacía(),
, luego la reducción sobre la lista de entrada se aplana con el resto de la lista de retorno|
.fuente
Python 2 , 32 bytes
Pruébalo en línea!
fuente
R ,
4039 bytesPruébalo en línea!
-1 byte gracias a digEmAll
La salida del
list
tipo de R es un poco extraña; utiliza indexación secuencial, por ejemplo, la salida paralist(1,2)
esEn cambio, tomar la entrada como un vector proporciona un formato de salida más ordenado, aunque las entradas no son técnicamente
list
s.fuente
JavaScript, 36 bytes
Pruébalo en línea!
fuente
Mathematica
2221 bytes-1 byte gracias a Misha Lavrov !
Pura función. Toma una lista como entrada y devuelve una lista de listas como salida. Creo que esta es la solución más corta posible.
fuente
{}~FoldList@Append~#&
.Casco , 2 bytes
Obtiene todos los
ḣ
eads y luego antecedeΘ
(en este caso[]
):Pruébalo en línea!
(necesita anotaciones de tipo para la lista vacía: ¡ Pruébelo en línea! )
fuente
J , 5 bytes
Pruébalo en línea!
fuente
PowerShell , 65 bytes
Pruébalo en línea!
PowerShell desenrolla útilmente listas de listas cuando
Write-Output
ocurre el valor predeterminado al finalizar el programa, por lo que obtiene un elemento por línea. Tack en un-join','
para ver mejor la lista de listas, convirtiendo las listas internas en cadenas.(Ab) utiliza el hecho de que intentar generar una matriz vacía (por ejemplo,
@()
) no produce ninguna salida, por lo que una entrada de matriz vacía solo tiene''
como salida, ya que no$a[0..$_]
dará como resultado nada. También arrojará algunos mensajes de error espectaculares.fuente
K (ngn / k) , 8 bytes
Pruébalo en línea!
fuente
,\(,()),
en K4. ¿Unirse a nulo alistado a lo largo de la entrada alistada? ¿Cómo funciona?()
es una lista vacía.(,()),x
lo anteponex
. finalmente,\
hace un escaneo concat. elx
se omite para formar una composición. tenga en cuenta que el final,
es diádico, por lo que es "concat", no "enlist".1_',\0,
pero mi programa de análisis no es lo suficientemente inteligente como para manejar esto ...Lisp común , 39 bytes
Pruébalo en línea!
Explicación
fuente
F #, 53 bytes
De hecho, tengo dos respuestas bastante similares para esto, ambas de la misma longitud. Ambos toman una secuencia genérica
s
como parámetro.Primera solución
Pruébalo en línea!
Seq.take
toma el primeron
elementos de la secuencia.Seq.init
crea una nueva secuencia con un recuento (en este caso) de la longitud de la secuencias
más 1, y para cada elemento de la secuencia toma los primerosn
elementos ens
.Segunda solución:
Similar a antes, excepto que crea una secuencia de 0 a la longitud de
s
. Luego toma esa cantidad de elementos des
.¡Prueba esto en línea también!
fuente
fun s->Seq.map(fun n->Seq.take n s){0..Seq.length s}
ahorra 1 byteMATL,
1512 bytes3 bytes guardados gracias a @Giuseppe
Pruébalo en MATL Online .
Debido a la forma en que MATL muestra la salida, no puede ver explícitamente la matriz vacía en la matriz de celdas. aquí hay una versión que muestra la salida un poco más explícitamente.
Explicación
fuente
v
lugar de[]
. ¿Y no se:
usa1
como primer argumento predeterminado? Entonces esto podría servin:"G@:)]Xh
por 12 bytes.SWI PROLOG 22 bytes
i(X,Y):-append(X,_,Y).
fuente
Carbón de leña , 6 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. Explicación:
Es posible, a un costo de 1 byte, pedirle a Charcoal que imprima una
n+1
matriz de elementos que incluye la entrada como su último elemento, pero la salida es la misma, aunque la posición del cursor sería diferente si luego imprimiera algo más.fuente
05AB1E , 3 bytes
Explicación:
Pruébalo en línea!
fuente
RAD , 7 bytes
Pruébalo en línea!
Esto también funciona en Dyalog APL como una función.
¿Cómo?
Esto funciona igual para APL y RAD, dada su estrecha relación.
(⊂⍬)
la matriz vacía,
antepuesto a,\
los prefijos (que excluyen la matriz vacía).fuente
Groovy , 37 bytes
Pruébalo en línea!
fuente
{it.inits().reverse()}
funcionará una vez que tengamos un maravilloso 2.5 en TIOJapt , 5 bytes
Pruébalo en línea!
fuente
brainfuck , 43 bytes
Tome una lista de caracteres no nulos como entrada y devuelva todos los prefijos separados por nueva línea. Requiere doble infinito o cinta de envoltura.
Pruébalo en línea!
fuente
C # (compilador interactivo de Visual C #) , 39 bytes
Pruébalo en línea!
fuente
System.Linq;
Debe incluir el uso en su bytecount. Y parece que parte de su lógica de salida está en la salida de las matrices. Porque una matriz vacía solo devuelve una matriz vacía.System.Linq
, no tengo que incluir esto en el recuento de bytes. Mi presentación se consideraría un idioma diferente al de decir.NET Core
. github.com/dotnet/roslyn/wiki/C%23-Interactive-Walkthrough - Menciona la impresión, que es un tema separado, me gustaría obtener claridad sobre esto primero.Array
vsIList
vsIEnumerable
.F # (Mono) , 45 bytes
Pruébalo en línea!
No estoy totalmente seguro de si esto es válido, pero parece que sigue la misma sintaxis "lambda anónima" que he usado en varios otros idiomas.
fuente
Java 8+ ,
8677 bytes-9 bytes gracias a Kevin Cruijssen (deshacerse de la importación)!
Pruébalo en línea!
Alternativa, 65 bytes
Lo siguiente imprimirá los resultados en stdout (debido a Olivier Grégoire ):
Pruébalo en línea
fuente
java.util.stream.IntStream
directamente y soltando la importación.x->{for(int i=0;i<=x.size();)System.out.println(x.subList(0,i++));}
( 67 bytes ). Esto se imprime en lugar de usar secuencias. La impresión suele ser la forma más corta de generar estructuras complejas.System.out.print
ya que la salida aún no es ambigua.Brachylog , 9 bytes
Pruébalo en línea!
Explicación
fuente
Ruby ,
3129 bytesPruébalo en línea!
Explicación:
fuente