Beschreibung der Herausforderung
Zeigen Sie bei einer Liste / einem Array von Elementen alle Gruppen aufeinanderfolgender sich wiederholender Elemente an.
Eingabe / Ausgabe Beschreibung
Ihre Eingabe ist eine Liste / ein Array von Elementen (Sie können davon ausgehen, dass alle vom gleichen Typ sind). Sie müssen nicht jeden Typ unterstützen, den Ihre Sprache hat, sondern mindestens einen (vorzugsweise int
, aber Typen wie boolean
, obwohl nicht sehr interessant, sind auch in Ordnung). Beispielausgaben:
[4, 4, 2, 2, 9, 9] -> [[4, 4], [2, 2], [9, 9]]
[1, 1, 1, 2, 2, 3, 3, 3, 4, 4, 4, 4] -> [[1, 1, 1], [2, 2], [3, 3, 3], [4, 4, 4, 4]]
[1, 1, 1, 3, 3, 1, 1, 2, 2, 2, 1, 1, 3] -> [[1, 1, 1], [3, 3], [1, 1], [2, 2, 2], [1, 1], [3]]
[9, 7, 8, 6, 5] -> [[9], [7], [8], [6], [5]]
[5, 5, 5] -> [[5, 5, 5]]
['A', 'B', 'B', 'B', 'C', 'D', 'X', 'Y', 'Y', 'Z'] -> [['A'], ['B', 'B', 'B'], ['C'], ['D'], ['X'], ['Y', 'Y'], ['Z']]
[True, True, True, False, False, True, False, False, True, True, True] -> [[True, True, True], [False, False], [True], [False, False], [True, True, True]]
[0] -> [[0]]
Bei leeren Listen ist die Ausgabe undefiniert - es kann sich um nichts, eine leere Liste oder eine Ausnahme handeln - was auch immer für Ihre Golfzwecke am besten geeignet ist. Sie müssen auch keine separate Liste von Listen erstellen, daher ist dies auch eine absolut gültige Ausgabe:
[1, 1, 1, 2, 2, 3, 3, 3, 4, 9] ->
1 1 1
2 2
3 3 3
4
9
Das Wichtigste ist, die Gruppen auf irgendeine Weise getrennt zu halten.
quelle
int
s, das zum Beispiel durch s getrennt ist,0
wäre eine schlechte Idee, da es0
s in der Eingabe geben kann ...[4, 4, '', 2, 2, '', 9, 9]
oder[4, 4, [], 2, 2, [], 9, 9]
.Antworten:
Mathematica, 5 Bytes
... dafür ist etwas eingebaut.
quelle
Gelee , 5 Bytes
Funktioniert für alle numerischen Typen. Probieren Sie es online aus! oder überprüfen Sie alle numerischen Testfälle .
Wie es funktioniert
quelle
Netzhaut ,
158 BytesVielen Dank an Lynn für den Vorschlag eines einfacheren E / A-Formats.
Behandelt die Eingabe als Liste von Zeichen (und verwendet Zeilenvorschübe, um Gruppen zu trennen).
Probieren Sie es online aus!
Dies funktioniert einfach, indem Gruppen abgeglichen und alle gedruckt werden (wobei die Zeilenvorschubtrennung automatisch verwendet wird).
quelle
abbcccddd
→a bb ccc ddd
ein akzeptables E / A-Format ist, und das OP hat es genehmigt, also denke ich,!`(.)\1*
ist das in Ordnung?JavaScript (ES6),
3937 ByteFunktioniert mit durch Leerzeichen getrennten wortähnlichen Token. 2 Bytes dank @ MartinEnder ♦ gespeichert. Das Beste, was ich für die Eingabe und Rückgabe von Arrays tun kann, ist 68:
quelle
MATL , 9 Bytes
Die Eingabe ist ein Zeilenarray von Zahlen mit Leerzeichen oder Kommas als Trennzeichen.
Probieren Sie es online aus! Test mit nicht ganzzahligen Zahlen .
MATL, 11 Bytes
Die Eingabe ist ein Spaltenarray aus Zahlen oder Zeichen , das
;
als Trennzeichen verwendet wird.Probieren Sie es online aus! Test mit beliebigen Zahlen . Teste mit Charakteren .
quelle
gs2, 2 Bytes
Probieren Sie es online aus!
c
ist eine integrierte Gruppierung, die genau dies tut. Wir nennen sie also STDIN (eine Zeichenfolge, dh eine Liste von Zeichen) und erhalten eine Liste von Zeichenfolgen. Leider ist das Ergebnis nicht von der Eingabe zu unterscheiden, daher müssen wir Trennzeichen hinzufügen!-
(durch Leerzeichen verbinden) macht den Trick.Eine alternative Antwort ist
cα
(2 Bytes CP437), die einfachc
in eine anonyme Funktion eingebunden wird.quelle
Brachylog , 13 Bytes
Warnung: Dies ist äußerst ineffizient, und Sie werden in der Erklärung verstehen, warum.
Dies erwartet eine Liste (zB
[1:1:2:2:2]
) als Eingabe. Die Elemente in der Liste können so ziemlich alles sein.Erläuterung
Dies funktioniert nur aufgrund der Art und Weise, wie sich
s - Subset
vereinheitlicht: Die kleinsten Sätze sind am Ende. Daher stellt sich als erstes heraus, dass Verkettungen mit dem Eingang die längsten Läufe sind, z. B.[[1:1]:[2:2:2]]
und nicht zum Beispiel[[1:1]:[2:2]:[2]]
.quelle
J , 13 Bytes
Da J keine zerlumpten Arrays unterstützt, wird jeder Lauf gleicher Elemente eingerahmt. Die Eingabe ist ein Array von Werten und die Ausgabe ist ein Array von Boxed Arrays.
Verwendungszweck
Erläuterung
quelle
Dyalog APL , 9 Bytes
⊢
das Argument⊂⍨
, das am1
ersten Element partitioniert wurde,
und2≠/
bei dem sich nachfolgende Paare⊢
im Argument unterscheidenquelle
Python 2, 43 Bytes
Funktioniert mit Listen von Booleschen Werten. Beispiel:
Durchläuft die Eingabeliste und speichert das zuletzt gesehene Element. Vor jedem Element, das sich vom vorherigen unterscheidet, wird eine Trennleiste gedruckt, die als bitweise x oder
^
0 markiert ist. Beim Initialisieren wirdp=-1
ein Trennzeichen vor dem ersten Element vermieden.quelle
groupby
ist so ein Schmerz ...CJam, 9 Bytes
Zwei Lösungen:
Testen Sie es hier.
Erläuterung
Oder
quelle
Haskell, 22 Bytes
Es ist ein eingebauter. Funktioniert mit jedem Typ, der Gleichheit unterstützt.
quelle
MATL,
87 Bytes1 Byte dank @Suever entfernt
Funktioniert mit ganzen Zahlen / Floats / Zeichen / Booleschen Werten / Einhornpunkten / anderen imaginären Eingaben.
Für Boolesche Werte sind Eingaben
T/F
, Ausgaben1/0
.Probieren Sie es online aus!
Gruppiert und wiederholt
quelle
C #, 117 Bytes
ungolfed (nicht wirklich)
quelle
Pyth,
97 BytesGutschrift an @LeakyNun für 2 Byte!
Erläuterung:
Alte Antwort, 12 Bytes
Ich habe die eingebaute Lauflänge vergessen, aber ich denke, das ist ein guter Ansatz, also habe ich ihn beibehalten.
Erläuterung:
quelle
m
.Pyth ,
3635 BytesTestlink
Edit: Erklärung:
quelle
Netzhaut ,
2422 Bytes2 Bytes dank Martin Ender.
Es gibt bereits eine 15-Byte-Antwort , daher ist dies nur ein weiterer Ansatz, der mehr Bytes kostet.
Probieren Sie es online aus!
Es teilt sich in Leerzeichen auf, deren vorhergehende Nummer vom Verfahren abweicht.
Dies ist eine Demonstration von Lookarounds.
quelle
05AB1E, 13 Bytes
Erklärt
Sollte für jede Liste funktionieren.
Getestet auf int und char.
Probieren Sie es online aus
quelle
Schnell, 43 Bytes
Nimmt an, dass i ein Array von gleichwertigen Objekten ist; funktioniert für alles von Ints über Strings bis hin zu benutzerdefinierten Objekten. Ein bisschen frech, da die Ausgabe viele Zeilenumbrüche enthält, aber diese hübscher zu machen würde Bytes kosten.
Schönere, ungolfed Version:
Diese Version druckt jede Gruppe in einer neuen Zeile auf Kosten von mehr Code.
Ideen zur Verbesserung
Diese Version hat 47 Bytes, aber es ist ein anderer Ansatz. Vielleicht gibt es dort etwas zu optimieren? Das größte Problem ist die Rückgabeerklärung.
quelle
C
8877 BytesVerschob das
strmcmp
Innere derprintf
11 BytesVerwendungszweck:
Beispieleingabe:
(Befehlszeilenparameter)
Beispielausgabe:
Getestet am:
Ich versuche, den 5.3.0-Segmetationsfehler zu beheben.
88 Version
quelle
Java 134 Bytes
iteriert durch und entscheidet, ob mit einer neuen Zeile oder einem Leerzeichen getrennt werden soll.
quelle
public
undstatic
Schlüsselwörter entfernen . Sie können auch geschweifte Klammern in der Schleife entfernenListSharp , 134 Bytes
ListSharp unterstützt keine Funktionen, daher wird das Array in einer lokalen Datei namens aufgerufen
l.txt
quelle
Ruby , 24 Bytes
In Ruby haben
Array
Instanzen eine eingebaute Methodegroup_by
Die Lösung lautet also:
quelle
TSQL, 132 Bytes
Dies unterscheidet sich ein wenig von den anderen Antworten - SQL hat keine Arrays, die offensichtliche Eingabe für SQL ist eine Tabelle.
Golf:
Ungolfed:
Geige
quelle
Perl 5 - 39 Bytes
quelle
Pyke, 2 Bytes (nicht wettbewerbsfähig)
Unterstützt nur Ganzzahlen
Probieren Sie es hier aus!
Split_at-Knoten hinzugefügt, teilt die Eingabe auf, wenn das 2. Argument wahr ist
quelle
sed,
3323 + 1 = 24 BytesEs braucht die
-r
Option.Anwendungsbeispiel:
quelle
JavaScript (ES6), 56
Eingabe: Array von Zahlen oder Zeichenfolgen
Ausgabe: Array von Arrays
Zum ersten Mal mit genauem Vergleich im Golfcode
quelle
Clojure, 19 Bytes
Es ist integriert, benötigt jedoch eine Zuordnungsfunktion. In diesem Fall
+
dient als Identitätsfunktion.quelle
Javascript (mit externer Bibliothek) (178 Bytes)
Haftungsausschluss: Ich verwende eine Bibliothek, die ich geschrieben habe, um LINQ von C # in JS zu implementieren. Es hat mir nicht gerade geholfen zu gewinnen, aber na ja
quelle