Description du défi
Étant donné une liste / tableau d'éléments, affichez tous les groupes d'éléments répétitifs consécutifs.
Description des entrées / sorties
Votre entrée est une liste / tableau d'éléments (vous pouvez supposer que tous sont du même type). Vous n'avez pas besoin de prendre en charge tous les types de votre langue, mais vous devez en prendre au moins un (de préférence int
, mais des types comme boolean
, bien que pas très intéressants, conviennent également). Exemples de sorties:
[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]]
En ce qui concerne les listes vides, la sortie n'est pas définie - il peut s'agir de rien, d'une liste vide ou d'une exception - tout ce qui convient le mieux à vos besoins de golf. Vous n'avez pas non plus à créer une liste de listes distincte, il s'agit donc également d'une sortie parfaitement valide:
[1, 1, 1, 2, 2, 3, 3, 3, 4, 9] ->
1 1 1
2 2
3 3 3
4
9
L'important est de maintenir les groupes séparés d'une manière ou d'une autre.
la source
int
s séparés par, par exemple,0
s serait une mauvaise idée car il peut y avoir des0
s dans l'entrée ...[4, 4, '', 2, 2, '', 9, 9]
ou[4, 4, [], 2, 2, [], 9, 9]
.Réponses:
Mathematica, 5 octets
... il y a une fonction intégrée pour cela.
la source
Gelée , 5 octets
Fonctionne pour tous les types numériques. Essayez-le en ligne! ou vérifiez tous les cas de test numériques .
Comment ça fonctionne
la source
Rétine ,
158 octetsMerci à Lynn d'avoir proposé un format d'E / S plus simple.
Traite l'entrée comme une liste de caractères (et utilise des sauts de ligne pour séparer les groupes).
Essayez-le en ligne!
Cela fonctionne simplement en faisant correspondre les groupes et en les imprimant tous (qui utilise automatiquement la séparation de saut de ligne).
la source
abbcccddd
→a bb ccc ddd
un format d'E / S acceptable et l'OP l'a approuvé, donc je suppose que ça!`(.)\1*
va?JavaScript (ES6),
3937 octetsFonctionne sur tous les jetons de type mot séparés par des espaces. Enregistré 2 octets grâce à @ MartinEnder ♦. Le mieux que je puisse faire pour l'entrée et le retour du tableau est 68:
la source
MATL , 9 octets
L'entrée est un tableau de nombres , avec des espaces ou des virgules comme séparateurs.
Essayez-le en ligne! Testez avec des nombres non entiers .
MATL, 11 octets
L'entrée est un tableau de colonnes de chiffres ou de caractères , utilisé
;
comme séparateur.Essayez-le en ligne! Testez avec des nombres arbitraires . Testez avec des personnages .
la source
gs2, 2 octets
Essayez-le en ligne!
c
est un regroupement intégré qui fait exactement cela, nous l'appelons donc sur STDIN (qui est une chaîne, c'est-à-dire une liste de caractères) et obtenons une liste de chaînes. Malheureusement, le résultat est indiscernable de l'entrée, nous devons donc ajouter des séparateurs!-
(joindre par des espaces) fait l'affaire.Une autre réponse est
cα
(2 octets de CP437), qui encapsule simplementc
une fonction anonyme.la source
Brachylog , 13 octets
Attention: c'est extrêmement inefficace, et vous comprendrez pourquoi dans l'explication.
Cela attend une liste (par exemple
[1:1:2:2:2]
) en entrée. Les éléments de la liste peuvent être à peu près n'importe quoi.Explication
Cela ne fonctionne qu'à cause de la façon dont les
s - Subset
unités s'unissent: les plus petits ensembles sont à la fin. Par conséquent, la première chose qu'il trouve qui concatène à l'entrée sont les plus longues séries, par exemple[[1:1]:[2:2:2]]
et non par exemple[[1:1]:[2:2]:[2]]
.la source
J , 13 octets
Étant donné que J ne prend pas en charge les tableaux irréguliers, chaque série d'éléments égaux est encadrée. L'entrée est un tableau de valeurs et la sortie est un tableau de tableaux encadrés.
Usage
Explication
la source
Dyalog APL , 9 octets
⊢
l'argument⊂⍨
partitionné au1
premier élément,
, puis2≠/
là où les paires suivantes diffèrent⊢
dans l'argumentla source
Python 2, 43 octets
Fonctionne sur les listes de booléens. Exemple:
Itère dans la liste d'entrée, stockant le dernier élément vu. Une barre de séparation est imprimée avant chaque élément différent du précédent, vérifiée comme ayant un xor au niveau
^
du bit de 0. L'initialisationp=-1
évite un séparateur avant le premier élément.la source
groupby
est une telle douleur ...CJam, 9 octets
Deux solutions:
Testez-le ici.
Explication
Ou
la source
Haskell, 22 octets
Il y a un intégré. Fonctionne sur tout type prenant en charge l'égalité.
la source
MATL,
87 octetsSuppression de 1 octet grâce à @Suever
Fonctionne avec des entiers / flottants / caractères / booléens / points licorne / autres entrées imaginaires.
Pour les booléens, les entrées sont
T/F
, les sorties sont1/0
.Essayez-le en ligne!
Regroupés et répétés
la source
C #, 117 octets
non golfé (pas vraiment)
la source
Pyth,
97 octetsCrédit à @LeakyNun pour 2 octets!
Explication:
Ancienne réponse, 12 octets
J'ai oublié la longueur de course intégrée, mais je pense que c'est une approche correcte, donc je l'ai gardée.
Explication:
la source
m
.Pyth ,
3635 octetsLien de test
Edit: explication:
la source
Rétine ,
2422 octets2 octets grâce à Martin Ender.
Une réponse de 15 octets existe déjà, il ne s'agit donc que d'une autre approche qui coûte plus d'octets.
Essayez-le en ligne!
Il se divise en espaces dont le nombre précédent diffère de la procédure.
Il s'agit d'une démonstration de contournements.
la source
05AB1E, 13 octets
Expliqué
Devrait fonctionner pour n'importe quelle liste.
Testé sur int et char.
Essayez-le en ligne
la source
Swift, 43 octets
Suppose que i est un tableau d'objets équables; fonctionne pour tout, des entiers aux chaînes en passant par les objets personnalisés. Un peu effronté en ce que la sortie contient beaucoup de nouvelles lignes, mais rendre cette plus jolie coûterait des octets.
Version plus jolie et non golfée:
Cette version imprime chaque groupe sur une nouvelle ligne au détriment de plus de code.
Idées d'amélioration
Cette version a 47 octets, mais c'est une approche différente, alors peut-être qu'il y a quelque chose à optimiser là-bas? Le plus gros problème est la déclaration de retour.
la source
C,
8877 octetsDéplacé le
strmcmp
intérieur desprintf
11 octets d'économieUsage:
Exemple d'entrée:
(Paramètres de ligne de commande)
Exemple de sortie:
Testé sur:
J'essaie de corriger le défaut de Segmetation 5.3.0.
Version 88
la source
Java 134 octets
itère à travers et décide de séparer avec une nouvelle ligne ou un espace.
la source
public
etstatic
mots clés. vous pouvez également supprimer les accolades pour la boucleListSharp , 134 octets
ListSharp ne prend pas en charge les fonctions, le tableau est donc enregistré dans un fichier local appelé
l.txt
la source
Rubis , 24 octets
En rubis
Array
instances ont une méthode intégréegroup_by
La solution sera donc:
la source
TSQL, 132 octets
C'est un peu différent des autres réponses - sql n'a pas de tableaux, l'entrée évidente pour sql est un tableau.
Golfé:
Non golfé:
Violon
la source
Perl 5 - 39 octets
la source
Pyke, 2 octets (non compétitif)
Ne prend en charge que les entiers
Essayez-le ici!
Ajout du nœud split_at, divise l'entrée lorsque le deuxième argument est vrai
la source
sed,
3323 + 1 = 24 octetsIl a besoin de l'
-r
option.Exemple d'utilisation:
la source
JavaScript (ES6), 56
Entrée: tableau de nombres ou de chaînes
Sortie: tableau de tableaux
Première utilisation de la comparaison exacte dans le code de golf
la source
Clojure, 19 octets
C'est intégré, mais cela prend une fonction de cartographie. Dans ce cas,
+
sert de fonction d'identité.la source
Javascript (en utilisant une bibliothèque externe) (178 octets)
Avertissement: j'utilise une bibliothèque que j'ai écrite pour implémenter LINQ de C # dans JS. Ça ne m'a pas vraiment aidé à gagner mais bon
la source