Minimales Skalarprodukt
Die Inspiration für dieses Code-Golf-Problem ist der Code-Jam-Wettbewerb von Google . Die Prämisse hinter dem Problem ist, bei der Eingabe von zwei Vektoren unterschiedlicher Länge den minimal möglichen Skalar zu finden. Ein Skalar kann mit der folgenden Formel gefunden werden:
x1 * y1 + x2 * y2 + ... + xn * yn
Das Problem ist jedoch, dass abhängig von der Reihenfolge der Ziffern im Eingabefall (siehe unten) mehrere Werte für den Skalar gefunden werden können. Ihr Ziel ist es, die minimal mögliche skalare Ganzzahllösung zu bestimmen, indem Sie die eingegebenen Fallnummern in die Gleichung einfügen und danach auflösen. Sie dürfen jede Zahl in der Eingabe nur einmal verwenden und müssen alle Zahlen verwenden.
Gestatten Sie mir ein Beispiel mit den folgenden Vektoren.
Eingang
3
1 3 -5
-2 4 1
Ausgabe
-25
Die erste Ganzzahl in der Zeile gibt die Anzahl der Zahlen n in jedem Vektor an. In diesem Fall haben wir drei Zahlen in jedem Vektor.
Die Anzahl n kann mit jedem Testfall variieren, es gibt jedoch immer zwei Vektoren.
In der Beispieleingabe wäre das minimale Skalarprodukt -25.
(-5 * 4) + (1 * 1) + (3 * -2) = 25
Regeln
- Sie dürfen jede Ganzzahl in beiden Vektoren nur einmal verwenden.
- Sie müssen alle Ganzzahlen in den Vektoren verwenden.
- Ihre Ausgabe darf nur das Endprodukt enthalten
- Ich wähle die Lösung mit der geringsten Codemenge, die allen oben aufgeführten Spezifikationen entspricht, in einer beliebigen Sprache aus!
Tipp: Sie müssen dieses Problem nicht brutal erzwingen, es sei denn, Ihr Code wird dadurch kürzer. Es gibt eine spezielle Methode, um den minimalen überspannenden Skalar zu finden :).
quelle
Antworten:
Gelee, 6 Bytes
Probieren Sie es online!
Brute Force ist ebenso kurz:
Wie es funktioniert
quelle
Im Ernst , 6 Bytes
Probieren Sie es online!
Erläuterung:
quelle
APL, 15 Bytes
Dies ist eine dyadische Funktion, die Arrays links und rechts akzeptiert und eine Ganzzahl zurückgibt. Es verwendet den gleichen Ansatz wie meine Julia- Antwort : Punktprodukt der sortierten Arrays, eines absteigend und eines aufsteigend.
Probieren Sie es hier aus
quelle
MATL , 6 Bytes
Code:
Meine erste Antwort auf MATL :)
Erläuterung:
Probieren Sie es online!
quelle
Mathematica,
3017 Bytes-13 Bytes von Murphy
Funktion, Eingabe ist vector1 (Liste), vector2 (Liste) Mehrere Revisionen:
quelle
Sort@#.Reverse@Sort@#2&
Sort@#.Sort[#2,#>#2&]&
Sort@#.-Sort@-#2&
Sort@#.SortBy[#2,-#&]
Pyth -
148 BytesIch glaube, ich habe den Trick herausgefunden.
Probieren Sie es hier online aus .
quelle
Julia,
3225 BytesDies ist eine anonyme Funktion, die zwei Arrays akzeptiert und eine Ganzzahl zurückgibt. Um es aufzurufen, weisen Sie es einer Variablen zu und machen
f(x)(y)
.Für die Eingaben x und y berechnen wir einfach das Skalarprodukt von x in umgekehrter Reihenfolge mit y sortiert. Wir erhalten x in umgekehrter Reihenfolge, indem wir alle Werte negieren, sortieren und dann erneut negieren.
7 Bytes gespart dank Dennis!
quelle
Javascript ES6, 69 Bytes
Wow, das ist viel zu lang.
quelle
|i
anstelle von&&i
Perl 6,
3330 Bytesquelle
{sum @^a.sort Z*[R,] @^b.sort}((1,3,-5),(-2,4,1)).say
CJam, 11 Bytes
Probieren Sie es online!
quelle
Python, 139 Bytes
quelle
b = sorted(b)
wird zub=sorted(b)
(2 Bytes gespeichert). Sie können auch mehrere Anweisungen in dieselbe Zeile setzen, indem Sie sie beispielsweise durch ein Semikolona=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)))
. Es ist nicht erforderlich, dass Funktionsübermittlungen benannt werden (daher ist ein unbenanntes Lambda gültig), und dern
Parameter ist nicht erforderlich (viele andere Übermittlungen lassen ihn vollständig aus).C ++, 124 Bytes
ungolfed:
Zuerst habe ich
std::greater<int>()
für die Sortierung verwendet,b
aber es ist einfacher, die Reihenfolge in der Summe umzukehren.quelle
Haskell, 59 Bytes
quelle
RETURN , 29 Bytes
Try it here.
Ersetzen Sie alle
␆␃␄␇
durch ihre nicht druckbaren Gegenstücke.Anonymes Lambda, das das Ergebnis auf stack2 verlässt. Verwendung:
Erläuterung
quelle
J, 14 Bytes
Verwendet das gleiche Prinzip wie die anderen.
Erläuterung
quelle