Cuadrado de dígitos con suma más grande

9

Debe escribir un programa o función que reciba una lista de dígitos como entrada y salida o que devuelva la suma más grande posible colocando estos dígitos en un cuadrado.

La entrada siempre contendrá un número cuadrado de dígitos. Un ejemplo de disposición cuadrada para la entrada 9 1 2 3 4 5 6 7 7podría ser

677
943
125

La suma se calcula como la suma de todas las filas y columnas. Para el arreglo anterior la suma sería 677 + 943 + 125 + 691 + 742 + 735 = 3913. Tenga en cuenta que esta no es la suma máxima, por lo que este no es el resultado esperado.

Entrada

  • Una lista con longitud n^2( n>=1) que contiene dígitos distintos de cero ( 1-9).

Salida

  • Un número entero, la suma más grande que se puede lograr con los dígitos de entrada puestos en un cuadrado.

Ejemplos

El formato de ejemplo es input => output.

5 => 10

1 2 3 4 => 137

5 8 6 8 => 324

9 1 2 3 4 5 6 7 7 => 4588

2 4 9 7 3 4 2 1 3 => 3823

8 2 9 4 8 1 9 3 4 6 3 8 1 5 7 1 => 68423

5 4 3 6 9 2 6 8 8 1 6 8 5 2 8 4 2 4 5 7 3 7 6 6 7 => 836445

Este es el código de golf, por lo que gana la entrada más corta.

randomra
fuente
Solo para verificar dos veces, ¿la entrada tiene que ser dígitos separados por espacios exactamente o es un formato de lista inequívoco?
Sp3000
@ Sp3000 Cualquier formato de lista simple y sin ambigüedades está bien, incluido el formato de lista del idioma elegido.
randomra

Respuestas:

4

Pyth, 15 bytes

s*VSsM^^LTUQ2SQ

Demostración. Prueba de arnés.

Nota: Ingrese en cualquier formato de secuencia de Python, como a,b,c,o [a, b, c]. Falla en a.

Esta será una explicación para el ejemplo de entrada 5,8,6,8.

^LTUQ: Esta es una lista de potencias de 10, a lo largo de Q. [1, 10, 100, 1000].

^ ... 2: Entonces, tomamos pares de poderes de 10 [[1, 1], [1, 10], .....

sM: Entonces, sumamos esos pares. [2, 11, 101, ...Cada número representa el valor de una ubicación de cuadrícula. El valor de la esquina inferior derecha es 2, porque el dígito colocado allí está en el lugar de las unidades de los dos números en los que se encuentra. Tenga en cuenta que se generaron 16 valores, aunque solo necesitamos 4. Esto se manejará en breve.

S: Ordenar el valor en orden creciente. [2, 11, 11, 20, 101, .... Tenga en cuenta que los únicos valores que son relevantes para esta entrada son los primeros 4, porque este cuadrado no tendrá cientos o miles de lugares.

SQ: Ordena la entrada en orden ascendente. [5, 6, 8, 8]

*V: Multiplicación vectorizada sobre las dos listas. La multiplicación vectorizada de Pyth trunca la entrada más larga, por lo que se realiza [5*2, 6*11, 8*11, 8*20], equivalente al relleno de la cuadrícula, de menor a mayor, de abajo a la derecha de arriba a la izquierda.

s: Sumar los resultados, 324. La impresión es implícita.

isaacg
fuente
4

CJam, 23 bytes

q~$_,mQ,A\f#2m*::+$.*:+

Pruébalo en línea . Genera los pesos para cada celda y asigna los dígitos más altos a los pesos más altos.

Una alternativa 23:

q~$_,mQ_,A\f#*_$.+$.*:+
Sp3000
fuente
2

CJam, 25 bytes

q~_e!\,mqf/{_z+Afb:+}%$W=

Enfoque bastante directo. Genere todas las combinaciones, obtenga la suma, imprima más grande.

Pruébalo en línea aquí

Optimizador
fuente