Le regroupement prend une liste et la divise en nouvelles listes d'éléments adjacents égaux. Par exemple
[1,1,2,1,1] -> [[1,1],[2],[1,1]]
Si vous prenez ensuite la longueur de ces groupes, vous obtenez une nouvelle liste d'entiers
[1,1,2,1,1] -> [2,1,2]
Votre tâche consiste à écrire un programme qui prend une liste d'entiers positifs et à trouver le nombre de fois que vous pouvez le grouper et le longueur avant que la liste résultante ait un seul élément. Par exemple la liste [1,2,3,3,2,1]
peut être regroupée 4 fois
[1,2,3,3,2,1]
[1,1,2,1,1]
[2,1,2]
[1,1,1]
[3]
Il s'agit de code-golf, donc les réponses seront notées en octets, moins d'octets seront meilleurs.
Cas de test
[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
Post Rock Garf Hunter
la source
la source
[1]
est une entrée valide et devrait donner0
, correct?Réponses:
Haskell, 49 octets
Essayez-le en ligne!
la source
CJam , 18 octets
Essayez-le en ligne!
la source
Japt , 12 octets
Testez-le en ligne!
Explication
La récursivité est une approche vraiment non conventionnelle pour Japt, mais elle semble être 4 octets plus courte que la prochaine alternative ...
la source
F.a()
est toujours accessible via l'historique des révisions. Je serais ravi de voir votre 14 octets!Brachylog , 12 octets
Essayez-le en ligne!
Explication
la source
C (gcc) , 108 octets
Essayez-le en ligne!
Explication
Essayez-le en ligne!
la source
JavaScript (ES6),
676563 octetsCurieusement, JavaScript et Japt semblent avoir le même algorithme le plus court pour une fois ...
la source
K (oK) ,
2019 octetsSolution:
Essayez-le en ligne!
Exemples:
Explication:
Celui-ci est assez simple, je me demande s'il existe une approche encore meilleure ... Trouvez les indices où l'entrée diffère, divisez-les en fonction de ces indices, puis comptez la longueur de chaque sous-liste. Itérer jusqu'à ce que les résultats convergent vers 1.
Remarques:
La solution suivante de 14 octets fonctionne pour tous sauf une liste à un seul élément:
Essayez-le en ligne!
la source
J ,
2523 octets1 octet sauvé grâce au streetster
1 octet économisé grâce à FrownyFrog
Essayez-le en ligne!
Solution initiale:
Essayez-le en ligne!
Explication
la source
_2+
d'enregistrer un octet?#;.1@(0,2=/\])
sauve 1 octet.Stax , 9 octets
Exécutez-le et déboguez-le en ligne
La représentation ascii du même programme est la suivante.
Cela utilise une fonction de stax appelée générateur qui produit de la valeur en fonction des blocs de transformation et de filtre.
la source
Python 2 , 84 octets
Essayez-le en ligne!
Comment?
f
est une fonction récursive qui, si elle est entrée,a
a une longueur de 2 ou plus (len(a)>1
) renvoie1+f(x)
* oùx
est la longueur des groupes dea
; tandis que si son entrée est de longueur 1 ou 0 retourneFalse
(égal à 0 en Python) - c'est parce que le côté droit duand
n'est pas évalué lorsque le gauche est falsey.*
-~f(x)
est-(-1 - f(x))
mais peut buter sur leand
contraire1+f(x)
ouf(x)+1
)Les longueurs de groupe sont calculées en créant du code qui est ensuite évalué avec
eval(...)
. Le code créé est quelque chose1,1,1+1+1,1,1+1,1,
qui ressemble à un tuple(1,1,3,1,2,1)
.Le code est créé en zippant à travers
a
eta
sans sa tête (en...for x, y in zip(a,a[1:])
faisantx
ety
chacune des paires adjacentes dedansa
. Si la paire est égale estx==y
évaluée àTrue
(1) sinonFalse
(0) - ce résultat est utilisé pour indexer dans la chaîne,+
donnant+
et,
respectivement et chaque caractère résultant est précédé d'un1
('1'+...
) - la chose a alors une finale, en fin de chaîne1,
. en annexe par exemple , sia
on[5,5,2,9,9,9]
alors lesx,y
paires seraient(5,5)(5,2)(2,9)(9,9)(9,9)
faire les égalités10011
alors les personnages seraient+,,++
, qui , avec le précédent1
s devient1+1,1,1+1+
et la fuite finale1,
prise1+1,1,1+1+1,
qui évalue au(2,1,3)
besoin.Notez que la fin
,
garantit qu'une entrée avec un seul groupe est évaluée comme un tuple plutôt que comme un entier (c'est[3,3]
-à- dire ->1+1,
->(2)
plutôt que[3,3]
->1+1
->2
)la source
CJam , 19 octets
Essayez-le en ligne!
la source
CJam , 20 octets
Essayez-le en ligne!
la source
Perl 5 ,
53504945 octetsComprend
+3
pour-p
Donnez la liste des nombres sur une seule ligne sur STDIN
Essayez-le en ligne!
la source
Husk , 8 octets
-1 octet grâce à @Zgarb!
Essayez-le en ligne!
Explication
la source
←Vε
est une vérification plus courte pour trouver l'index de la liste singleton.Gelée , 10 octets
Essayez-le en ligne!
la source
[1]
. Vous devriez être en mesure de le réparer en utilisant deux dequeues / apparaît au lieu de_2
ÐĿ
n'était pas un bon choix en premier lieu ... Il l'a remplacé par une boucle while.05AB1E , 9 octets
Essayez-le en ligne!
Explication
la source
Wolfram Language (Mathematica) , 32 octets
Enregistré 2 octets grâce à Martin Ender. Utilisation du codage CP-1252, où
±
est un octet.Essayez-le en ligne!
la source
±{_}=0;±x_:=1+±(Length/@Split@x)
(en supposant l'WindowsANSI
encodage)Rubis ,
54 56 5554 octetsEssayez-le en ligne!
la source
SmileBASIC,
110108 octetsFonction d'appel comme
R list,0
; la sortie est imprimée sur la console.la source
Python 2 , 85 octets
Essayez-le en ligne!
la source
R ,
5145 octetsEssayez-le en ligne!
Prenez récursivement la longueur de l'encodage de la longueur d'exécution et incrémentez le compteur.
la source
Retina 0.8.2 , 31 octets
Essayez-le en ligne! Le lien inclut des cas de test. Explication:
S'il y a une virgule, nous allons faire une autre itération, alors ajoutez un caractère de comptage.
Remplacez chaque série par sa longueur décrémentée. Les étapes ci-dessus se répètent jusqu'à ce qu'il n'y ait plus de virgule.
Comptez le nombre d'itérations.
la source
Perl 6 , 52 octets
Essaye-le
Étendu:
la source
Brain-Flak , 78 octets
Essayez-le en ligne!
la source
Pyth , 9 octets
Suite de tests!
la source
Kotlin , 123 octets
Accepte
List<Int>
.Plus lisible:
Essayez-le en ligne!
131 octets, TIO
181 octets, TIO
Comprend 39 pour
import kotlin.coroutines.experimental.*
.la source
Rouge , 140 octets
Essayez-le en ligne!
Je voulais juste essayer le dialecte Red's Parse.
Non golfé
la source