Beim Gruppieren wird eine Liste erstellt und in neue Listen gleicher benachbarter Elemente aufgeteilt. Beispielsweise
[1,1,2,1,1] -> [[1,1],[2],[1,1]]
Wenn Sie dann die Länge dieser Gruppen nehmen, erhalten Sie eine neue Liste von ganzen Zahlen
[1,1,2,1,1] -> [2,1,2]
Ihre Aufgabe ist es, ein Programm zu schreiben, das eine Liste positiver Ganzzahlen erstellt und feststellt, wie oft Sie diese gruppieren und verlängern können, bevor die resultierende Liste ein einzelnes Element enthält. Beispielsweise kann die Liste [1,2,3,3,2,1]
viermal neu gruppiert werden
[1,2,3,3,2,1]
[1,1,2,1,1]
[2,1,2]
[1,1,1]
[3]
Dies ist Codegolf, daher werden die Antworten in Bytes bewertet, wobei weniger Bytes besser sind.
Testfälle
[1,2,3,3,2,1] -> 4
[1,2,3,4,5,6,7] -> 2
[1,1,1,1,1,1] -> 1
[2] -> 0
[1,2,4] -> 2
[1,2,2,1,1,2] -> 4
[1,2,2,1,1,2,1,2,2] -> 5
[1] -> 0
code-golf
array-manipulation
Weizen-Assistent
quelle
quelle
[1]
ist eine gültige eingabe und sollte geben0
, richtig?Antworten:
Haskell, 49 Bytes
Probieren Sie es online!
quelle
CJam , 18 Bytes
Probieren Sie es online!
quelle
Japt , 12 Bytes
Online testen!
Erläuterung
Rekursion ist für Japt ein wirklich unkonventioneller Ansatz, scheint aber 4 Byte kürzer zu sein als die nächste Alternative ...
quelle
F.a()
noch über den Revisionsverlauf zugegriffen werden . Ich würde aber gerne Ihren 14-Byter sehen!Brachylog , 12 Bytes
Probieren Sie es online!
Erläuterung
quelle
C (gcc) , 108 Bytes
Probieren Sie es online!
Erläuterung
Probieren Sie es online!
quelle
JavaScript (ES6),
676563 BytesMerkwürdigerweise scheinen JavaScript und Japt einmal den gleichen kürzesten Algorithmus zu haben ...
quelle
K (oK) ,
20& ndash ; 19 BytesLösung:
Probieren Sie es online!
Beispiele:
Erläuterung:
Dieser ist ziemlich einfach, ich frage mich, ob es einen noch besseren Ansatz gibt ... Finde die Indizes, bei denen sich die Eingabe unterscheidet, teile sie an diesen Indizes auf und zähle dann die Länge jeder Unterliste. Iterieren Sie, bis die Ergebnisse zu 1 konvergieren.
Anmerkungen:
Die folgende 14-Byte- Lösung funktioniert mit Ausnahme einer Einzelpostenliste für alle :
Probieren Sie es online!
quelle
J ,
2523 Bytes1 Byte gespart dank Streetster
Dank FrownyFrog wird 1 Byte gespeichert
Probieren Sie es online!
Anfangslösung:
Probieren Sie es online!
Erläuterung
quelle
_2+
ein Byte zu speichern?#;.1@(0,2=/\])
spart 1 Byte.Stax , 9 Bytes
Führen Sie es online aus und debuggen Sie es
Die ASCII-Darstellung des gleichen Programms ist dies.
Dies verwendet eine stax-Funktion, die als Generator bezeichnet wird und Wert gemäß Transformations- und Filterblöcken erzeugt.
quelle
Python 2 , 84 Bytes
Probieren Sie es online!
Wie?
f
ist eine rekursive Funktion, deren Eingabea
die Länge 2 oder mehr hat. (len(a)>1
) gibt1+f(x)
* zurück. Dabeix
ist die Gruppenlänge vona
; Wenn die Eingabe jedoch Länge 1 oder 0 ist, wird zurückgegebenFalse
(in Python 0). Dies liegt daran, dass die rechte Seite derand
nicht ausgewertet wird, wenn die linke Seite falsch ist.*
-~f(x)
ist-(-1 - f(x))
aber kann dasand
anders1+f(x)
oder anstoßenf(x)+1
)Die Gruppenlängen werden berechnet, indem Code erstellt wird, der dann mit ausgewertet wird
eval(...)
. Der erzeugte Code ist so etwas wie1,1,1+1+1,1,1+1,1,
ein Tupel wie ausgewertet(1,1,3,1,2,1)
.Der Code wird durch Komprimieren durch erstellt
a
unda
ohne den Kopf (...for x, y in zip(a,a[1:])
Herstellungx
undy
jedes der benachbarten Paare ina
Wenn das Paar gleich sind.x==y
ErgibtTrue
(1) andernfallsFalse
(0) - Dieses Ergebnis Index in der Zeichenfolge verwendet wird ,,+
ergibt ,+
und,
jeweils sind und jeweils resultierende Zeichen wird durch ein voran1
('1'+...
) - das ganze dann ein abschließender hat, nachlaufenden1,
. wenn hängten Zum Beispiela
wurden[5,5,2,9,9,9]
dann diex,y
würden Paare(5,5)(5,2)(2,9)(9,9)(9,9)
Herstellung der Gleichheiten10011
dann wären die Zeichen+,,++
, das mit dem vorhergehenden1
s wird1+1,1,1+1+
und die letzte nachlauf1,
making1+1,1,1+1+1,
die nach(2,1,3)
Bedarf auswertet .Beachten Sie, dass das Trailing
,
sicherstellt, dass eine Eingabe mit einer einzelnen Gruppe als Tupel und nicht als Ganzzahl ausgewertet wird (dh[3,3]
->1+1,
->(2)
und nicht[3,3]
->1+1
->2
).quelle
CJam , 19 Bytes
Probieren Sie es online!
quelle
CJam , 20 Bytes
Probieren Sie es online!
quelle
Perl 5 ,
53504945 BytesBeinhaltet
+3
für-p
Geben Sie die Liste der Zahlen als eine Zeile in STDIN an
Probieren Sie es online!
quelle
Schale , 8 Bytes
-1 Byte dank @Zgarb!
Probieren Sie es online!
Erläuterung
quelle
←Vε
Dies ist eine kürzere Überprüfung, um den Index der Singleton-Liste zu finden.Gelee , 10 Bytes
Probieren Sie es online!
quelle
[1]
. Sie sollten in der Lage sein, es mit zwei Dequeues / Pops zu beheben, anstatt_2
ÐĿ
war in erster Linie keine gute Wahl ... Ersetzte es durch eine while-Schleife.05AB1E , 9 Bytes
Probieren Sie es online!
Erläuterung
quelle
Wolfram-Sprache (Mathematica) , 32 Byte
2 Bytes gespart dank Martin Ender. Bei Verwendung der CP-1252-Codierung
±
ist ein Byte erforderlich.Probieren Sie es online!
quelle
±{_}=0;±x_:=1+±(Length/@Split@x)
(unter der Annahme derWindowsANSI
Codierung)Ruby ,
54 56 5554 BytesProbieren Sie es online!
quelle
SmileBASIC,
110108 BytesFunktion aufrufen als
R list,0
; Die Ausgabe wird auf die Konsole gedruckt.quelle
Python 2 , 85 Bytes
Probieren Sie es online!
quelle
R ,
5145 BytesProbieren Sie es online!
Nehmen Sie rekursiv die Länge der Lauflängencodierung und erhöhen Sie den Zähler.
quelle
Retina 0.8.2 , 31 Bytes
Probieren Sie es online! Link enthält Testfälle. Erläuterung:
Wenn es ein Komma gibt, werden wir eine weitere Iteration durchführen. Fügen Sie also ein Zählzeichen an.
Ersetzen Sie jeden Durchgang durch seine dekrementierte Länge. Die obigen Schritte wiederholen sich, bis keine Kommas mehr vorhanden sind.
Zählen Sie die Anzahl der Iterationen.
quelle
Perl 6 , 52 Bytes
Probier es aus
Erweitert:
quelle
Gehirn-Flak , 78 Bytes
Probieren Sie es online!
quelle
Pyth , 9 Bytes
Testsuite!
quelle
Kotlin , 123 Bytes
Akzeptiert
List<Int>
.Besser lesbar:
Probieren Sie es online!
131 Bytes, TIO
181 Bytes, TIO
Beinhaltet 39 für
import kotlin.coroutines.experimental.*
.quelle
Rot , 140 Bytes
Probieren Sie es online!
Ich wollte Reds Parse-Dialekt nur noch einmal ausprobieren.
Ungolfed
quelle