Deux listes A
et B
sont congruentes si elles ont la même longueur, et les éléments qui se comparent égaux A
comparent égaux B
.
En d'autres termes, étant donné deux indices valides x
et y
:
- Si
A[x] = A[y]
, alorsB[x] = B[y]
. - Si
A[x] != A[y]
, alorsB[x] != B[y]
.
Par exemple, les listes [1, 2, 1, 4, 5]
et [0, 1, 0, 2, 3]
sont congruentes.
La tâche
Étant donné une liste non vide d' entiers non négatifsA
, renvoyez une nouvelle liste d' entiers non négatifsB
telle qu'elle soit congruente A
, tout en minimisant la somme des entiers dans B
.
Il existe potentiellement de nombreuses sorties valides possibles. Par exemple, dans la liste [12, 700, 3]
, toute permutation de [0, 1, 2]
serait considérée comme une sortie valide.
Cas de test
Format:
input ->
one possible valid output
[1 2 1 4 5] ->
[0 1 0 2 3] (this is the example given above)
[3 2 2 1 5 7 2] ->
[1 0 0 2 3 4 0]
[8 8 8 8 8] ->
[0 0 0 0 0]
[2] ->
[0]
[8 6 8 4 6 8 2 4 6 8 0 2 4 6 8] ->
[0 1 0 2 1 0 3 2 1 0 4 3 2 1 0]
[14 1] ->
[1 0]
[19 6 4 9 14 17 10 9 6 14 8 14 6 15] ->
[8 0 3 2 1 7 5 2 0 1 4 1 0 6]
[15] ->
[0]
[1 18 4 8 6 19 12 17 6 13 7 6 8 1 6] ->
[1 8 3 2 0 9 5 7 0 6 4 0 2 1 0]
[9 10 11 9 7 11 16 17 11 8 7] ->
[2 4 0 2 1 0 5 6 0 3 1]
[1 3 16 19 14] ->
[0 1 3 4 2]
[18 8] ->
[1 0]
[13 4 9 6] ->
[3 0 2 1]
[16 16 18 6 12 10 4 6] ->
[1 1 5 0 4 3 2 0]
[11 18] ->
[0 1]
[14 18 18 11 9 8 13 3 3 4] ->
[7 1 1 5 4 3 6 0 0 2]
[20 19 1 1 13] ->
[3 2 0 0 1]
[12] ->
[0]
[1 14 20 4 18 15 19] ->
[0 2 6 1 4 3 5]
[13 18 20] ->
[0 1 2]
[9 1 12 2] ->
[2 0 3 1]
[15 11 2 9 10 19 17 10 19 11 16 5 13 2] ->
[7 2 0 5 1 3 9 1 3 2 8 4 6 0]
[5 4 2 2 19 14 18 11 3 12 20 14 2 19 7] ->
[5 4 0 0 2 1 9 7 3 8 10 1 0 2 6]
[9 11 13 13 13 12 17 8 4] ->
[3 4 0 0 0 5 6 2 1]
[10 14 16 17 7 4 3] ->
[3 4 5 6 2 1 0]
[2 4 8 7 8 19 16 11 10 19 4 7 8] ->
[4 1 0 2 0 3 7 6 5 3 1 2 0]
[15 17 20 18 20 13 6 10 4 19 9 15 18 17 5] ->
[0 1 3 2 3 9 6 8 4 10 7 0 2 1 5]
[15 14 4 5 5 5 3 3 19 12 4] ->
[5 4 2 0 0 0 1 1 6 3 2]
[7 12] ->
[0 1]
[18 5 18 2 5 20 8 8] ->
[2 0 2 3 0 4 1 1]
[4 6 10 7 3 1] ->
[2 3 5 4 1 0]
[5] ->
[0]
[6 12 14 18] ->
[0 1 2 3]
[7 15 13 3 4 7 20] ->
[0 4 3 1 2 0 5]
[10 15 19 14] ->
[0 2 3 1]
[14] ->
[0]
[19 10 20 12 17 3 6 16] ->
[6 2 7 3 5 0 1 4]
[9 4 7 18 18 15 3] ->
[4 2 3 0 0 5 1]
[7 4 13 7] ->
[0 1 2 0]
[19 1 10 3 1] ->
[3 0 2 1 0]
[8 14 20 4] ->
[1 2 3 0]
[17 20 18 11 1 15 7 2] ->
[5 7 6 3 0 4 2 1]
[11 4 3 17] ->
[2 1 0 3]
[1 9 15 1 20 8 6] ->
[0 3 4 0 5 2 1]
[16 13 10] ->
[2 1 0]
[17 20 20 12 19 10 19 7 8 5 12 19] ->
[7 2 2 1 0 6 0 4 5 3 1 0]
[18 11] ->
[1 0]
[2 16 7 12 10 18 4 14 14 7 15 4 8 3 14] ->
[3 9 2 7 6 10 1 0 0 2 8 1 5 4 0]
[5 7 2 2 16 14 7 7 18 19 16] ->
[3 0 1 1 2 4 0 0 5 6 2]
[8 6 17 5 10 2 14] ->
[3 2 6 1 4 0 5]
Il s'agit de code-golf , donc la soumission valide la plus courte (comptée en octets) l'emporte.
code-golf
array-manipulation
Esolanging Fruit
la source
la source
Réponses:
Python 2 ,
6254 octetsEssayez-le en ligne!
Modifier: enregistré 8 octets via la carte merci à Maltysen
la source
lambda L:map(sorted(set(L),key=L.count)[::-1].index,L)
Pyth -
121110 octetsSuite de tests .
la source
mx_o/QN{Q
.Japt , 11 octets
Testez-le en ligne!
Explication
la source
J , 11 octets
Essayez-le en ligne!
Explication
la source
Röda , 55 octets
Essayez-le en ligne!
la source
Haskell ,
939185 octetsEssayez-le en ligne!
EDIT: Merci à @Laikoni pour avoir décollé 6 octets!
Pas très court mais je ne peux penser à rien d'autre. L'idée est d'itérer sur le tableau (
x<-a
) et d'effectuer une recherche dans une liste de tuple ((i,y:_)<-
...,x==y
) qui attribue un entier non négatif à chaque élément unique dans l'entrée en fonction de sa fréquence. Cette liste de tuple est générée ensort
commençant par l'entrée,group
en l'intégrant dans des sous-listes d'éléments égaux, en triant cette liste en fonction de la longueur des sous-listes (sortOn((0-).length)
; la longueur est annulée pour trier dans l'ordre "décroissant"), puis enfin en la zippant avec une liste infinie incrémentation à partir de 0. Nous utilisons la correspondance de motifs pour extraire l'élément réel de la sous-listey
.la source
(i,y:_)
et déposer lahead<$>
pièce et remplacer la parenthèse par$
.Mathematica, 94 octets
Essayez-le en ligne!
la source
CJam,
1714 octets-3 octets grâce à Peter Taylor
Ceci est une version golfée du programme que j'ai utilisé pour générer les tests.
Il s'agit d'un bloc anonyme qui attend l'entrée en tant que tableau au-dessus de la pile et génère un tableau au-dessus de la pile.
Explication:
la source
$W%
.TI-BASIC, 66 octets
Explication
la source
Perl 5 , 77 + 1 (-a) = 78 octets
Essayez-le en ligne!
la source
JavaScript (ES6), 91 octets
À l'aide d'une liste de valeurs uniques, triées par fréquence.
Tester
la source
PHP , 92 octets
Essayez-le en ligne!
la source
R , 58 octets
Essayez-le en ligne!
Réponse de Python de Port Brown .
table
calcule le nombre de chaque élément dansx
(stockage des valeurs en tantnames
qu'attribut),order
retourne une permutation des indices dansz
etmatch
retourne l'index de la première correspondance dex
dansnames(z)
. Ensuite, il soustrait1
car les indices R sont basés sur 1.la source