Étant donné une liste non triée d'entiers strictement positifs uniques, triez-la de manière minimale dans une matrice 2D. La liste d'entrée est garantie d'être de longueur composite, ce qui signifie que la matrice de sortie n'est pas nécessairement carrée, mais est de taille n x m
avec n,m > 1
.
"Tri minimal" signifie ici ce qui suit:
- Triez la liste par ordre croissant.
- Compactez la matrice de sortie autant que possible - minimisez la somme des dimensions de la matrice (par exemple, pour
20
les éléments d'entrée comme entrée, une matrice de sortie5x4
ou4x5
est requise, et non a2x10
). - Compacter les nombres triés aussi loin que possible dans le coin supérieur gauche de la matrice, en commençant par le premier élément de la liste triée.
- Cela peut être considéré comme un tri de la liste, puis une coupe le long des anti-diagonales de la matrice, en commençant par le coin supérieur gauche.
Exemples:
Pour la 1..20
sortie d' entrée est une matrice 5x4 ou 4x5 comme suit:
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
Pour la [3, 5, 12, 9, 6, 11]
sortie d' entrée est un 2x3 ou 3x2 comme suit
3 5 9
6 11 12
3 5
6 9
11 12
Pour l'entrée [14, 20, 200, 33, 12, 1, 7, 99, 58]
, la sortie est un 3x3 comme suit
1 7 14
12 20 58
33 99 200
Pour l'entrée, 1..10
la sortie doit être un 2x5 ou 5x2 comme suit
1 2 4 6 8
3 5 7 9 10
1 2
3 4
5 6
7 8
9 10
Pour la [5, 9, 33, 65, 12, 7, 80, 42, 48, 30, 11, 57, 69, 92, 91]
sortie d' entrée est un 5x3 ou 3x5 comme suit
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
Règles
- L'entrée peut être supposée correspondre au type d'entier natif de votre langue.
- L'entrée et la sortie peuvent être fournies par n'importe quelle méthode pratique .
- Un programme complet ou une fonction sont acceptables. S'il s'agit d'une fonction, vous pouvez renvoyer la sortie plutôt que de l'imprimer.
- Les failles standard sont interdites.
- Il s'agit de code-golf, donc toutes les règles de golf habituelles s'appliquent et le code le plus court (en octets) l'emporte.
code-golf
array-manipulation
sorting
matrix
AdmBorkBork
la source
la source
15
cas de test d'élément.Réponses:
Gelée ,
242220 octetsEssayez-le en ligne!
Enregistré 2 octets grâce à @ Jonathan Allan .
Explication
la source
L%J¬TżṚ$
->LÆDżṚ$
devrait sauver deux je pensepSÞỤs
.Python 2 ,
160158153151 octets-2 octets grâce à Erik l'Outgolfer
-2 octets merci à M. Xcoder
Essayez-le en ligne! ou Essayez tous les cas de test
la source
max(0,n-x)
pour -2 octets.R
11095 octetsEssayez-le en ligne!
Comment ça fonctionne
Giuseppe a sauvé un énorme 15 (!) Octets par les astuces suivantes
length(x)
parsum(x|1)
(-1 octet)floor()
n'est pas requis car l':
arrondi de toute façon (-7)^.5
est plus court quesqrt()
(-3)col(X) + row(X)
au lieu deouter
(sympa!)t(X)
- décevant;)Solution originale
Il semblerait plus sophistiqué d'
outer
être remplacé parrow(X)+col(X)
, mais cela nécessiterait d'initialiser la matrice de sortie enX
premier.Essayez-le en ligne!
la source
JavaScript (ES6), 172 octets
Explication
Cas de test
Afficher l'extrait de code
la source
Perl 5 , 132 octets
Essayez-le en ligne!
La sous-routine renvoie un tableau 2D. Le lien TIO comprend un code de pied de page pour afficher le résultat du test.
la source
Octave , 151 octets
Utilisation de trois types différents de constructions de boucles.
Essayez-le en ligne!
Déroulé:
la source
'
aunnz(v')
besoin?'
n'est pas nécessaire si j'encapsule l'expression de plage, par exemple1:20
, entre crochets ([1:20]
) sur le site d'appel (pour en faire un vecteur réel). Apparemment, dans Octave, l'opérateur deux-points ne crée pas un vecteur , mais une constante de plage qui prend beaucoup moins de place en mémoire. Pour une raison quelconque,nnz()
ne fonctionne pas avec ce type, mais la transposition de la constante de plage produit un vecteur, donc cela fonctionne avec l'apostrophe. L'appel de la fonction avec un vecteur réel supprime le besoin de'
.nnz(1:20)
cela ne fonctionne pas est probablement un bogue (max(1:20)
,sum(1:20)
etc. sont valides).nnz
. Voulez-vous le faire vous-même, ou dois-je?Husk , 15 octets
Cela fonctionne par force brute, donc les cas de test plus longs peuvent expirer. Essayez-le en ligne!
Explication
la source
C (gcc) , 269 octets
Essayez-le en ligne!
la source
JavaScript (ES6), 233 octets
Explication
la source
Java 10,
199188186 octetsEssayez-le en ligne.
Basé sur ma réponse ici .
Explication:
la source