Die Aufgabe
Schreiben Sie eine Funktion L (), die zwei Tupelargumente von Koordinaten in der Form (x, y) verwendet und ihre jeweilige lineare Funktion in der Form (a, c) zurückgibt, wobei a der Koeffizient des x-Terms und c ist ist der y-Achsenabschnitt.
Sie können davon ausgehen, dass die Eingabe keine Linie senkrecht zur x-Achse ist und dass die beiden Eingaben separate Punkte sind.
Wertung
Dies ist Code Golf: Das kürzeste Programm gewinnt.
Bitte beachten Sie: Keine Verwendung mathematischer Funktionen außer den Basisoperatoren (+, -, /, *).
Beispiel
Hier ist meine Lösung ohne Golf in Python.
def L(Point1, Point2):
x = 0
y = 1
Gradient = (float(Point1[y]) - float(Point2[y])) / (float(Point1[x]) - float(Point2[x]))
YIntercept = Point1[y] - Gradient * Point1[x]
return (Gradient, YIntercept)
Ausgabe:
>>> L( (0,0) , (1,1) )
(1.0, 0.0)
>>> L( (0,0) , (2,1) )
(0.5, 0.0)
>>> L( (0,0) , (7,1) )
(0.14285714285714285, 0.0)
>>> L( (10,22.5) , (5,12.5) )
(2.0, 2.5)
L( (0,0) , (0,1) )
?L((0,0),(0,0))
?Antworten:
J - 23 char
Ziemliech direkt. Definiert ein dyadisches Verb
L
, das als verwendet werden soll(x1,y1) L (x2,y2)
.Erläuterung:
Beispiele:
quelle
GNU DC ,
3024 BytesDefiniert ein Makro
L
so, dass (x 1 , y 1 , x 2 , y 2 ) vor dem Aufruf in dieser Reihenfolge auf den Stapel verschoben werden soll und nach dem AufrufL
(a, c) aus dem Stapel entfernt werden kann (in umgekehrter Reihenfolge von) Natürlich - es ist ein Stapel).Testfall (als "linear.dc" speichern und ausführen
dc linear.dc
):Ausgabe ist:
Erklärung des L-Makros:
sy
pop y 2 um sich zuy
registrierensx
pop x 2 um sich zux
registrierenly
Schieberegistery
(y 2 ) ,-
subtrahiere y 2 von y 1r
Tauschen Sie (y 1 - y 2 ) und x 1 auf dem Stapellx
Druckregisterx
(x 2 )-
subtrahiere x 2 von x 1/
Teilen Sie (y 1 - y 2 ) durch (x 1 - x 2 ), um den Gradienten zu erhaltend
doppelter Farbverlauflx
Druckregisterx
(x 2 )*
multipliziere (x 2 ) mit dem Gradientenly
Schieberegistery
(y 2 ) ,r
Tauschen Sie (y 2 ) und (x 2 * Gradient) auf dem Stapel-
subtrahiere (x 2 * Gradient) von (y 2 )quelle
Haskell, 41 Zeichen
Hier gibt es nicht viel zu spielen. Es ist so ziemlich das, was Sie normalerweise ohne Leerzeichen schreiben würden.
quelle
Mathematica,
5538 BytesDies war überraschend lang (diese lästigen langen Funktionsnamen ...).BEARBEITEN: Der Ansatz für den Achsenabschnitt wurde geändert (inspiriert von der eigenen Antwort des OP). Es stellte sich heraus, dass es nicht die klügste Idee war, es direkt zu berechnen.Verwenden Sie wie
Dank Mathematica können Sie auch das allgemeine Ergebnis erhalten:
(Dieses letzte Beispiel zeigt, wie ich dies ursprünglich implementiert hatte.)
Nur für das Protokoll
das ist technisch korrekt.
quelle
ComplexInfinity
und nicht einfach altInfinity
? (Ich kenne Mathematica nicht)JavaScript,
6248Vielen Dank an @Michael für das Golfen mit ES 6.
Alte Version:
Beispieleingabe:
Beispielausgabe:
Für die Aufzeichnung:
quelle
L=(a,b)=>[g=(p=a[1]-b[1])/(q=a[0]-b[0]),p-g*q]
Python3 (51)
quelle
C # 105 Bytes
Dies ist nicht nur die Funktion und wird vollständig selbst kompiliert. Ich hatte
L
denSystem
Namespace zum Kurzschließen der Verwendung eingefügt, aber es ist besser, sich vollständig zu qualifizieren und bei der Verwendung eines Namespace zu sparen. Die Klammern wurden gespeichert. Auch eine Ersparnis vonreturn new z[]
inreturn new[]
quelle
(c*a[0])
notwendig? Können Sie diese Klammern nicht entfernen und 2 Bytes sparen?namespace
Deklaration einfügen oder in ändernSystem.Single
, damit diese Lösung gültig ist.Lua 5.1.4:
6664 BytesAnwendungsbeispiel:
quelle
C ++ 88 (war 106)
Verbessert: Danke für deine Kommentare.
Golf:
Quelle
quelle
typedef
?z
:u.x=(v.y-u.y)/(v.x-u.x); u.y=v.y-z.x*v.x; return u;
Apple Swift
9586Dies ist möglicherweise der erste Swift-Eintrag auf PCG.SE ??
Ich sehe diese Sprache nicht als großen Erfolg für die Code Golf Community.
quelle
Golfscript: 25 Bytes
Da die Funktion 'L' heißen muss, habe ich sie lokal als 'L.gs' gespeichert.
Der Haken, wie von @Dennis in diesem Beitrag erklärt , ist, dass wir Golfscript dazu bringen müssen, rationale Zahlen anstelle von ganzen Zahlen zu verwenden. Dies funktioniert also, wenn Sie bereit sind, Eingaben in der Golfscript-Notation zu akzeptieren
X1 Y1 X2 Y2
quelle
Ruby - 48 Zeichen
Fast identisch mit der JavaScript-Antwort:
quelle
Python3 -
6457 BytesSie können es auf 43 reduzieren, wenn Sie Tuple nicht verwenden, was viele Leute tun ...
quelle
return(a,q[1]-a*q[0])
PHP (75 Zeichen)
Prüfung :
print_r(L([0,0],[7,1]));
Ausgabe :
(danke @ace)
quelle