Produit scalaire minimum
L'inspiration pour ce problème de golf de code vient de la compétition de jam de code de Google . La prémisse derrière le problème est, étant donné l'entrée de deux vecteurs de longueurs variables, de trouver le scalaire minimum possible. Un scalaire peut être trouvé en utilisant la formule suivante:
x1 * y1 + x2 * y2 + ... + xn * yn
Le problème, cependant, est que plusieurs valeurs pour le scalaire peuvent être trouvées en fonction de l'ordre des chiffres dans le cas d'entrée (voir ci-dessous). Votre objectif est de déterminer la solution d'entier scalaire minimale possible en branchant les nombres de cas d'entrée dans l'équation et en les résolvant. Vous ne pouvez utiliser chaque numéro de l'entrée qu'une seule fois et devez utiliser tous les numéros.
Permettez-moi de fournir un exemple avec les vecteurs suivants.
Contribution
3
1 3 -5
-2 4 1
Production
-25
Le premier entier de la ligne représente le nombre de nombres, n, dans chaque vecteur. Dans ce cas, nous avons trois nombres dans chaque vecteur.
Le nombre n peut varier avec chaque cas de test, mais il y aura toujours deux vecteurs.
Dans l'exemple d'entrée, le produit scalaire minimum serait -25.
(-5 * 4) + (1 * 1) + (3 * -2) = 25
Règles
- Vous ne pouvez utiliser chaque entier dans les deux vecteurs qu'une seule fois.
- Vous devez utiliser tous les entiers dans les vecteurs.
- Votre sortie ne doit inclure que le produit final
- Je vais sélectionner la solution avec le moins de code, qui suit toutes les spécifications énumérées ci-dessus, dans n'importe quelle langue!
Astuce: vous n'avez pas besoin de forcer brutalement ce problème, sauf s'il raccourcit votre code. Il existe une méthode spécifique impliquée dans la recherche du scalaire couvrant minimum :).
la source
Réponses:
Gelée, 6 octets
Essayez-le en ligne!
L'utilisation de la force brute est également courte:
Comment ça fonctionne
la source
Sérieusement , 6 octets
Essayez-le en ligne!
Explication:
la source
APL, 15 octets
Il s'agit d'une fonction dyadique qui accepte les tableaux à gauche et à droite et renvoie un entier. Il utilise la même approche que ma réponse Julia : produit scalaire des tableaux triés, un descendant et un ascendant.
Essayez-le ici
la source
MATL , 6 octets
Code:
Ma première réponse MATL :)
Explication:
Essayez-le en ligne!
la source
Mathematica,
3017 octets-13 octets par murphy
Fonction, l'entrée est vector1 (liste), vector2 (liste) Plusieurs révisions:
la source
Sort@#.Reverse@Sort@#2&
Sort@#.Sort[#2,#>#2&]&
Sort@#.-Sort@-#2&
Sort@#.SortBy[#2,-#&]
Pyth -
148 octetsJe pense que j'ai compris l'astuce.
Essayez-le en ligne ici .
la source
Julia,
3225 octetsIl s'agit d'une fonction anonyme qui accepte deux tableaux et renvoie un entier. Pour l'appeler, affectez-le à une variable et faites
f(x)(y)
.Pour les entrées x et y , nous calculons simplement le produit scalaire de x trié dans l'ordre inverse avec y trié. Nous obtenons x dans l'ordre de tri inverse en annulant toutes les valeurs, en triant, puis en annulant à nouveau.
7 octets enregistrés grâce à Dennis!
la source
Javascript ES6, 69 octets
Wow, c'est beaucoup trop long.
la source
|i
au lieu de&&i
Perl 6,
3330 octetsla source
{sum @^a.sort Z*[R,] @^b.sort}((1,3,-5),(-2,4,1)).say
CJam, 11 octets
Essayez-le en ligne!
la source
Python, 139 octets
la source
b = sorted(b)
se transforme enb=sorted(b)
(2 octets enregistrés). Vous pouvez également mettre plusieurs instructions sur la même ligne en les séparant par un point-virgule, par exemplea=list(reversed(sorted(a)));b=sorted(b);res=0
lambda a,b,s=sorted:sum(x*y for x,y in zip(s(a)[::-1],s(b)))
. Nous n'exigeons pas que les soumissions de fonctions soient nommées (donc un lambda sans nom est valide), et len
paramètre est inutile (de nombreuses autres soumissions l'omettent complètement).C ++, 124 octets
non golfé:
Au début, j'ai utilisé
std::greater<int>()
pour le tri,b
mais simplement inverser l'ordre dans la somme est plus facile.la source
Haskell, 59 octets
la source
RETOUR , 29 octets
Try it here.
Remplacez-les
␆␃␄␇
par leurs homologues non imprimables.Lambda anonyme qui laisse le résultat sur stack2. Usage:
Explication
la source
J, 14 octets
Utilise le même principe que les autres.
Explication
la source