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 7
pode 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.
Respostas:
Pitão, 15 bytes
Demonstração. Equipamento de teste.
Nota: Insira em qualquer formato de sequência python, como
a,b,c,
ou[a, b, c]
. Falhaa
.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 deQ
.[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 resultados324
. A impressão está implícita.fonte
CJam, 23 bytes
Experimente online . Gera os pesos para cada célula e atribui os dígitos mais altos aos pesos mais altos.
Uma alternativa 23:
fonte
CJam, 25 bytes
Abordagem bastante direta. Gere todas as combinações, obtenha a soma, imprima a maior.
Experimente online aqui
fonte