Introducción
Después de una larga batalla, has logrado derrotar a una esfinge en un concurso de acertijos. La Esfinge, impresionado con tu habilidad, desea darte una recompensa acorde con tu inteligencia, y evoca una tira de pergamino mágico dividido en ocho cajas, cada una con un número.
"Arruga el pergamino", dice la Esfinge, "de modo que las cajas se superpongan, y esas cajas se fusionarán mediante la suma o la multiplicación. Cuando quede una caja, su valor será tu recompensa en monedas de oro".
Tarea
Debe escribir un programa o función que tome como entrada una lista / matriz / cualquiera de los ocho números naturales, y devuelva / imprima la recompensa máxima posible que se puede obtener a través de una serie de operaciones de 'pliegue'.
Mecánica
La operación de 'pliegue' se realiza en cierto número de celdas, y con +
o *
como operador. Las primeras n celdas de la lista se pliegan y se fusionan con sus celdas de destino utilizando el operador. Las celdas que no se consuman en la operación de fusión no se modifican.
Aquí hay un ejemplo de plegado usando n = 3 celdas:
usando cualquiera de las adiciones, lo que resultaría en esto:
o multiplicación, lo que resultaría en esto:
Nota: Para simplificar, no se permite el pliegue con menos de 1 celda, al igual que el pliegue con un número de celdas mayor o igual a la longitud de la lista. Sin embargo, una lista puede ser aumentada por más de la mitad de su recuento celular.
Una lista de 8 celdas se puede doblar por 5, dando como resultado una nueva lista de longitud 5: se
[0,1,2,3,4,5,6,7]
doblaría por 5 celdas usando el +
operador [9,9,9,1,0]
.
Puntuación
Reglas de golf de código estándar: el código que produce la salida correcta y tiene el menor número de bytes gana.
Bonificación: si su código también devuelve / imprime la secuencia de operaciones de pliegue que conduce a la recompensa máxima, multiplique su puntaje por 0.8. El resultado de ejemplo podría verse así:
crease 5 +
crease 2 *
crease 2 +
crease 1 *
Ejemplos
Pruebe su código utilizando estas entradas y resultados, en forma de input - maximum reward
:
[0, 1, 2, 3, 4, 5, 6, 7] - 7560
[0, 9, 0, 3, 2, 6, 1, 5] - 1944
[0, 1, 0, 3, 0, 2, 0, 4] - 36
[6, 0, 9, 1, 9, 0, 7, 3] - 11907
[0, 5, 2, 0, 1, 3, 8, 8] - 2560
fuente
Respuestas:
Pyth, 31 bytes
Esto define una función,
y
que calcula el valor del pliegue.Demostración.
Esto usa el método recusivo, tomando el máximo de la puntuación de cada posible sucesor.
El caso base de la recursividad se implementa mediante la concatenación de la entrada a los valores ordenados de los posibles sucesores, y luego tomando el final de la lista resultante. Si solo hay 1 elemento en la entrada, no hay sucesores y, por lo tanto, el final de la lista es el único elemento en la entrada.
fuente
C #,
275272 bytesEs simplemente una función recursiva que atraviesa cada rama y devuelve la mejor puntuación.
Sangrado por claridad:
fuente