Dada uma lista finita, retorne uma lista de todos os seus prefixos, incluindo uma lista vazia, em ordem crescente de comprimento.
(Basicamente implementando a função Haskell inits
.)
Detalhes
- A lista de entrada contém números (ou outro tipo, se for mais conveniente).
- A saída deve ser uma lista de listas .
- O envio pode, mas não precisa ser uma função, qualquer E / S padrão pode ser usada.
- Existe uma resposta CW para todas as soluções triviais .
Exemplo
[] -> [[]]
[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]]
Respostas:
Haskell , 20 bytes
Editar: No entanto, um byte mais curto com uma verificação completamente diferente.
Uma função anônima superando ligeiramente a importação trivial.
Experimente online!
=<<
para a abreviação(scanr(\_->init)=<<id) l = scanr(\_->init) l l
.l
da direita para a esquerda, coletando resultados intermediários com a função\_->init
.init
ao valor inicial da varredura, o que também él
.fonte
brainfuck ,
2112 bytes-9 bytes graças a Arnauld sugerindo o separador em
ÿ
vez de novas linhasExperimente online!
Toma bytes por STDIN sem bytes nulos e imprime uma série de prefixos separados pelo
ÿ
caractere com umÿ
caractere à esquerda . Por exemplo, para a entradaPrefixes
, a saída éÿÿPÿPrÿPreÿPrefÿPrefiÿPrefixÿPrefixeÿPrefixes
.Para facilitar a leitura, aqui está uma versão com novas linhas .
Explicação:
fonte
JavaScript (ES6), 33 bytes
Experimente online!
Quão?
fonte
CW para todas as entradas triviais
Limpo , 19 bytes
A versão Haskell também funciona no Clean.
Experimente online!
Haskell , 22 bytes
Experimente online!
Prolog (SWI) , 6 bytes
Experimente online!
fonte
Gelatina , 3 bytes
Experimente online!
Como funciona
fonte
Japonês , 4 bytes
Experimente online!
Explicação:
fonte
Perl 6 , 13 bytes
Experimente online!
Explicar:
No Perl 6, você pode agrupar um operador entre colchetes como uma maneira alternativa de escrever uma redução de lista.
[+] @array
retorna a soma dos elementos@array
,[*] @array
retorna o produto etc. Você também pode preceder o operador com uma barra invertida para fazer uma redução "triangular", que alguns idiomas chamam de "varredura". Então,[\+] @array
retorna uma lista que consiste no primeiro elemento de@array
, em seguida, a soma dos dois primeiros elementos, a soma dos três primeiros elementos etc.Aqui
[\,] @_
está uma redução triangular sobre a matriz de entrada@_
usando o operador de construção de lista,
. Portanto, ele avalia uma lista de listas: o primeiro elemento de@_
, os dois primeiros elementos de@_
etc. Isso é quase o necessário, mas o problema exige uma única lista vazia primeiro. Portanto, o primeiro elemento da lista de retorno é uma lista literal vazia(),
, e a redução sobre a lista de entrada é achatada no restante da lista de retorno com|
.fonte
Python 2 , 32 bytes
Experimente online!
fonte
R ,
4039 bytesExperimente online!
-1 byte graças a digEmAll
A saída do
list
tipo R é um pouco estranha; ele usa indexação sequencial; portanto, por exemplo, a saída paralist(1,2)
éA entrada como vetor fornece um formato de saída mais limpo, embora as entradas não sejam tecnicamente
list
s.fonte
JavaScript, 36 bytes
Experimente online!
fonte
Mathematica,
2221 bytes-1 byte graças a Misha Lavrov !
Função pura. Pega uma lista como entrada e retorna uma lista de listas como saída. Eu acredito que esta é a solução mais curta possível.
fonte
{}~FoldList@Append~#&
.Casca , 2 bytes
Obtém todos os
ḣ
eads e, em seguida, acrescentaΘ
(neste caso[]
):Experimente online!
(precisa de anotação de tipo para lista vazia: Experimente on-line! )
fonte
J , 5 bytes
Experimente online!
fonte
PowerShell , 65 bytes
Experimente online!
O PowerShell desenrola útil listas de listas quando o padrão
Write-Output
ocorre na conclusão do programa, para que você obtenha um item por linha. Prenda a-join','
para ver melhor a lista de listas, convertendo as listas internas em seqüências de caracteres.(Ab) usa o fato de que a tentativa de saída de uma matriz vazia (por exemplo,
@()
) resulta em nenhuma saída; portanto, uma entrada de matriz vazia apenas tem''
como saída, uma vez que$a[0..$_]
isso resultará em nada. Ele também emitirá algumas mensagens de erro espetaculares.fonte
K (ngn / k) , 8 bytes
Experimente online!
fonte
,\(,()),
no K4. Juntando-se ao nulo alistado junto à entrada alistada? howsitwork?()
é uma lista vazia.(,()),x
anexa-o ax
. finalmente,\
faz uma varredura concat. ox
é omitido para formar uma composição. observe que o final,
é diádico; portanto, é "concat", não "alistado".1_',\0,
mas meu analisador não é inteligente o suficiente para lidar com isso ...Lisp comum , 39 bytes
Experimente online!
Explicação
fonte
F #, 53 bytes
Na verdade, tenho duas respostas bastante semelhantes para isso, ambas do mesmo tamanho. Ambos pegam uma sequência genérica
s
como parâmetro.Primeira solução:
Experimente online!
Seq.take
pega os primeirosn
elementos da sequência.Seq.init
cria uma nova sequência com uma contagem (nesse caso) do comprimento da sequências
mais 1 e, para cada elemento da sequência, recebe os primeirosn
elementoss
.Segunda solução:
Semelhante a antes, exceto que cria uma sequência de 0 ao comprimento de
s
. Então pega esse número de elementos des
.Experimente isso online também!
fonte
fun s->Seq.map(fun n->Seq.take n s){0..Seq.length s}
salva 1 byteMATL,
1512 bytes3 bytes salvos graças a @Giuseppe
Experimente no MATL Online .
Devido à maneira como o MATL exibe a saída, você não pode ver explicitamente a matriz vazia na matriz de células. Aqui está uma versão que mostra a saída um pouco mais explicitamente.
Explicação
fonte
v
vez de[]
. E não:
usa1
como o primeiro argumento padrão? Portanto, isso pode servin:"G@:)]Xh
de 12 bytes.SWI PROLOG 22 bytes
i(X,Y):-append(X,_,Y).
fonte
Carvão , 6 bytes
Experimente online! Link é a versão detalhada do código. Explicação:
É possível, a um custo de 1 byte, solicitar ao Charcoal para imprimir uma
n+1
matriz de elementos que inclua a entrada como seu último elemento, mas a saída é a mesma, embora a posição do cursor seja diferente se você imprimir outra coisa.fonte
05AB1E , 3 bytes
Explicação:
Experimente online!
fonte
RAD , 7 bytes
Experimente online!
Isso também funciona no Dyalog APL como uma função.
Quão?
Isso funciona da mesma forma para o APL e o RAD, dada a sua estreita relação.
(⊂⍬)
a matriz vazia,
anexado a,\
os prefixos (que excluem a matriz vazia).fonte
Groovy , 37 bytes
Experimente online!
fonte
{it.inits().reverse()}
funcionará assim que o Groovy for 2.5 no TIOJapt , 5 bytes
Experimente online!
fonte
brainfuck , 43 bytes
Pegue uma lista de caracteres não nulos como entrada e retorne todos os prefixos separados por nova linha. Requer fita dupla-infinita ou de embrulho.
Experimente online!
fonte
C # (compilador interativo do Visual C #) , 39 bytes
Experimente online!
fonte
System.Linq;
no seu bytecount. E parece que parte da sua lógica de saída está na saída das matrizes. Porque a matriz vazia apenas retorna a matriz vazia.System.Linq
, não preciso incluir isso na contagem de bytes. Minha submissão seria considerada um idioma diferente do que digamos.NET Core
. github.com/dotnet/roslyn/wiki/C%23-Interactive-Walkthrough - Você mencionou a impressão, que é uma questão separada, gostaria de obter clareza sobre isso primeiro.Array
vsIList
vsIEnumerable
.F # (Mono) , 45 bytes
Experimente online!
Não tenho muita certeza se isso é válido, mas parece que segue a mesma sintaxe "anônima lambda" que pareço usada em vários outros idiomas.
fonte
Java 8+ ,
8677 bytes-9 bytes graças a Kevin Cruijssen (livrar-se da importação)!
Experimente online!
Alternativa, 65 bytes
A seguir, os resultados serão impressos no stdout (devido a Olivier Grégoire ):
Experimente online
fonte
java.util.stream.IntStream
diretamente e soltar a importação.x->{for(int i=0;i<=x.size();)System.out.println(x.subList(0,i++));}
( 67 bytes ). Isso é impresso em vez de usar fluxos. A impressão geralmente é a maneira mais curta de produzir estruturas complexas.System.out.print
pois a saída ainda é inequívoca.Braquilog , 9 bytes
Experimente online!
Explicação
fonte
Ruby ,
3129 bytesExperimente online!
Explicação:
fonte