Introdução
Vamos observar a seguinte matriz:
[1, 1, 1, 2, 2, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1]
Um grupo consiste nos mesmos dígitos próximos um do outro. Na matriz acima, existem 5 grupos diferentes:
[1, 1, 1, 2, 2, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1]
1, 1, 1
2, 2
1, 1, 1, 1
2, 2, 2
1, 1, 1
O menor grupo deles é [2, 2]
, então produzimos [2, 2]
.
Vamos dar outro exemplo:
[3, 3, 3, 4, 4, 4, 4, 5, 5, 4, 4, 3, 3, 4, 4]
3, 3, 3
4, 4, 4, 4
5, 5
4, 4
3, 3
4, 4
Você pode ver que existem vários grupos com o mesmo comprimento. Os menores grupos são:
[3, 3], [4, 4], [4, 4] and [5, 5].
Então, nós apenas produzimos [3, 3], [4, 4], [4, 4], [5, 5]
em qualquer formato razoável. Você pode produzi-los em qualquer ordem.
A tarefa
Dada uma matriz que consiste apenas em números inteiros positivos, produz o menor grupo (s) da matriz. Você pode assumir que a matriz conterá pelo menos 1 número inteiro.
Casos de teste
Input: [1, 1, 2, 2, 3, 3, 4]
Output: [4]
Input: [1]
Output: [1]
Input: [1, 1, 10, 10, 10, 100, 100]
Output: [1, 1], [100, 100]
Isso é código-golfe , então a submissão com a menor quantidade de bytes ganha!
11101010100100
não parece correto para a entrada: p.Respostas:
Pyth,
141211Suíte de teste
2 bytes graças a Jakube! E 1 byte graças a isaacg!
Infelizmente, a decodificação do comprimento da execução não faz exatamente o que queremos, mas funcionará com uma solução alternativa menor, mas isso a tornará um pouco mais longa que a implementação manual:
Agradecemos a Jakube por descobrir isso.
fonte
mr]d9.mhbrQ8
.bmYN
==mM_M
Mathematica, 24 bytes
Esta é uma composição de duas funções que podem ser aplicadas a uma lista.
Split
pega todos os grupos de números consecutivos eMinimalBy[Length]
seleciona aqueles com tamanho mínimo.fonte
Haskell, 38 bytes
Exemplo de uso:
argmins length.group $ [3,3,3,4,4,4,4,5,5,4,4,3,3,4,4]
->[[4,4],[3,3],[4,4],[5,5]]
.Crie grupos de elementos iguais e encontre aqueles com comprimento mínimo.
fonte
Data.Lists
?argmins
por exemplo, é de Data.List.Extras.Agrmax .Python 2, 120 bytes
Recebe a entrada como uma sequência de números inteiros separados por espaço com um espaço à direita e gera uma lista de listas de sequências. A estratégia é encontrar grupos usando a regex
(\d+ )\1*
(que corresponde a um ou mais números inteiros separados por espaço, com um espaço à direita), depois dividi-los em espaços em listas de números inteiros e imprimir os grupos cujo comprimento é igual ao tamanho mínimo do grupo.Experimente online
fonte
C #, 204 bytes
Não sei se o uso de uma string é justo, considerando que todos os esolangs de golfe recebem sua entrada da mesma maneira, mas ele solicitou a entrada da matriz.
ungolfed:
Eu preciso de uma maneira de obter as menores correspondências para a matriz de correspondência, a maioria dos meus bytes são desperdiçados lá, ajuda apreciada. Estou tentando entrar em coisas LINQ e lambda.
fonte
Python 2.x, 303 bytes
Mais feio. Código. Sempre.
Entrada: uma matriz no formato
r'\[(\d,)*(\d,?)?\]'
Em outras palavras, uma matriz python de números
Saída: uma matriz de matrizes (os menores grupos), na ordem em que aparecem na matriz de entrada
Recursos coincidentes adicionais (recursos que eu não pretendia criar):
min
paramax
, ele retornará uma matriz dos maiores grupos.print r
isso, ele imprimirá todos os grupos em ordem.fonte
MATL, 15 bytes
Experimente online
Input é um vetor, like
[1 2 3 4]
, e output é uma matriz em que cada coluna é um dos menores grupos, por exemplo:para o terceiro caso de teste.
Explicação:
fonte
Geléia,
221716 bytesExperimente online!
fonte
JavaScript (ES6), 106
Teste
fonte
h.map(length)
funciona?length
deve ser uma função com a string como argumento, não um método de cordaJavaScript (ES6), 113 bytes
fonte
Retina,
9185807977767574 bytesExperimente online!
Explicação
A entrada é
1,1,10,10,10,100,100
.A primeira linha corresponde a grupos com os mesmos termos:
A entrada se torna:
As duas linhas a seguir precedem o número de vírgulas na linha:
A entrada se torna:
Em seguida, eles são classificados por esta linha, que procura o primeiro número como índice:
A entrada se torna:
Em seguida, essas duas linhas encontram o local em que o comprimento é diferente e removem tudo:
A entrada se torna:
Em seguida, os números são removidos por essas duas linhas:
Onde a entrada se torna:
fonte
APL, 25 caracteres
Em inglês:
fonte
⍵⊂⍨1,2≠/⍵
J , 31 bytes
Entrada é uma matriz de valores. Saída é uma matriz de matrizes in a box.
Uso
Explicação
fonte
Clojure, 65 bytes
Usa
+
comoidentity
função como(+ 5)
é 5 :) O resto deve ser óbvio,G
é um mapa de hash usado como função e, dada uma chave, ele retorna o valor correspondente.fonte
Braquilog , 6 bytes
Experimente online!
Entrada através da variável de entrada e saída através da variável de saída.
Embora, diferentemente
ḅ
, agrupeᵍ
elementos iguais não consecutivos,lᵒ
ainda é necessário encontrar o grupo com os menores comprimentos e funciona porque a ordem dos grupos na saídaᵍ
é determinada pela posição do primeiro elemento de cada grupo, portanto issoᵍhᵐ
poderia funcionar como uma espécie de desduplicado pelo pseudo-metapredicado.fonte
Perl 5
-MList::Util=pairkeys,min -a
, 69 bytesExperimente online!
fonte