O agrupamento pega uma lista e a divide em novas listas de elementos adjacentes iguais. Por exemplo
[1,1,2,1,1] -> [[1,1],[2],[1,1]]
Se você escolher o tamanho desses grupos, receberá uma nova lista de números inteiros.
[1,1,2,1,1] -> [2,1,2]
Sua tarefa é escrever um programa que obtenha uma lista de números inteiros positivos e encontre o número de vezes que você pode agrupá-lo e aumentá-lo antes que a lista resultante tenha um único elemento. Por exemplo, a lista [1,2,3,3,2,1]
pode ser reagrupada 4 vezes
[1,2,3,3,2,1]
[1,1,2,1,1]
[2,1,2]
[1,1,1]
[3]
Isso é código-golfe, então as respostas serão pontuadas em bytes, com menos bytes sendo melhores.
Casos de teste
[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
Assistente de Trigo
fonte
fonte
[1]
é uma entrada válida e deve dar0
, correto?Respostas:
Haskell, 49 bytes
Experimente online!
fonte
CJam , 18 bytes
Experimente online!
fonte
Japonês , 12 bytes
Teste online!
Explicação
A recursão é uma abordagem realmente não convencional para o Japt, mas parece ser 4 bytes mais curta que a próxima alternativa ...
fonte
F.a()
ainda está acessível através do histórico de revisões. Eu adoraria ver o seu 14-byter embora!Braquilog , 12 bytes
Experimente online!
Explicação
fonte
C (gcc) , 108 bytes
Experimente online!
Explicação
Experimente online!
fonte
JavaScript (ES6),
676563 bytesCuriosamente, JavaScript e Japt parecem ter o mesmo algoritmo mais curto de uma vez ...
fonte
K (oK) ,
2019 bytesSolução:
Experimente online!
Exemplos:
Explicação:
Essa é bem simples, mas estou pensando se existe uma abordagem ainda melhor ... Encontre os índices em que a entrada difere, divida nesses índices e conte o comprimento de cada sub-lista. Repita até que os resultados converjam para 1.
Notas:
A solução de 14 bytes a seguir funciona para todos, exceto uma lista de item único:
Experimente online!
fonte
J ,
2523 bytes1 byte economizado graças ao streetster
1 byte salvo graças ao FrownyFrog
Experimente online!
Solução inicial:
Experimente online!
Explicação
fonte
_2+
salvar um byte?#;.1@(0,2=/\])
economiza 1 byte.Stax , 9 bytes
Execute e depure on-line
A representação ascii do mesmo programa é essa.
Isso usa um recurso stax chamado gerador que gera valor de acordo com os blocos de transformação e filtro.
fonte
Python 2 , 84 bytes
Experimente online!
Quão?
f
é uma função recursiva que, se sua entrada,a
possui comprimento 2 ou mais (len(a)>1
) retorna1+f(x)
* ondex
são os comprimentos de grupo dea
; enquanto se a entrada tiver comprimento 1 ou 0 retornarFalse
(igual a 0 em Python) - isso ocorre porque o lado direito doand
não é avaliado quando o esquerdo é falsey.*
-~f(x)
é,-(-1 - f(x))
mas pode se limitar aoand
contrário1+f(x)
ouf(x)+1
)Os comprimentos dos grupos são calculados criando um código que é então avaliado
eval(...)
. O código criado é algo parecido1,1,1+1+1,1,1+1,1,
com o de uma tupla(1,1,3,1,2,1)
.O código é criado através do zíper
a
ea
sem cabeçalho (...for x, y in zip(a,a[1:])
criandox
ey
cada um dos pares adjacentes entraa
. Se o par for igual, éx==y
avaliado comoTrue
(1) caso contrárioFalse
(0)) - esse resultado é usado para indexar a cadeia que,+
produz+
e,
respectivamente e cada caracteres resultante é precedida por uma1
('1'+...
) - tudo, em seguida, tem uma final, atrás1,
. anexada por exemplo, sea
foram[5,5,2,9,9,9]
, em seguida, osx,y
pares seria(5,5)(5,2)(2,9)(9,9)(9,9)
fazer os igualdades10011
então os caracteres poderia ser+,,++
, o que com o precedente1
s se torna1+1,1,1+1+
e a fuga definitiva1,
tomada1+1,1,1+1+1,
que é avaliado(2,1,3)
conforme necessário.Observe que o final
,
garante que uma entrada com um único grupo seja avaliada como uma tupla em vez de um número inteiro (ou seja,[3,3]
->1+1,
-> em(2)
vez de[3,3]
->1+1
->2
)fonte
CJam , 19 bytes
Experimente online!
fonte
CJam , 20 bytes
Experimente online!
fonte
Perl 5 ,
53504945 bytesInclui
+3
para-p
Dê a lista de números como uma linha em STDIN
Experimente online!
fonte
Casca , 8 bytes
-1 byte graças a @Zgarb!
Experimente online!
Explicação
fonte
←Vε
é uma verificação mais curta para encontrar o índice da lista de singleton.Gelatina , 10 bytes
Experimente online!
fonte
[1]
. Você deve ser capaz de corrigi-lo usando duas desenfileiramentos / pops em vez de_2
ÐĿ
não foi uma boa escolha em primeiro lugar ... Substituiu-o por um loop while.05AB1E , 9 bytes
Experimente online!
Explicação
fonte
Wolfram Language (Mathematica) , 32 bytes
Economizou 2 bytes graças a Martin Ender. Usando a codificação CP-1252, onde
±
há um byte.Experimente online!
fonte
±{_}=0;±x_:=1+±(Length/@Split@x)
(assumindoWindowsANSI
que codifica)Ruby ,
54 56 5554 bytesExperimente online!
fonte
SmileBASIC,
110108 bytesChame a função como
R list,0
; a saída é impressa no console.fonte
Python 2 , 85 bytes
Experimente online!
fonte
R ,
5145 bytesExperimente online!
Recursivamente, pegue o comprimento da codificação do comprimento da execução e aumente o contador.
fonte
Retina 0.8.2 , 31 bytes
Experimente online! O link inclui casos de teste. Explicação:
Se houver vírgula, faremos outra iteração, portanto, adicione um caractere de contagem.
Substitua cada execução por seu comprimento decrescente. As etapas acima se repetem até que não haja vírgulas.
Conte o número de iterações.
fonte
Perl 6 , 52 bytes
Teste-o
Expandido:
fonte
Brain-Flak , 78 bytes
Experimente online!
fonte
Pitão , 9 bytes
Suíte de teste!
fonte
Kotlin , 123 bytes
Aceita
List<Int>
.Mais legível:
Experimente online!
131 bytes, TIO
181 bytes, TIO
Inclui 39 para
import kotlin.coroutines.experimental.*
.fonte
Vermelho , 140 bytes
Experimente online!
Eu só queria tentar novamente o dialeto do Red's Parse.
Ungolfed
fonte