Anteriormente definí el proceso de aplastar una matriz
En un flechazo leemos la matriz de izquierda a derecha. Si en un momento nos encontramos con dos del mismo elemento en una fila, eliminamos el primero y duplicamos el segundo.
Por ejemplo, aquí está el proceso de aplastar la siguiente matriz
[5,2,2,4]
^
[5,2,2,4]
^
[5,2,2,4]
^
[5,4,4]
^
[5,4,4]
^
[5,8]
^
Tenga en cuenta que el mismo elemento se puede contraer varias veces. En el ejemplo 2,2,4
se colapsó 8
en una sola pasada.
Ahora aplastar matrices es fácil, lo difícil es deshacerlas. Su tarea es tomar una matriz de enteros positivos como entrada y salida de la matriz más grande que puede formar la entrada cuando se aplasta repetidamente. Por ejemplo, la matriz [4]
se forma por trituración, [2,2]
que a su vez se forma por trituración [1,1,1,1]
. Dado que no podemos tener valores no enteros, [1,1,1,1]
no podemos destrabarnos más y por eso es nuestra respuesta.
Nunca recibirá un 0
en su matriz de entrada porque tales matrices se pueden expandir indefinidamente. Nunca recibirá un caso con dos del mismo número impar uno al lado del otro, tales casos no pueden ser el resultado de un aplastamiento.
Este es el código de golf, por lo que las respuestas se puntuarán con el tamaño de su fuente medido en bytes, siendo mejores menos bytes.
Antes de comenzar a responder, solo quiero decir que este desafío es significativamente más difícil de lo que parece. Verifique su intuición a medida que avanza y asegúrese de que su respuesta pase todos los casos de prueba.
Casos de prueba
[] -> []
[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 pasada: [2,>2,2,2,4]
, [4,>2,2,4]
, [4,2,>2,4]
, [4,4,>4]
, [4,8>]
. Esperemos que eso lo aclare. Si desea que algún código mire la pregunta anterior, tiene respuestas que implementan una función de aplastamiento.
[4, 4]
debe eliminarse, ya que nunca podemos obtener esa matriz después de una secuencia de estiramiento => aplastar, ya que esto terminará con[8]
[1,1,1,1,1,1,1,1,1,1,2]
producir en[4, 8]
lugar de[8, 4]
? debe estar presente[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]
?