Dada uma lista não classificada de números inteiros estritamente positivos exclusivos, classifique-a minimamente em uma matriz 2D. A lista de entrada é a garantia de ser de comprimento compósito, o que significa que a matriz de saída não é necessariamente quadrado, mas é de tamanho n x m
com n,m > 1
.
"Classificação mínima" aqui significa o seguinte:
- Classifique a lista em ordem crescente.
- Compactar a matriz de saída, tanto quanto possível - minimizar a soma das dimensões da matriz (por exemplo, por
20
elementos de entrada como entrada, um5x4
ou4x5
matriz de saída é necessária, e não um2x10
). - Compacte os números classificados o mais alto possível à esquerda da matriz, começando com o primeiro elemento na lista classificada.
- Isso pode ser considerado como classificar a lista e, em seguida, cortá-la ao longo das anti-diagonais da matriz, começando pelo canto superior esquerdo.
Exemplos:
Para 1..20
saída de entrada é uma matriz 5x4 ou 4x5 da seguinte maneira:
1 2 4 7 11
3 5 8 12 15
6 9 13 16 18
10 14 17 19 20
1 2 4 7
3 5 8 11
6 9 12 15
10 13 16 18
14 17 19 20
Para [3, 5, 12, 9, 6, 11]
saída de entrada é um 2x3 ou 3x2 da seguinte maneira
3 5 9
6 11 12
3 5
6 9
11 12
Para entrada [14, 20, 200, 33, 12, 1, 7, 99, 58]
, a saída é 3x3 da seguinte maneira
1 7 14
12 20 58
33 99 200
Para entrada, 1..10
a saída deve ser 2x5 ou 5x2 da seguinte maneira
1 2 4 6 8
3 5 7 9 10
1 2
3 4
5 6
7 8
9 10
Para [5, 9, 33, 65, 12, 7, 80, 42, 48, 30, 11, 57, 69, 92, 91]
saída de entrada é um 5x3 ou 3x5 da seguinte maneira
5 7 11 33 57
9 12 42 65 80
30 48 69 91 92
5 7 11
9 12 33
30 42 57
48 65 80
69 91 92
Regras
- Pode-se presumir que a entrada cabe no tipo inteiro nativo do seu idioma.
- A entrada e saída podem ser fornecidas por qualquer método conveniente .
- Um programa completo ou uma função são aceitáveis. Se uma função, você pode retornar a saída em vez de imprimi-la.
- As brechas padrão são proibidas.
- Isso é código-golfe, portanto todas as regras usuais de golfe se aplicam e o código mais curto (em bytes) vence.
fonte
15
caso de teste de elemento.Respostas:
Gelatina ,
242220 bytesExperimente online!
Economizou 2 bytes graças a @ Jonathan Allan .
Explicação
fonte
L%J¬TżṚ$
->LÆDżṚ$
deve salvar dois eu achopSÞỤs
.Python 2 ,
160158153151 bytes-2 bytes graças a Erik, o Outgolfer
-2 bytes graças a Mr. Xcoder
Experimente online! ou Experimente todos os casos de teste
fonte
max(0,n-x)
para -2 bytes.R
11095 bytesExperimente online!
Como funciona
Giuseppe salvou 15 (!) Bytes pelos truques a seguir
length(x)
porsum(x|1)
(-1 byte)floor()
não é necessário, pois:
arredonda para baixo de qualquer maneira (-7)^.5
é menor quesqrt()
(-3)col(X) + row(X)
vez deouter
(bom!)t(X)
embora - decepcionante;)Solução original
Seria mais chique
outer
ser substituído porrow(X)+col(X)
, mas seria necessário inicializar a matriz de saídaX
primeiro.Experimente online!
fonte
JavaScript (ES6), 172 bytes
Explicação
Casos de teste
Mostrar snippet de código
fonte
Perl 5 , 132 bytes
Experimente online!
A sub-rotina retorna uma matriz 2-D. O link TIO inclui código de rodapé para exibir o resultado do teste.
fonte
Oitava , 151 bytes
Usando três tipos diferentes de construções de loop.
Experimente online!
Desenrolado:
fonte
'
in énnz(v')
necessário?'
não é necessário se eu envolver a expressão de intervalo, por exemplo1:20
, entre colchetes ([1:20]
) no local da chamada (para torná-lo um vetor real). Aparentemente, no Octave, o operador de dois pontos não cria um vetor , mas uma constante de intervalo que ocupa muito menos espaço na memória. Por alguma razão,nnz()
não funciona com esse tipo, mas a transposição da constante de intervalo gera um vetor, portanto, funciona com o apóstrofo. Chamar a função com um vetor real remove a necessidade de'
.nnz(1:20)
não funcionar provavelmente é um bug (max(1:20)
,sum(1:20)
etc são válidos).nnz
. Você quer fazer você mesmo, ou devo?Casca , 15 bytes
Isso funciona com força bruta, então casos de teste mais longos podem atingir o tempo limite. Experimente online!
Explicação
fonte
C (gcc) , 269 bytes
Experimente online!
fonte
JavaScript (ES6), 233 bytes
Explicação
fonte
Java 10,
199188186 bytesExperimente online.
Com base na minha resposta aqui .
Explicação:
fonte