Pour une liste finie, retourne une liste de tous ses préfixes, y compris une liste vide, dans l'ordre croissant de leur longueur.
(Implémentation de la fonction Haskell inits
.)
Détails
- La liste de saisie contient des nombres (ou un autre type si cela convient mieux).
- La sortie doit être une liste de listes .
- La soumission peut, mais ne doit pas nécessairement être une fonction, toutes les E / S par défaut peuvent être utilisées.
- Il existe une réponse CW pour toutes les solutions triviales .
Exemple
[] -> [[]]
[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]]
Réponses:
Haskell , 20 octets
Edit: Encore un octet plus court avec un scan complètement différent.
Une fonction anonyme battant légèrement l’importation triviale.
Essayez-le en ligne!
=<<
pour l'abréviation(scanr(\_->init)=<<id) l = scanr(\_->init) l l
.l
de droite à gauche, en collectant des résultats intermédiaires avec la fonction\_->init
.init
à la valeur initiale de l’analyse, qui est égalementl
.la source
brainfuck ,
2112 octets-9 octets grâce à Arnauld qui a suggéré le séparateur
ÿ
au lieu des sauts de ligneEssayez-le en ligne!
Prend des octets via STDIN sans octets nuls et imprime une série de préfixes séparés par le
ÿ
caractère précédé d'unÿ
caractère. Par exemple, pour l'entréePrefixes
, la sortie estÿÿPÿPrÿPreÿPrefÿPrefiÿPrefixÿPrefixeÿPrefixes
.Pour plus de lisibilité, voici une version avec des nouvelles lignes .
Explication:
la source
JavaScript (ES6), 33 octets
Essayez-le en ligne!
Comment?
la source
CW pour toutes les entrées triviales
Propre , 19 octets
La version Haskell fonctionne également dans Clean.
Essayez-le en ligne!
Haskell , 22 octets
Essayez-le en ligne!
Prolog (SWI) , 6 octets
Essayez-le en ligne!
la source
Gelée , 3 octets
Essayez-le en ligne!
Comment ça marche
la source
Japt , 4 octets
Essayez-le en ligne!
Explication:
la source
Perl 6 , 13 octets
Essayez-le en ligne!
Expliquer:
En Perl 6, vous pouvez placer un opérateur entre crochets comme moyen alternatif d’écrire une réduction de liste.
[+] @array
renvoie la somme des éléments entrants@array
,[*] @array
renvoie le produit, etc. Vous pouvez également faire précéder l'opérateur d'une barre oblique inverse pour créer une réduction "triangulaire", que certaines langues appellent "analyse". Donc,[\+] @array
retourne une liste composée du premier élément de@array
, puis de la somme des deux premiers éléments, puis de la somme des trois premiers éléments, etc.Voici
[\,] @_
une réduction triangulaire sur le tableau d'entrée@_
à l'aide de l'opérateur de construction de liste,
. Donc, il s’agit d’une liste de listes: le premier élément de@_
, les deux premiers éléments de@_
, etc. C’est presque ce dont nous avons besoin, mais le problème appelle d’abord une liste vide. Ainsi, le premier élément de la liste de retour est une liste vide littérale(),
, puis la réduction sur la liste d'entrée est aplatie dans le reste de la liste de retour avec|
.la source
Python 2 , 32 octets
Essayez-le en ligne!
la source
R ,
4039 octetsEssayez-le en ligne!
-1 octet grâce à digEmAll
La sortie du
list
type de R est un peu bizarre; il utilise l'indexation séquentielle, de sorte que, par exemple, la sortie delist(1,2)
estPrendre une entrée en tant que vecteur donne un format de sortie plus net, bien que les entrées ne soient pas techniquement
list
s.la source
JavaScript, 36 octets
Essayez-le en ligne!
la source
Mathematica,
2221 octets-1 octet grâce à Misha Lavrov !
Fonction pure. Prend une liste en entrée et renvoie une liste de listes en sortie. Je crois que c'est la solution la plus courte possible.
la source
{}~FoldList@Append~#&
.Husk , 2 octets
Obtient tous les
ḣ
eads et ensuite ajouteΘ
(dans ce cas[]
):Essayez-le en ligne!
(nécessite une annotation de type pour une liste vide: essayez-le en ligne! )
la source
J , 5 octets
Essayez-le en ligne!
la source
PowerShell , 65 octets
Essayez-le en ligne!
PowerShell déroule utilement les listes de listes lorsque la valeur par défaut
Write-Output
survient à la fin du programme. Vous obtenez ainsi un élément par ligne. Clique sur a-join','
pour mieux voir la liste de listes, en convertissant les listes intérieures en chaînes.(Ab) utilise le fait que toute tentative de sortie d'un tableau vide (par exemple
@()
) n'entraîne aucune sortie. Par conséquent, une entrée de tableau vide a simplement''
pour sortie, car elle$a[0..$_]
n'aboutira à rien. Cela déclenchera également des messages d'erreur spectaculaires.la source
K (ngn / k) , 8 octets
Essayez-le en ligne!
la source
,\(,()),
dans K4. Rejoindre les enrôlés null le long des entrées enrôlées? howsitwork?()
est une liste vide.(,()),x
le prépare àx
. fait finalement,\
un concat-scan. lex
est omis pour former une composition. notez que la fin,
est dyadique, donc "concat", pas "enrôler".1_',\0,
mais mon analyseur n'est pas assez intelligent pour gérer ça ...Common Lisp , 39 octets
Essayez-le en ligne!
Explication
la source
F #, 53 octets
J'ai en fait deux réponses assez similaires pour cela, les deux de la même longueur. Ils prennent tous deux une séquence générique
s
en paramètre.Première solution:
Essayez-le en ligne!
Seq.take
prend les premiersn
éléments de la séquence.Seq.init
crée une nouvelle séquence avec un compte (dans ce cas) de la longueur de la séquences
plus 1, et pour chaque élément de la séquence prend les premiersn
éléments danss
.Deuxième solution:
Semblable à avant, sauf qu'il crée une séquence de 0 à la longueur de
s
. Puis prend ce nombre d'éléments des
.Essayez ceci en ligne aussi!
la source
fun s->Seq.map(fun n->Seq.take n s){0..Seq.length s}
sauve 1 octetMATL,
1512 octets3 octets sauvés grâce à @Giuseppe
Essayez-le sur MATL Online .
En raison de la façon dont MATL affiche la sortie, vous ne pouvez pas voir explicitement le tableau vide dans le tableau de cellules. Voici une version qui montre la sortie un peu plus explicitement.
Explication
la source
v
au lieu de[]
. Et ne pas:
utiliser1
comme premier argument par défaut? Donc, cela pourrait êtrevin:"G@:)]Xh
pour 12 octets.SWI PROLOG 22 octets
i(X,Y):-append(X,_,Y).
la source
charbon , 6 octets
Essayez-le en ligne! Le lien est vers la version verbeuse du code. Explication:
Il est possible, avec un coût d'un octet, de demander à Charcoal d'imprimer un
n+1
tableau d'élément comportant le dernier élément en entrée, mais le résultat est identique, bien que la position du curseur soit différente si vous imprimez autre chose.la source
05AB1E , 3 octets
Explication:
Essayez-le en ligne!
la source
RAD , 7 octets
Essayez-le en ligne!
Cela fonctionne également dans Dyalog APL en tant que fonction.
Comment?
Cela fonctionne de la même manière pour APL et RAD, étant donné leur relation étroite.
(⊂⍬)
le tableau vide,
préposé à,\
les préfixes (qui excluent le tableau vide.)la source
Groovy , 37 octets
Essayez-le en ligne!
la source
{it.inits().reverse()}
fonctionnera une fois que nous aurons le groovy 2.5 sur TIOJapt , 5 octets
Essayez-le en ligne!
la source
brainfuck , 43 octets
Prend une liste de caractères non nuls en entrée et renvoie tous les préfixes séparés par une nouvelle ligne. Nécessite un ruban double-infini ou enveloppant.
Essayez-le en ligne!
la source
C # (compilateur interactif Visual C #) , 39 octets
Essayez-le en ligne!
la source
System.Linq;
dans votre décompte. Et il semble qu'une partie de votre logique de sortie se trouve dans votre sortie des tableaux. Parce qu'un tableau vide ne retourne qu'un tableau vide.System.Linq
, je n'ai pas à l'inclure dans le nombre d'octets. Ma soumission serait considérée comme une langue différente de celle dite.NET Core
. github.com/dotnet/roslyn/wiki/C%23-Interactive-Walkthrough - Vous parlez de l’impression qui est un problème distinct, je voudrais obtenir des précisions sur cette première étape .Array
vsIList
vsIEnumerable
.F # (Mono) , 45 octets
Essayez-le en ligne!
Je ne suis pas tout à fait sûr que cela soit valable, mais il semble que cela respecte la même syntaxe de "lambda anonyme" que celle que j'ai apparemment utilisée dans plusieurs autres langues.
la source
Java 8+ ,
8677 octets-9 octets grâce à Kevin Cruijssen (se débarrasser de l'importation)!
Essayez-le en ligne!
Alternative, 65 octets
Les personnes suivantes imprimeront les résultats sur la sortie standard (à cause d’ Olivier Grégoire ):
Essayez-le en ligne
la source
java.util.stream.IntStream
directement et abandonner l'importation.x->{for(int i=0;i<=x.size();)System.out.println(x.subList(0,i++));}
( 67 octets ). Cela imprime au lieu d'utiliser des flux. L'impression est généralement le moyen le plus rapide de générer des structures complexes.System.out.print
puisque la sortie est toujours non ambiguë.Brachylog , 9 octets
Essayez-le en ligne!
Explication
la source
Ruby ,
3129 octetsEssayez-le en ligne!
Explication:
la source