Descrição do Desafio
Dada uma lista / matriz de itens, exiba todos os grupos de itens repetidos consecutivos.
Descrição de entrada / saída
Sua entrada é uma lista / matriz de itens (você pode assumir que todos são do mesmo tipo). Você não precisa dar suporte a todos os tipos que seu idioma possui, mas deve suportar pelo menos um (de preferência int
, mas tipos como boolean
, embora não sejam muito interessantes, também são bons). Saídas de amostra:
[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]]
Quanto às listas vazias, a saída é indefinida - não pode ser nada, uma lista vazia ou uma exceção - o que melhor se adapte aos seus objetivos de golfe. Você também não precisa criar uma lista separada de listas, portanto, essa é uma saída perfeitamente válida:
[1, 1, 1, 2, 2, 3, 3, 3, 4, 9] ->
1 1 1
2 2
3 3 3
4
9
O importante é manter os grupos separados de alguma forma.
code-golf
array-manipulation
shooqie
fonte
fonte
int
s separados por, por exemplo,0
s seria uma má idéia, pois pode haver0
s na entrada ...[4, 4, '', 2, 2, '', 9, 9]
ou[4, 4, [], 2, 2, [], 9, 9]
.Respostas:
Mathematica, 5 bytes
... há um built-in para isso.
fonte
Gelatina , 5 bytes
Funciona para todos os tipos numéricos. Experimente online! ou verifique todos os casos de teste numéricos .
Como funciona
fonte
Retina ,
158 bytesAgradecemos a Lynn por sugerir um formato de E / S mais simples.
Trata a entrada como uma lista de caracteres (e usa alimentações de linha para separar grupos).
Experimente online!
Isso simplesmente funciona combinando grupos e imprimindo todos (que usa a separação de alimentação de linha automaticamente).
fonte
abbcccddd
→a bb ccc ddd
ser um formato de E / S aceitável e o OP aprovado, então acho que!`(.)\1*
está bem?JavaScript (ES6),
3937 bytesFunciona em quaisquer tokens semelhantes a palavras, separados por espaço. Economizou 2 bytes graças a @ MartinEnder ♦. O melhor que eu poderia fazer para a entrada e o retorno da matriz é 68:
fonte
MATL , 9 bytes
A entrada é uma matriz de números de linhas , com espaços ou vírgulas como separadores.
Experimente online! Teste com números não inteiros .
MATL, 11 bytes
A entrada é uma matriz de colunas de números ou caracteres , usando
;
como separador.Experimente online! Teste com números arbitrários . Teste com caracteres .
fonte
gs2, 2 bytes
Experimente online!
c
é um agrupamento interno que faz exatamente isso, por isso chamamos STDIN (que é uma string, ou seja, uma lista de caracteres) e obtemos uma lista de strings. Infelizmente, o resultado é indistinguível da entrada, por isso precisamos adicionar separadores!-
(junção por espaços) faz o truque.Uma resposta alternativa é
cα
(2 bytes do CP437), que simplesmente envolvec
uma função anônima.fonte
Braquilog , 13 bytes
Aviso: isso é extremamente ineficiente e você entenderá o porquê da explicação.
Isso espera uma lista (por exemplo
[1:1:2:2:2]
) como entrada. Os elementos dentro da lista podem ser praticamente qualquer coisa.Explicação
Isso funciona apenas por causa da maneira como os
s - Subset
unifica: os menores conjuntos estão no final. Portanto, a primeira coisa que acha que concatena com a entrada é a execução mais longa, por exemplo,[[1:1]:[2:2:2]]
e não por exemplo[[1:1]:[2:2]:[2]]
.fonte
J , 13 bytes
Como J não suporta matrizes irregulares, cada execução de elementos iguais é encaixotada. A entrada é uma matriz de valores e a saída é uma matriz de matrizes in a box.
Uso
Explicação
fonte
Dyalog APL , 9 bytes
⊢
o argumento⊂⍨
particionado no1
primeiro elemento,
e,2≠/
em seguida, onde os pares subsequentes diferem⊢
no argumentofonte
Python 2, 43 bytes
Trabalha em listas de booleanos. Exemplo:
Repete a lista de entrada, armazenando o último elemento visto. Uma barra separadora é impressa antes de cada elemento que é diferente do anterior, marcada como tendo xor
^
de bit a 0. 0. A inicializaçãop=-1
evita um separador antes do primeiro elemento.fonte
groupby
é essa dor um ...CJam, 9 bytes
Duas soluções:
Teste aqui.
Explicação
Ou
fonte
Haskell, 22 bytes
Há um embutido. Funciona em qualquer tipo que ofereça suporte à igualdade.
fonte
MATL,
87 bytesRemovido 1 byte graças a @Suever
Trabalha com números inteiros / flutuantes / caracteres / booleanos / pontos unicórnio / outras entradas imaginárias.
Para booleanos, entradas são
T/F
, saídas são1/0
.Experimente online!
Agrupados e repetidos
fonte
C #, 117 bytes
ungolfed (não realmente)
fonte
Pitão,
97 bytesCrédito para @LeakyNun por 2 bytes!
Explicação:
Resposta antiga, 12 bytes
Esqueci o comprimento da execução interno, mas acho que essa é uma abordagem correta, então a mantive.
Explicação:
fonte
m
.Pitão ,
3635 bytesLink de teste
Editar: explicação:
fonte
Retina ,
2422 bytes2 bytes graças a Martin Ender.
A resposta de 15 bytes já existe, por isso esta é apenas uma outra abordagem que custa mais bytes.
Experimente online!
Divide-se em espaços cujo número anterior difere do processo.
Esta é uma demonstração de lookarounds.
fonte
05AB1E, 13 bytes
Explicado
Deve funcionar para qualquer lista.
Testado em int e char.
Experimente online
fonte
Rápido, 43 bytes
Assume i como uma matriz de objetos equáveis; funciona para qualquer coisa, de ints a strings e objetos personalizados. Tipo de atrevido em que a saída contém muitas novas linhas, mas tornar esse mais bonito custaria bytes.
Versão mais bonita e não destruída:
Esta versão imprime todos os grupos em uma nova linha à custa de mais código.
Idéias para melhoria
Esta versão tem 47 bytes, mas é uma abordagem diferente, então talvez haja algo para otimizar por aí? O maior problema é a declaração de retorno.
fonte
C,
88bytesMovido o
strmcmp
interior paraprintf
salvar 11 bytesUso:
Entrada de amostra:
(parâmetros da linha de comando)
Saída de amostra:
Testado em:
Estou tentando corrigir a falha de segmentação 5.3.0.
88 Versão
fonte
Java 134 bytes
itera e decide se deve separar com uma nova linha ou um espaço.
fonte
public
estatic
palavras - chave. Também você pode remover chaves em loopListSharp , 134 bytes
O ListSharp não suporta funções, para que a matriz seja salva em um arquivo local chamado
l.txt
fonte
Ruby , 24 bytes
Em
Array
instâncias de ruby, o método internogroup_by
Então a solução será:
fonte
TSQL, 132 bytes
Isso é um pouco diferente das outras respostas - o sql não possui matrizes, a entrada óbvia para o sql é uma tabela.
Golfe:
Ungolfed:
Violino
fonte
Perl 5 - 39 bytes
fonte
Pyke, 2 bytes (não competitivo)
Suporta apenas números inteiros
Experimente aqui!
Nó split_at adicionado, divide a entrada quando o segundo argumento é verdadeiro
fonte
sed,
3323 + 1 = 24 bytesPrecisa da
-r
opção.Exemplo de uso:
fonte
JavaScript (ES6), 56
Entrada: matriz de números ou seqüências de caracteres
Saída: matriz de matrizes
Primeira vez usando comparações exatas no código de golfe
fonte
Clojure, 19 bytes
É um built-in, mas é preciso uma função de mapeamento. Nesse caso,
+
serve como uma função de identidade.fonte
Javascript (usando biblioteca externa) (178 bytes)
Isenção de responsabilidade: estou usando uma biblioteca que escrevi para implementar o LINQ de c # em JS. Não me ajudou exatamente a vencer, mas tudo bem
fonte