Quadrado de dígitos com maior soma

9

Você deve escrever um programa ou função que receba uma lista de dígitos como entrada e saída ou retorne a maior soma possível, colocando esses dígitos em um quadrado.

A entrada sempre conterá um número quadrado de dígitos. Um exemplo de arranjo quadrado para a entrada 9 1 2 3 4 5 6 7 7pode ser

677
943
125

A soma é calculada como a soma de todas as linhas e colunas. Para o arranjo acima, a soma seria 677 + 943 + 125 + 691 + 742 + 735 = 3913. Observe que essa não é a soma máxima, portanto não é a saída esperada.

Entrada

  • Uma lista com length n^2( n>=1) contendo dígitos diferentes de zero ( 1-9).

Resultado

  • Um número inteiro, a maior soma possível com os dígitos de entrada colocados em um quadrado.

Exemplos

Exemplo de formato é 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 é um código de golfe, portanto a entrada mais curta vence.

randomra
fonte
Só para checar, a entrada precisa ter exatamente dígitos separados por espaço ou um formato de lista inequívoco está bom?
Sp3000
@ Sp3000 Qualquer formato simples e inequívoco de lista é aceitável, incluindo o formato de lista do idioma escolhido.
Random # 21/07

Respostas:

4

Pitão, 15 bytes

s*VSsM^^LTUQ2SQ

Demonstração. Equipamento de teste.

Nota: Insira em qualquer formato de sequência python, como a,b,c,ou [a, b, c]. Falha a.

Esta será uma explicação para a entrada de exemplo 5,8,6,8.

^LTUQ: Esta é uma lista de potências de 10, com a extensão de Q. [1, 10, 100, 1000].

^ ... 2: Então, tomamos pares de potências de 10 [[1, 1], [1, 10], .....

sM: Então, somamos esses pares. [2, 11, 101, ...Cada número representa o valor de um local da grade. O valor do canto inferior direito é 2, porque o dígito colocado lá está nos dois dígitos dos números. Observe que foram gerados 16 valores, mesmo que apenas precisemos de 4. Isso será tratado em breve.

S: Classifique o valor em ordem crescente. [2, 11, 11, 20, 101, .... Observe que os únicos valores relevantes para essa entrada são os 4 primeiros, porque esse quadrado não terá centenas ou milhares de lugares.

SQ: Classifique a entrada em ordem crescente. [5, 6, 8, 8]

*V: Multiplicação vetorizada nas duas listas. A multiplicação vetorizada de Pyth trunca a entrada mais longa, portanto, isso é [5*2, 6*11, 8*11, 8*20]equivalente ao preenchimento da grade, do menor para o maior, do fundo da direita para o canto superior esquerdo.

s: Soma os resultados 324. A impressão está implícita.

isaacg
fonte
4

CJam, 23 bytes

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

Experimente online . Gera os pesos para cada célula e atribui os dígitos mais altos aos pesos mais altos.

Uma alternativa 23:

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

CJam, 25 bytes

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

Abordagem bastante direta. Gere todas as combinações, obtenha a soma, imprima a maior.

Experimente online aqui

Optimizer
fonte