Wenn Sie eine endliche Liste haben, geben Sie eine Liste aller Präfixe zurück, einschließlich einer leeren Liste, und zwar in aufsteigender Reihenfolge ihrer Länge.
(Grundsätzlich die Haskell-Funktion implementieren inits
.)
Einzelheiten
- Die Eingabeliste enthält Zahlen (oder einen anderen Typ, falls zweckmäßiger).
- Die Ausgabe muss eine Liste von Listen sein .
- Die Einreichung kann, muss aber keine Funktion sein, es kann jede Standard-E / A verwendet werden.
- Für alle trivialen Lösungen gibt es eine CW-Antwort .
Beispiel
[] -> [[]]
[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]]
Antworten:
Haskell , 20 Bytes
Edit: Noch ein Byte kürzer mit einem ganz anderen Scan.
Eine anonyme Funktion, die den Trivialimport leicht übertrifft.
Probieren Sie es online!
=<<
für die Abkürzung(scanr(\_->init)=<<id) l = scanr(\_->init) l l
.l
von rechts nach links und sammelt mit der Funktion Zwischenergebnisse\_->init
.init
auf den Anfangswert des Scans, der auch ist , wirklich iteriert wirdl
.quelle
Brainfuck ,
2112 Bytes-9 Bytes dank Arnauld, der das Trennzeichen
ÿ
anstelle von Zeilenumbrüchen vorschlägtProbieren Sie es online!
Nimmt Bytes durch STDIN ohne Null-Bytes und druckt eine Reihe von Präfixen, die durch das
ÿ
Zeichen mit einem führendenÿ
Zeichen getrennt sind. Für die EingabePrefixes
ist beispielsweise die AusgabeÿÿPÿPrÿPreÿPrefÿPrefiÿPrefixÿPrefixeÿPrefixes
.Zur besseren Lesbarkeit finden Sie hier eine Version mit Zeilenumbrüchen .
Erläuterung:
quelle
JavaScript (ES6), 33 Byte
Probieren Sie es online!
Wie?
quelle
CW für alle trivialen Einträge
Sauber , 19 Bytes
Die Haskell-Version funktioniert auch in Clean.
Probieren Sie es online!
Haskell , 22 Bytes
Probieren Sie es online!
Prolog (SWI) , 6 Bytes
Probieren Sie es online!
quelle
Gelee , 3 Bytes
Probieren Sie es online!
Wie es funktioniert
quelle
Japt , 4 Bytes
Probieren Sie es online!
Erläuterung:
quelle
Perl 6 , 13 Bytes
Probieren Sie es online!
Erklären:
In Perl 6 können Sie einen Operator alternativ in eckige Klammern setzen, um eine Listenreduktion zu schreiben.
[+] @array
Gibt die Summe der Elemente in zurück@array
,[*] @array
gibt das Produkt zurück usw. Sie können dem Operator auch einen Backslash voranstellen, um eine "dreieckige" Verkleinerung vorzunehmen, die in einigen Sprachen als "Scan" bezeichnet wird. So[\+] @array
gibt eine Liste des ersten Elements aus@array
, dann die Summe der ersten beiden Elemente, dann die Summe der ersten drei Elemente usw.Hier
[\,] @_
ist eine dreieckige Verkleinerung über das Eingangsarray@_
mit dem Listenerstellungsoperator,
. Es wird also eine Liste von Listen ausgewertet: das erste Element von@_
, die ersten beiden Elemente von@_
usw. Das ist fast das, was benötigt wird, aber das Problem erfordert zuerst eine einzelne leere Liste. Das erste Element der Rückgabeliste ist also eine wörtliche leere Liste(),
, dann wird die Reduzierung über die Eingabeliste auf den Rest der Rückgabeliste mit abgeflacht|
.quelle
Python 2 , 32 Bytes
Probieren Sie es online!
quelle
R ,
40 bis39 BytesProbieren Sie es online!
-1 Byte danke an digEmAll
Die Ausgabe von R's
list
Typ ist etwas seltsam; Es verwendet die sequentielle Indizierung, also zum Beispiel die Ausgabe fürlist(1,2)
istDie Eingabe als Vektor ergibt stattdessen ein übersichtlicheres Ausgabeformat, obwohl die Eingaben dann technisch nicht korrekt sind
list
.quelle
JavaScript, 36 Bytes
Probieren Sie es online!
quelle
Mathematica,
2221 Bytes-1 Byte danke an Mischa Lawrow !
Funktion pur. Nimmt eine Liste als Eingabe und gibt eine Liste von Listen als Ausgabe zurück. Ich halte das für die kürzest mögliche Lösung.
quelle
{}~FoldList@Append~#&
.Schale , 2 Bytes
Ruft alle
ḣ
eads ab und stellt sie dann voranΘ
(in diesem Fall[]
):Probieren Sie es online!
(Typanmerkung für leere Liste erforderlich: Online ausprobieren! )
quelle
J , 5 Bytes
Probieren Sie es online!
quelle
PowerShell , 65 Byte
Probieren Sie es online!
PowerShell rollt Listen-von-Listen hilfreich ab, wenn der Standardwert
Write-Output
bei Programmabschluss auftritt, sodass Sie ein Element pro Zeile erhalten. Tack on a-join','
, um die Liste der Listen besser anzuzeigen, indem Sie die inneren Listen in Zeichenfolgen konvertieren.(Ab) verwendet die Tatsache, dass der Versuch, ein leeres Array auszugeben (z. B.
@()
), zu keiner Ausgabe führt, sodass eine leere Array-Eingabe nur''
als Ausgabe dient, da$a[0..$_]
dies zu nichts führt. Es werden auch einige spektakuläre Fehlermeldungen ausgegeben.quelle
K (ngn / k) , 8 Bytes
Probieren Sie es online!
quelle
,\(,()),
in K4. Beitritt zu eingetragenen Nullen bei eingetragenen Eingaben? wie geht das?()
ist eine leere Liste.(,()),x
stellt es voranx
. macht endlich,\
einen concat-scan. dasx
wird weggelassen, um eine Komposition zu bilden. Beachten Sie, dass das Trailing,
dyadisch ist, also "concat", nicht "enlist".1_',\0,
aber mein Parser ist nicht schlau genug, um damit umzugehen ...Common Lisp , 39 Bytes
Probieren Sie es online!
Erläuterung
quelle
F #, 53 Bytes
Ich habe tatsächlich zwei ziemlich ähnliche Antworten, beide gleich lang. Beide verwenden eine generische Sequenz
s
als Parameter.Erste Lösung:
Probieren Sie es online!
Seq.take
Nimmt die erstenn
Elemente der Sequenz.Seq.init
Erstellt eine neue Sequenz mit einer Zählung (in diesem Fall) der Länge der Sequenzs
plus 1 und nimmt für jedes Element in der Sequenz die erste aufn
Elemente aufs
.Zweite Lösung:
Ähnlich wie zuvor, mit der Ausnahme, dass eine Sequenz von 0 bis zur Länge von erstellt wird
s
. Nimmt dann diese Anzahl von Elementen abs
.Versuchen Sie dies auch online!
quelle
fun s->Seq.map(fun n->Seq.take n s){0..Seq.length s}
spart 1 ByteMATL,
1512 Bytes3 Bytes gespart dank @Giuseppe
Probieren Sie es bei MATL Online aus .
Aufgrund der Art und Weise, wie MATL die Ausgabe anzeigt, können Sie das leere Array im Zellenarray nicht explizit sehen. Hier ist eine Version, die die Ausgabe etwas expliziter zeigt.
Erläuterung
quelle
v
anstelle von[]
. Und nicht:
verwendet1
als Standard erstes Argument? Dies könnte alsovin:"G@:)]Xh
für 12 Bytes sein.SWI PROLOG 22 Bytes
i(X,Y):-append(X,_,Y).
quelle
Holzkohle , 6 Bytes
Probieren Sie es online! Link ist eine ausführliche Version des Codes. Erläuterung:
Es ist möglich, Charcoal zu einem Preis von 1 Byte aufzufordern, ein
n+1
-element-Array zu drucken, das die Eingabe als letztes Element enthält, aber die Ausgabe ist dieselbe, obwohl die Cursorposition anders wäre, wenn Sie dann etwas anderes drucken würden.quelle
05AB1E , 3 Bytes
Erläuterung:
Probieren Sie es online!
quelle
RAD , 7 Bytes
Probieren Sie es online!
Dies funktioniert auch in Dyalog APL als Funktion.
Wie?
Dies funktioniert sowohl für APL als auch für RAD aufgrund ihrer engen Beziehung gleich.
(⊂⍬)
das leere Array,
vorangestellt,\
die Präfixe (die das leere Array ausschließen)quelle
Groovy , 37 Bytes
Probieren Sie es online!
quelle
{it.inits().reverse()}
wird funktionieren, sobald wir amJapt , 5 Bytes
Probieren Sie es online!
quelle
Brainfuck , 43 Bytes
Nehmen Sie eine Liste von Nicht-Null-Zeichen als Eingabe und geben Sie alle Präfixe durch Zeilenumbruch getrennt zurück. Benötigt doppelt unendlich oder Wickelband.
Probieren Sie es online!
quelle
C # (Visual C # Interactive Compiler) , 39 Byte
Probieren Sie es online!
quelle
System.Linq;
in Ihr bytecount aufnehmen. Und es scheint, dass ein Teil Ihrer Ausgabelogik in der Ausgabe der Arrays liegt. Da leeres Array nur leeres Array zurückgibt.System.Linq
, muss ich diesen nicht in die Byteanzahl aufnehmen. Meine Einreichung würde als eine andere Sprache angesehen als sagen.NET Core
. github.com/dotnet/roslyn/wiki/C%23-Interactive-Walkthrough - Sie erwähnen den Druck, der ein separates Problem darstellt. Ich möchte zunächst Klarheit darüber erlangen.Array
vsIList
vs zu verwendenIEnumerable
.F # (Mono) , 45 Bytes
Probieren Sie es online!
Ich bin mir nicht ganz sicher, ob dies gültig ist, aber es scheint, als ob es der gleichen "anonymen Lambda" -Syntax folgt, die ich anscheinend in mehreren anderen Sprachen verwendet habe.
quelle
Java 8+ ,
8677 Bytes-9 Bytes dank Kevin Cruijssen ( Abschaffung des Imports)!
Probieren Sie es online!
Alternative, 65 Bytes
Das Folgende wird die Ergebnisse auf stdout ausgeben (aufgrund von Olivier Grégoire ):
Probieren Sie es online aus
quelle
java.util.stream.IntStream
direkt verwenden und den Import fallenlassen.x->{for(int i=0;i<=x.size();)System.out.println(x.subList(0,i++));}
( 67 Bytes ). Dies wird gedruckt, anstatt Streams zu verwenden. Drucken ist normalerweise der kürzeste Weg, um komplexe Strukturen auszugeben.System.out.print
da die Ausgabe immer noch eindeutig ist.Brachylog , 9 Bytes
Probieren Sie es online!
Erläuterung
quelle
Rubin ,
3129 BytesProbieren Sie es online!
Erläuterung:
quelle