introduction
Considérez deux tableaux de même longueur, disons A = [0,1,0,2]
et B = [-1,1,2,2]
. Supposons que nous sachions que leur contenu est équivalent dans un certain sens, article par article:
0
est équivalent à-1
,1
est équivalent à1
,0
est équivalent à2
, et2
est équivalent à2
.
L'équivalence est transitive: -1
et 0
sont équivalentes, et 0
et 2
sont équivalentes, donc -1
et 2
sont également équivalentes. L' unification de A
et B
est le tableau où chaque élément de A
(ou B
) a été remplacé par le plus grand nombre qui lui est équivalent. Dans ce cas, l'unification serait [2,1,2,2]
.
La tâche
Écrivez un programme ou une fonction qui prend deux tableaux entiers non vides de longueur égale et génère leur unification. Vous pouvez également modifier l'une des entrées en place au lieu de revenir. Le nombre d'octets le plus bas gagne.
Cas de test
[0] [0] -> [0]
[1] [2] -> [2]
[0,-1] [-1,-1] -> [0,0]
[0,1,0] [2,1,0] -> [2,1,2]
[1,2,3] [0,0,1] -> [3,3,3]
[0,1,0,2] [-1,1,2,2] -> [2,1,2,2]
[1,0,1,-4] [-3,-1,-2,2] -> [1,0,1,2]
[1,2,3,-2] [1,0,-3,-2] -> [1,2,3,-2]
[-3,-2,-1,0,1] [-1,-1,-1,-1,-1] -> [1,1,1,1,1]
[-3,-2,-1,0,1] [2,-1,0,1,-3] -> [2,2,2,2,2]
[-3,5,5,3,1] [4,2,3,1,2] -> [4,5,5,5,5]
[4,0,2,-5,0] [0,4,-5,3,5] -> [5,5,3,3,5]
[-2,4,-2,3,2,4,1,1] [-2,4,1,2,2,3,1,-2] -> [1,4,1,4,4,4,1,1]
[-10,-20,-11,12,-18,14,-8,-1,-14,15,-17,18,18,-6,3,1,15,-15,-19,-19] [-13,6,-4,3,19,1,-10,-15,-15,11,6,9,-11,18,6,6,-5,-15,7,-11] -> [-8,14,18,14,19,14,-8,-1,-1,15,14,18,18,18,14,14,15,-1,18,18]
[20,15,2,4,-10,-4,-19,15,-5,2,13,-3,-18,-5,-6,0,3,-6,3,-17] [-18,7,6,19,-8,-4,-16,-1,13,-18,8,8,-16,17,-9,14,-2,-12,7,6] -> [20,15,20,19,-8,-4,20,15,17,20,17,17,20,17,-6,14,15,-6,15,20]
Réponses:
JavaScript (ES6),
1009011010296 octetsMa solution initiale était de 90 octets:
Bien qu'il passe tous les cas de test fournis, il échoue pour quelque chose comme:
Cas de test
Afficher l'extrait de code
la source
a.map
...a.map
peuvent également être remplacés parb.map
.CJam , 27 octets
Essayez-le en ligne! Suite de tests.
Explication
la source
Python 2, 91 octets
la source
Python, 86 octets
Met à jour simultanément les deux listes en remplaçant chaque valeur de la première liste par l'élément correspondant dans la deuxième liste s'il est supérieur. Le remplacement se fait avec
map
laget
méthode d' un dictionnaire . Ensuite, échange les listes et répète jusqu'à ce qu'elles soient égales.la source
Pyth, 13 octets
Essayez-le en ligne: Démonstration
Explication:
Commencez avec chaque paire. Étendez itérativement chaque paire (liste) avec des listes qui se chevauchent, dédupliquez les éléments et triez. Arrêtez une fois que ce processus converge. Imprimez le maximum de chaque liste.
la source
Php,
266241213200 octetsSolution:
Utilisation:
u([1,2,3], [0,0,1]);
retourne le tableau souhaité.Pas si golfé:
la source
Dyalog APL ,
2928 octets⌈/¨({∪¨,/∘.{⍵/⍨≢⍺∩⍵}⍨⍵}⍣≡,¨)
Même idée que la solution Pyth .
la source
Mathematica, 56 octets
la source
Java,
273263 octetsLa méthode
f(int[]a,int[]b)
résout le défi.Parcourez d'abord les deux tableaux et gardez une trace des nombres équivalents. Modifiez ensuite chaque élément du premier tableau pour stocker les nombres équivalents.
la source
Python, 522 octets
Explication
Créez un tableau de valeurs correspondant à chaque élément unique dans les deux tableaux (
a
etb
dans ce cas). Par exemple sialors le tableau serait:
puis appliquer la recherche en profondeur en premier, donc, par exemple, supposons que je prenne l'élément le plus à gauche dans
a
la valeur est alors0
et0
a les équivalences:0
et2
. Depuis0
a déjà été visité, allez à2
. 2 a les équivalences:0
. Le meilleur résultat pour choisir l'élément le plus à gauchea
est donc2
. Voici l'arbre:et vous voulez y prendre la plus grande valeur, donc le résultat est
2
.la source
PHP, 132 octets
Fonction anonyme qui prend deux tableaux.
C'est mon point de vue sur «modifier l'un des tableaux en place», comme spécifié dans la sortie du défi. Cela parcourt chacun des deux tableaux, enregistre l'équivalence si le courant est plus grand que celui stocké, puis parcourt le premier tableau et remplace toutes les valeurs par leurs plus grands équivalents. Le premier tableau est pris par référence (d'où le
&$a
), donc le tableau transmis est modifié «sur place».la source
Java, 170 octets
Golfé
Non golfé
Fonction anonyme qui prend deux
int[]
s comme arguments et retourne unint[]
.la source