Anteriormente , defini o processo de esmagar uma matriz
Em uma paixonite, lemos a matriz da esquerda para a direita. Se em um ponto encontramos dois elementos iguais seguidos, removemos o primeiro e duplicamos o segundo.
Por exemplo, aqui está o processo de esmagar a seguinte matriz
[5,2,2,4]
^
[5,2,2,4]
^
[5,2,2,4]
^
[5,4,4]
^
[5,4,4]
^
[5,8]
^
Observe que o mesmo elemento pode ser recolhido várias vezes. No exemplo 2,2,4
foi recolhido 8
em uma única passagem.
Agora, esmagar matrizes é fácil, o difícil é esmagá-las. Sua tarefa é pegar uma matriz de números inteiros positivos como entrada e gerar a maior matriz que pode formar a entrada quando pressionada repetidamente. Por exemplo, a matriz [4]
é formada por esmagamento, [2,2]
que por sua vez é formado por esmagamento [1,1,1,1]
. Como não podemos ter valores não inteiros, [1,1,1,1]
não podemos mais ser esmagados e, portanto, é a nossa resposta.
Você nunca receberá um 0
em sua matriz de entrada porque essas matrizes podem ser expandidas indefinidamente. Você também nunca receberá um caso com dois do mesmo número ímpar um ao lado do outro; esses casos não podem ser o resultado de uma trituração.
Isso é código-golfe, então as respostas serão pontuadas com o tamanho da fonte medido em bytes, com menos bytes sendo melhores.
Antes de começar a responder, quero apenas dizer que esse desafio é significativamente mais difícil do que parece. Verifique sua intuição à medida que avança e verifique se sua resposta passa em todos os casos de teste.
Casos de teste
[] -> []
[5] -> [5]
[6] -> [3,3]
[8] -> [1,1,1,1,1,1,1,1]
[4,8] -> [1,1,1,1,1,1,1,1,1,1,2]
[2,8] -> [1, 1, 1, 1, 2, 1, 1, 1, 1]
[4,4] -> [1,1,1,1,1,1,1,1]
[1,>1,1,1,1,1,1,1,1,1,2]
, [2,>1,1,1,1,1,1,1,1,2]
, [2,1,>1,1,1,1,1,1,1,2]
, [2,2,>1,1,1,1,1,1,2]
, [2,2,1,>1,1,1,1,1,2]
, [2,2,2,>1,1,1,1,2]
, [2,2,2,1,>1,1,1,2]
, [2,2,2,2,>1,1,2]
, [2,2,2,2,1,>1,2]
, [2,2,2,2,2,>2]
, [2,2,2,2,4>]
, segunda passagem: [2,>2,2,2,4]
, [4,>2,2,4]
, [4,2,>2,4]
, [4,4,>4]
, [4,8>]
. Espero que isso esclareça. Se você deseja que algum código veja a pergunta anterior, tem respostas que implementam uma função de esmagamento.
[4, 4]
deve ser removido, pois nunca podemos obter esse array após uma sequência de alongamento => esmagamento, pois isso terminará com[8]
[1,1,1,1,1,1,1,1,1,1,2]
produzir em[4, 8]
vez de[8, 4]
? deve ser isso[1,>1,1,1,1,1,1,1,1,1,2]
,[2,1,>1,1,1,1,1,1,1,2]
,[2,>2,1,1,1,1,1,1,2]
,[4,1,>1,1,1,1,1,2]
,[4,2,1,>1,1,1,2]
,[4,2,>2,1,1,2]
,[4,>4,1,1,2]
,[8,1,>1,2]
,[8,2,>2]
,[8,4]
?