Descripción del desafío
Dada una lista / matriz de elementos, muestra todos los grupos de elementos repetidos consecutivos.
Descripción de entrada / salida
Su entrada es una lista / matriz de elementos (puede suponer que todos son del mismo tipo). No necesita admitir todos los tipos que tiene su idioma, pero debe admitir al menos uno (preferiblemente int
, pero tipos como boolean
, aunque no muy interesantes, también están bien). Resultados de muestra:
[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 cuanto a las listas vacías, la salida no está definida, puede ser nada, una lista vacía o una excepción, lo que mejor se adapte a sus propósitos de golf. Tampoco tiene que crear una lista separada de listas, por lo que este también es un resultado perfectamente válido:
[1, 1, 1, 2, 2, 3, 3, 3, 4, 9] ->
1 1 1
2 2
3 3 3
4
9
Lo importante es mantener a los grupos separados de alguna manera.
code-golf
array-manipulation
shooqie
fuente
fuente
int
s por separado, por ejemplo,0
s sería una mala idea ya que no puede haber0
s en la entrada ...[4, 4, '', 2, 2, '', 9, 9]
o[4, 4, [], 2, 2, [], 9, 9]
.Respuestas:
Mathematica, 5 bytes
... hay un incorporado para eso.
fuente
Jalea , 5 bytes
Funciona para todos los tipos numéricos. Pruébalo en línea! o verificar todos los casos de prueba numérica .
Cómo funciona
fuente
Retina ,
158 bytesGracias a Lynn por sugerir un formato de E / S más simple.
Trata la entrada como una lista de caracteres (y usa saltos de línea para separar grupos).
Pruébalo en línea!
Esto simplemente funciona haciendo coincidir grupos e imprimiéndolos todos (que usa la separación de salto de línea automáticamente).
fuente
abbcccddd
→a bb ccc ddd
ser un formato de E / S aceptable, y el OP lo aprobó, ¿así que supongo que!`(.)\1*
está bien?JavaScript (ES6),
3937 bytesFunciona en cualquier token de palabras separadas por espacios. Guardado 2 bytes gracias a @ MartinEnder ♦. Lo mejor que puedo hacer para la entrada de matriz y el retorno es 68:
fuente
MATL , 9 bytes
La entrada es una serie de filas de números , con espacios o comas como separadores.
Pruébalo en línea! Prueba con números no enteros .
MATL, 11 bytes
La entrada es una matriz de columnas de números o caracteres , que se usa
;
como separador.Pruébalo en línea! Prueba con números arbitrarios . Prueba con personajes .
fuente
gs2, 2 bytes
Pruébalo en línea!
c
es una agrupación integrada que hace exactamente esto, por lo que lo llamamos en STDIN (que es una cadena, es decir, una lista de caracteres) y obtenemos una lista de cadenas. Lamentablemente, el resultado es indistinguible de la entrada, por lo que debemos agregar separadores.-
(unirse por espacios) hace el truco.Una respuesta alternativa es
cα
(2 bytes de CP437), que simplemente se ajustac
a una función anónima.fuente
Brachylog , 13 bytes
Advertencia: esto es extremadamente ineficiente, y entenderá por qué en la explicación.
Esto espera una lista (por ejemplo
[1:1:2:2:2]
) como entrada. Los elementos dentro de la lista pueden ser prácticamente cualquier cosa.Explicación
Esto funciona solo por la forma en que se
s - Subset
unifica: los conjuntos más pequeños están al final. Por lo tanto, lo primero que encuentra que se concatena con la entrada son las ejecuciones más largas, por ejemplo,[[1:1]:[2:2:2]]
y no por ejemplo[[1:1]:[2:2]:[2]]
.fuente
J , 13 bytes
Como J no admite matrices irregulares, cada ejecución de elementos iguales está encuadrada. La entrada es una matriz de valores y la salida es una matriz de matrices en caja.
Uso
Explicación
fuente
Dyalog APL , 9 bytes
⊢
el argumento⊂⍨
particionado en1
el primer elemento,
y luego2≠/
donde los pares posteriores difieren⊢
en el argumentofuente
Python 2, 43 bytes
Funciona en listas de booleanos. Ejemplo:
Itera a través de la lista de entrada, almacenando el último elemento visto. Se imprime una barra separadora antes de cada elemento que es diferente a la anterior, verificada como que tiene bit xor
^
de 0. La inicializaciónp=-1
evita un separador antes del primer elemento.fuente
groupby
sea un dolor ...CJam, 9 bytes
Dos soluciones:
Pruébalo aquí.
Explicación
O
fuente
Haskell, 22 bytes
Hay un incorporado. Funciona en cualquier tipo que sea compatible con la igualdad.
fuente
MATL,
87 bytesEliminado 1 byte gracias a @Suever
Funciona con enteros / flotantes / caracteres / booleanos / puntos de unicornio / otras entradas imaginarias.
Para booleanos, las entradas son
T/F
, las salidas son1/0
.Pruébalo en línea!
Agrupado y repetido
fuente
C #, 117 bytes
sin golf (no realmente)
fuente
Pyth,
97 bytes¡Crédito a @LeakyNun por 2 bytes!
Explicación:
Respuesta anterior, 12 bytes
Olvidé la longitud de ejecución incorporada, pero creo que este es un enfoque correcto, así que lo mantuve.
Explicación:
fuente
m
.Pyth ,
3635 bytesEnlace de prueba
Editar: explicación:
fuente
Retina ,
2422 bytes2 bytes gracias a Martin Ender.
Una respuesta 15 bytes ya existe, por lo que este es sólo otro enfoque que cuesta más bytes.
Pruébalo en línea!
Se divide en espacios cuyo número anterior difiere del procedimiento.
Esta es una demostración de lookarounds.
fuente
05AB1E, 13 bytes
Explicado
Debería funcionar para cualquier lista.
Probado en int y char.
Pruébalo en línea
fuente
Swift, 43 bytes
Supone que i es una matriz de objetos equiparables; funciona para cualquier cosa, desde ints hasta cadenas y objetos personalizados. Un poco descarado, ya que la salida contiene muchas líneas nuevas, pero hacerla más bonita costaría bytes.
Versión más bonita y sin golf:
Esta versión imprime cada grupo en una nueva línea a expensas de más código.
Ideas para mejorar
Esta versión tiene 47 bytes, pero es un enfoque diferente, ¿quizás hay algo para optimizar allí? El mayor problema es la declaración de devolución.
fuente
C,
8877 bytesMovido el
strmcmp
interior de losprintf
11 bytes de ahorroUso:
Entrada de muestra:
(parámetros de línea de comando)
Salida de muestra:
Probado en:
Estoy tratando de arreglar la falla de segmentación 5.3.0.
88 Versión
fuente
Java 134 bytes
itera y decide si se separa con una nueva línea o un espacio.
fuente
public
ystatic
palabras clave. También puede quitar las llaves en el bucle forListSharp , 134 bytes
ListSharp no admite funciones, por lo que la matriz se guarda en un archivo local llamado
l.txt
fuente
Rubí , 24 bytes
En
Array
instancias de ruby tienen un método incorporadogroup_by
Entonces la solución será:
fuente
TSQL, 132 bytes
Esto es un poco diferente de las otras respuestas: sql no tiene matrices, la entrada obvia para sql es una tabla.
Golfizado:
Sin golf:
Violín
fuente
Perl 5-39 bytes
fuente
Pyke, 2 bytes (no competitivo)
Solo admite enteros
Pruébalo aquí!
Se agregó el nodo split_at, divide la entrada cuando el segundo argumento es verdadero
fuente
sed,
3323 + 1 = 24 bytesNecesita la
-r
opciónEjemplo de uso:
fuente
JavaScript (ES6), 56
Entrada: conjunto de números o cadenas
Salida: matriz de matrices
Primera vez que usa una comparación exacta en código de golf
fuente
Clojure, 19 bytes
Es una función integrada, pero requiere una función de mapeo. En este caso,
+
sirve como una función de identidad.fuente
Javascript (usando una biblioteca externa) (178 bytes)
Descargo de responsabilidad: estoy usando una biblioteca que escribí para implementar LINQ de C # en JS. No me ayudó exactamente a ganar, pero bueno
fuente