Ihr Ziel ist es zu bestimmen, ob ein gegebener 2D-Punkt X im Bereich des Dreiecks mit gegebenen Eckpunkten A, B, C liegt.
Schreiben Sie eine Funktion, die die Koordinaten des Testpunkts X und der drei Eckpunkte des Dreiecks (also insgesamt 8 Koordinaten) aufnimmt und True zurückgibt, wenn der Punkt in diesem Dreieck liegt, und False, wenn er außerhalb liegt.
Mach dir keine Sorgen über Edge Cases. Wenn der Punkt auf der Grenze des Dreiecks (Kante oder Scheitelpunkt) liegt oder das Dreieck tatsächlich ein Liniensegment ist, kann Ihr Code alles tun, einschließlich Abstürzen. Sorgen Sie sich auch nicht um numerische Stabilität oder Gleitkommapräzision.
Ihr Code muss eine benannte Funktion sein. Code-Schnipsel werden nicht akzeptiert.
Die wenigsten Charaktere gewinnen.
Eingang:
Acht reelle Zahlen, die Koordinaten darstellen. Die Zahlen liegen im Bereich (-1,1)
.
Das genaue Eingabeformat ist flexibel. Sie können beispielsweise acht Zahlen, eine Liste mit acht Zahlen, eine Liste mit vier Punkten, die jeweils durch ein Tupel gegeben sind, eine 2 * 4-Matrix, vier komplexe Zahlen, zwei Listen mit den x- und y-Koordinaten, und so weiter.
Die Eingabe muss lediglich aus den Zahlen in einem Container ohne zusätzliche Daten bestehen. Sie können die Eingabe weder für die Vorverarbeitung verwenden, noch benötigen Sie Einschränkungen für die Eingabe, z. B. die Angabe der Punkte in aufsteigender y-Koordinate. Ihre Eingabe muss acht beliebige Koordinaten zulassen (obwohl sich Ihr Code in den oben genannten Randfällen beliebig verhalten kann).
Bitte geben Sie Ihr Eingabeformat an.
Ausgabe:
Entweder das entsprechende Boolesche True
/ False
, die entsprechende Zahl 1
/ 0
oder die Analoga in Ihrer Sprache.
Testfälle
Die Eingaben erhalten eine Liste [X,A,B,C]
von vier Tupeln, zuerst den Testpunkt, dann die drei Dreieckscheitelpunkte. Ich habe sie in diejenigen gruppiert, deren Ausgaben sein sollten True
und diejenigen, die sein sollten False
.
True
Instanzen:
[(-0.31961, -0.12646), (0.38478, 0.37419), (-0.30613, -0.59754), (-0.85548, 0.6633)]
[(-0.87427, -0.00831), (0.78829, 0.60409), (-0.90904, -0.13856), (-0.80685, 0.48468)]
[(0.28997, -0.03668), (-0.28362, 0.42831), (0.39332, -0.07474), (-0.48694, -0.10497)]
[(-0.07783, 0.04415), (-0.34355, -0.07161), (0.59105, -0.93145), (0.29402, 0.90334)]
[(0.36107, 0.05389), (0.27103, 0.47754), (-0.00341, -0.79472), (0.82549, -0.29028)]
[(-0.01655, -0.20437), (-0.36194, -0.90281), (-0.26515, -0.4172), (0.36181, 0.51683)]
[(-0.12198, -0.45897), (-0.35128, -0.85405), (0.84566, 0.99364), (0.13767, 0.78618)]
[(-0.03847, -0.81531), (-0.18704, -0.33282), (-0.95717, -0.6337), (0.10976, -0.88374)]
[(0.07904, -0.06245), (0.95181, -0.84223), (-0.75583, -0.34406), (0.16785, 0.87519)]
[(-0.33485, 0.53875), (-0.25173, 0.51317), (-0.62441, -0.90698), (-0.47925, 0.74832)]
False
Instanzen:
[(-0.99103, 0.43842), (0.78128, -0.10985), (-0.84714, -0.20558), (-0.08925, -0.78608)]
[(0.15087, -0.56212), (-0.87374, -0.3787), (0.86403, 0.60374), (0.01392, 0.84362)]
[(0.1114, 0.66496), (-0.92633, 0.27408), (0.92439, 0.43692), (0.8298, -0.29647)]
[(0.87786, -0.8594), (-0.42283, -0.97999), (0.58659, -0.327), (-0.22656, 0.80896)]
[(0.43525, -0.8923), (0.86119, 0.78278), (-0.01348, 0.98093), (-0.56244, -0.75129)]
[(-0.73365, 0.28332), (0.63263, 0.17177), (-0.38398, -0.43497), (-0.31123, 0.73168)]
[(-0.57694, -0.87713), (-0.93622, 0.89397), (0.93117, 0.40775), (0.2323, -0.30718)]
[(0.91059, 0.75966), (0.60118, 0.73186), (0.32178, 0.88296), (-0.90087, -0.26367)]
[(0.3463, -0.89397), (0.99108, 0.13557), (0.50122, -0.8724), (0.43385, 0.00167)]
[(0.88121, 0.36469), (-0.29829, 0.21429), (0.31395, 0.2734), (0.43267, -0.78192)]
Antworten:
Javascript / ECMAScript 6,
161159158/152Javascript:
ECMAScript 6 Version (danke m.buettner, speichert 6 Zeichen)
Nennen Sie es als solches (Rückgabe
true
oderfalse
):Verwendet einige ausgefallene baryzentrische Koordinatenmathematik basierend auf dem Code aus dieser Antwort . Eine ungolfed Version für Ihr Lesevergnügen folgt:
quelle
(a*(l-n)+i*(g-e)+n*e-g*l)
stattdessen verwenden können(-g*l+a*(-n+l)+i*(g-e)+n*e)
?Python 2.7
1281271171101091039995949190Mein erster Code-Golf-Versuch!
Code
Nimmt als Eingabe (x, y, t), wobei (x, y) der Punkt ist, den wir überprüfen, und t ein Dreieck ist, t = ((x1, y1), (x2, y2), (x3, y3)).
Erläuterung
Ich berechne die Determinanten der Matrizen
Diese Determinanten repräsentieren die vorzeichenbehafteten Abstände von den Seiten des Dreiecks zum Punkt (x, y). Wenn alle dasselbe Vorzeichen haben, befindet sich der Punkt auf der gleichen Seite jeder Linie und ist somit im Dreieck enthalten.
Im obigen Code
a*y+c*b+d*x-d*a-c*y-b*x
ist eine Determinante einer dieser Matrizen.Ich nutze die Tatsache, dass
True+True+True==3
undFalse+False+False==0
um festzustellen, ob diese Determinanten alle das gleiche Vorzeichen haben.Ich benutze Pythons Negativlisten-Indizes, indem ich
t[-1]
anstelle von benutzet[(i+1)%3]
.Vielen Dank an Peter für die Idee,
s%3<1
anstelle vons in(0,3)
zu prüfen, ob s entweder 0 oder 3 ist!Sagemath Version
Keine wirklich andere Lösung, daher beziehe ich sie in diese Antwort ein, eine Sagemath-Lösung mit 80 Zeichen:
wo
p=[x,y]
undt=[[x1,y1],[x2,y2],[x3,y3]]
quelle
s in (0,3)
auf gekürzt werdens%3<1
?-1,0,1 ... t[i]+t[i+1]
entspricht0,1,2 ... t[i-1]+t[i]
in -1,0,1
bevor ich das gelesen habe. Eigentlich ist dein Weg besser lesbar, also werde ich ihn trotzdem benutzen.sum
entfernen, wenn Sie die0,1,2
in Klammern stehenden Zeichen einschließen. In diesem Fall ersetzen Sie ein Leerzeichen. Der Grund dafür ist, dass Python die Übergabe von uneingeschränktem Verständnis an Funktionen zulässt, aber die Kommas im nackten Tupel1,2,3
verwirren es, weil es versucht, sie als separate Argumente zu analysieren.Mathematica, 67 Bytes
Die Funktion akzeptiert zwei Argumente, den Punkt
X
und eine Liste von Punkten{A,B,C}
, die als#
und#2
bezeichnet werden. Das ist, wenn Sie anrufendann bekommst du
#
wieX
und#2
wie{A,B,C}
. (Beachten Sie, dass zwei andere anonyme Funktionen im Code verschachtelt sind -#
und#2
innerhalb dieser Funktionen eine andere Bedeutung haben.)Hier ist eine Erklärung der Funktion selbst:
Beachten Sie, dass diese Funktion tatsächlich für jedes konvexe n-Gon funktioniert, solange seine Scheitelpunkte entweder im Uhrzeigersinn oder gegen den Uhrzeigersinn angegeben werden.
quelle
Det
?CJam,
66635952463432313028 ZeichenNach der Transformation der Unicode-Zeichenfolge wird der folgende Code ( 33 Byte ) ausgewertet:
Erwartet
X [A B C]
als Eingabe, wobei jeder Punkt von der Form ist[double double]
. Ausgang ist 1 oder 0.Probieren Sie es online aus.
Ein großes Dankeschön geht an user23013 für das Speichern von 6 Zeichen (13 Byte unkomprimierter Code)!
Testfälle
quelle
{
und}
als solche behandelt wird. Ähnlich wie Codeblöcke in C / Java, mit der Ausnahme, dass Blöcke erstklassige Objekte sind und Variablen zugewiesen werden können (wodurch Funktionen definiert werden).1m<@m*
bereitet 3 Paare von X und den nächsten (i+1
th) Eckpunkt des Dreiecks vor.@-@@-
Verschiebt den aktuellen (i
th) Scheitelpunkt zum Ursprung (und spiegelt ihn, wenn dies nicht der@-\@-
Fall ist, aber es spielt keine Rolle).@@*@@*>
berechnet die Z-Achse des Kreuzprodukts, auch Determinante genannt, und gibt zurück,1
wenn es negativ ist.:+3%!
Gibt zurück, ob sie alle gleich sind, dh alle 3 sind negativ oder nicht negativ, was mit Ausnahme der Kantenfälle positiv bedeutet. Ich denke, es ist schwieriger, CJam zu lesen als Golf zu spielen.{[_1m<\]z\f{f{+~@-@@-}~@@*@@*>})-!}:T
. Verwenden Sie2m>
oderWm<
für die Unicode-Sicherheit.{2*2/\f{f{+~@-@@-}~@@*@@*>})-!}:T
C - 156 Bytes
Die Eingabe besteht aus einem Array von 3 Gleitkommazahlen in X, 3 Gleitkommazahlen in Y und getrennten x- und y-Werten für den Testpunkt. Bonus: behandelt alle Randfälle!
Angepasst von PNPOLY.
quelle
i;j;c;f(float*X,float*Y,float x,float y){for(c=i=0,j=2;i<3;)c^=(Y[i]>y)-(Y[j]>y)&(x<(X[j]-X[i])*(y-Y[i])/(Y[j]-Y[i])+X[j=i++]);return c;}
137 - getestet in JavascriptPyth 1.0.5 ,
575451Definiert die Funktion g, die zwei Eingaben übernimmt: den Testpunkt und dann die Liste der Eckpunkte des Dreiecks. Ausgänge
True
undFalse
. Hinweis: Zerstört die Eingabe, insbesondere b, die Liste der Eckpunkte des Dreiecks.Probieren Sie es hier aus . Bei den letzten Zeichen
gvwvw
rufen Sie die Funktion mit einem Testfall in den nächsten beiden Zeilen auf.Basierend auf diesem Algorithmus
Erläuterung:
Der CJam-Pyth-Krieg tobt weiter!
quelle
w
unter STDIN Eingang?Z
durch einen leeren Satz ersetzen, mit dem Sie akkumulierenZ|=
, und dann dessen Länge testen, um zu sehen, ob nur0
die angezeigt werden oder1
nicht? Die Strategie hat sich in Python als länger erwiesen, aber vielleicht lohnt es sich, Pyth-Primitive zu verwenden.J
6445 (42 ohne Zuordnung)Die Zuordnung ist nicht erforderlich, damit das Objekt eine Funktion ist. Sie können sich also nicht sicher sein, ob Sie es zählen sollen oder nicht. Nutzen Sie die flexible Eingabe: Ich hätte gerne ein Array von (1 + Anzahl der Eckpunkte) x (Dimensionalität des Raums).
In der Hoffnung, hier ein paar zusätzliche Punkte zu erzielen ...: Dieses Ding funktioniert für jede Dimension von Simplex, nicht nur für Dreiecke in einer Ebene, sondern auch für eine dreiseitige Pyramide im 3D-Raum und so weiter. Es funktioniert auch, wenn die Anzahl der Eckpunkte des Simplex kleiner als (n + 1) ist. Dann wird berechnet, ob die Projektion des Punkts auf den Simplex innerhalb liegt oder nicht.
Es wird in Schwerpunktkoordinaten konvertiert und dann auf negative Koordinaten überprüft, um anzuzeigen, dass der Punkt außerhalb liegt. Denken Sie daran, J verwendet _ für negativ
Ein Lauf auf die gegebenen Beispiele:
quelle
N+1
Eckpunkten. Zum Beispiel eine Pyramide mit 4 Ecken im 3-D-Raum oder ein Simplex mit 5 Ecken im 4-D-Raum. Die Anzahl der Eckpunkte kann niedriger sein alsN+1
. In diesem Fall prüft der Algorithmus, ob die orthogonale Projektion auf die Hyperebene, in der sich der Simplex befindet, innerhalb des Simplex liegt oder nicht (z. B. wird ein 2-Punkt-Simplex in 2D auf die Linie projiziert und überprüft ob diese Projektion zwischen den Endpunkten liegt)HTML5 + JS, 13b + 146b / 141b / 114 Zeichen
HTML:
JS (146b):
oder ES6 (141b):
oder ES6 unicode-obfuscated (114 Zeichen):
Demo: http://jsfiddle.net/xH8mV/
Unicode-Verschleierung erstellt mit: http://xem.github.io/obfuscatweet/
quelle
Python (65)
Die Leute scheinen damit fertig zu sein, also werde ich meine eigene Lösung zu meiner Frage posten.
X
ist die komplexe Zahl, die die Testpunkte darstellt, undL
ist eine Liste von drei Punkten, von denen jeder eine komplexe Zahl ist.Zuerst erkläre ich eine weniger gute Version des Codes.
Wir verschieben die Punkte
A,B,C,X
so, dass sieX
am Ursprung liegen, und nutzen dabei die in Python integrierte komplexe Arithmetik. Wir müssen überprüfen, ob der Ursprung in der konvexen Hülle von enthalten istA,B,C
. Dies entspricht dem Ursprung, der immer auf der gleichen Seite (links oder rechts) der Liniensegmente AB, BC und AC liegt.Ein Segment
AB
hat den Ursprung links, wenn man weniger als 180 Grad gegen den Uhrzeigersinn fährt, um von A nach B zu gelangen, und ansonsten rechts. Wenn wir die Winkel betrachtena
,b
undc
die diesen Abschnitten entsprechen, bedeutet dies ,b-a < 180 degrees
(entnommen Winkel im Bereich von 0 bis 360 Grad). Als komplexe Zahlenangle(B/A)=angle(B)/angle(A)
. Auchangle(x) < 180 degrees
genau auf den Punkt in der oberen Halbebene, den wir über prüfenimag(x)>0
.Ob der Ursprung also links von AB liegt, wird ausgedrückt als
(A/B).imag>0
. Wenn Sie prüfen, ob diese für jedes zyklische Paar in gleich sindA,B,C
, sehen Sie, ob das DreieckABC
den Ursprung enthält.Kehren wir nun zum vollständigen Code für den Golfsport zurück
Wir generieren jedes zyklische Paar in
(A-X,B-X,C-X)=(L[0]-X,L[1]-X,L[2]-X)
, indem wir negative Python-Listenindizes verwenden, die sich um (L[-1]
=L[2]
) drehen . Um zu überprüfen, ob die Bools alleTrue
(1
) oder alleFalse
(0
) sind, fügen wir sie hinzu und überprüfen die Teilbarkeit durch 3, wie es bei vielen Lösungen der Fall war .quelle
Fortran -
232218195174Wirklich grauenhaft. Die Funktion ist schrecklich, da die Daten an sie weitergegeben werden müssen und wir sie nicht vorverarbeiten können.
Der Rückgang um 14 Zeichen ist darauf zurückzuführen, dass ich vergessen habe, den Funktionsnamen aus meinen Testläufen zu übernehmen. Der weitere Rückgang ist auf die implizite Eingabe und den Verzicht auf die Änderung des Funktionsnamens zurückzuführen. Die nächsten 20 Zeichen kamen durch Einlesen der Punkte als einzelnes Array zustande. Das volle Programm ist
quelle
logical function T(x);real x(8);p=x(1)-x(3);q=x(2)-x(4);r=x(5)-x(3);s=x(6)-x(4);u=x(7)-x(3);v=x(8)-x(4);o=r*v-u*s;T=ALL([p*(s-v)+q*(u-r)+o,p*v-q*u,q*r-p*s]>=o);end
verkürzen, indem Sie sich auf Fortrans implizite Eingabe verlassen und ein einzelnes Eingabearray verwenden, das alle 8 Zahlen enthält: Ich habe versucht, dies mithilfe von Listenoperationen weiter zu verkürzen, aber das hat leider nicht sehr gut geklappt.logical function T(x);real x(8);p=x(1)-x(3);q=x(2)-x(4);r=x(5)-x(3);s=x(6)-x(4);u=x(7)-x(3);v=x(8)-x(4);a=r*v-u*s;b=p*v-q*u;d=q*r-p*s;T=ALL([a-b-d,b,d]>=a);end
Ich hoffe, ich habe bei den Transformationen keine Fehler gemacht! Obwohl es so aussieht, als würde Ihr ursprünglicher Code nicht alle Testfälle bestehen.True
Beispiel in OP gibt an,False
ob ichB
undC
's Werte vertausche , während ichTrue
für die ursprüngliche Orientierung gebe .a < 0
die zu testende Bedingung effektiv umgekehrt wird. Leider kann dies nicht einfach dadurch behoben werden, dass man alles in ein einwickeltabs
, da dann der implizite Zustandb
undd
das gleiche Vorzeichena
verloren geht. Dies kann durch die Verwendung von etwas behoben werden (erneut die Verwendung der Notation und der vordefinierten Variablen aus meinem letzten Kommentar)e=a-b-d;T=ALL([a*a-b*b,a*a-d*d,a*a-e*e,a*b,a*d,a*e]>=0)
- was wahrscheinlich mehr Golf sein kann.MATLAB: 9!
Nicht viel von mir hier zu schreiben
Kann man so nennen:
Die Ausgabe wird einer Variablen mit dem Namen zugewiesen
ans
Wenn ich tatsächlich eine Funktion schreiben müsste, könnte es so etwas wie optimiert werden:
quelle
f=@(a,b,c,d)inpolygon(a,b,c,d)
C # 218 (149?)
Wahrscheinlich nicht so zeicheneffizient wie eine mathematische Methode, aber es macht Spaß, Bibliotheken zu benutzen. Übrigens auch eher langsam.
Nutzen Sie auch die Vorteile von "Sorgen Sie sich nicht um numerische Stabilität oder Gleitkommapräzision." - leider
GraphicsPath
Anwendungenint
s intern, so dass ein Wert im Bereich von -1 <f <1 nur drei mögliche Werte haben. Da Floats nur eine Genauigkeit von 7 Stellen haben, multipliziere ich einfach mit 1e7, um sie in ganze Zahlen umzuwandeln. Hm, ich denke es verliert nicht wirklich an Präzision. Es ist auch auf eine andere Art ausnutzbar: Ich hätte wahrscheinlich den Vorteil ziehen können, die Präzision zu ignorieren und einfach die "falsche" Antwort gegeben zu haben.Wenn ich die Zeichenkosten für das Importieren von Bibliotheken ignorieren darf, 149 (zumindest
System.Linq
undSystem.Drawing
in den meisten WinForms-Projekten als Standard zu bezeichnen, kann sich aber als schwierig erweisenSystem.Drawing.Drawing2D
):Testprogramm (ja, es ist hässlich):
quelle
Haskell -
233127Verwendung von Kreuzprodukten wie hier beschrieben :
Vorherige Lösung implementiert unter Verwendung von Schwerpunktkoordinaten und den in dieser Stack Exchange- Antwort beschriebenen Formeln :
Beide Funktionen
g
undh
nehmen vier Paare auf, von denen das erste der Punkt ist, der auf Einschluss geprüft werden soll, und der Rest die Koordinaten der Eckpunkte des Dreiecks sind.So testen Sie mit der Beispieleingabe:
Ungolfed-Lösungen:
quelle
JavaScript (ES6) 120
Direkt von meiner Antwort auf diese andere Frage kopiert
Test In FireFox / Firebug - Konsole
Ausgang alle 1s
Output alle 0s
quelle
SmileBASIC,
111100 ZeichenZeichnet ein Dreieck und überprüft die Farbe des Pixels am Punkt. Das Dreieck wird 99999x vergrößert und so verschoben, dass der zu überprüfende Punkt vor dem Zeichnen bei (0,0) liegt, um Genauigkeitsverluste zu minimieren.
quelle
Intel 8087 FPU-Baugruppe,
222220 BytesVerwendet nur die 8087-FPU-Hardware zur Berechnung. Hier ist die nicht zusammengebaute (auch in diesem Fall nicht bespielte) Version als MAKRO (erspart Ihnen die 220 Hex-Byte-Codes):
Erläuterung
Verwendet das Ermitteln, um die Fläche des ABC-Dreiecks zu berechnen, und dann das Dreieck, das aus dem X-Punkt und zwei weiteren Punkten des ABC-Dreiecks gebildet wird. Wenn die Fläche des Dreiecks ABC der Summe der Flächen der Dreiecke XBC + AXC + ABX entspricht, liegt der Punkt innerhalb des Dreiecks. Das Ergebnis wird als ZF zurückgegeben.
Was ist daran schön?
Alle mathematischen Operationen und Gleitkommaoperationen werden in Hardware mit einer erweiterten Genauigkeit von 80 Bit ausgeführt. Der endgültige Fließkommavergleich wird ebenfalls in Hardware durchgeführt und ist daher sehr genau.
Dies verwendet auch alle acht Stapelregister des 8087 auf einmal.
Was ist nicht ganz so ordentlich daran
Da die Punkte des Dreiecks während der Berechnung mehrmals in die Formeln eingefügt werden müssen, muss jede Variable im Speicher nacheinander in der richtigen Reihenfolge in die Stapelregister der FPU geladen werden. Dies kann zwar relativ einfach wie eine Funktion als MAKRO modelliert werden, bedeutet jedoch, dass der Code bei jeder Assembly erweitert wird, wodurch redundanter Code erstellt wird. 41 Bytes wurden gespart, indem einige der gleichen wiederholten Codesegmente in PROCs verschoben wurden. Allerdings ist der Code dadurch weniger lesbar, weshalb die obige Auflistung nicht vorhanden ist (weshalb sie als "ungolfed" gekennzeichnet ist).
Tests
Hier ist ein Testprogramm unter Verwendung von IBM DOS, das die Ausgabe zeigt:
Ausgabe
quelle
C 414 (war 465)
Golf gespielt
Ursprüngliche Funktionsdeklaration zur Erklärung hinzugefügt
Als benannte Funktion umgeschrieben: Eingabe über stdin jeweils eine Zeile oder alle in einer Zeile durch Leerzeichen getrennt.
quelle
double
neu definiert,D
aber Sie verwenden immer nochdouble
im Code.Java, 149 Zeichen
Schrecklich, wenn ich bedenke, dass ich "Mathe" schreiben muss. jedes Mal. Dies ist das eigentliche Programm:
wobei a das x von Punkt a ist, b das x von Punkt b ist, c für x von c ist, d y von a ist, e y von b ist, f das y von c ist und x und y das x und sind y des Punktes. Der Boolesche Wert k bestimmt, ob er wahr ist oder nicht.
quelle
100*
?JavaScript 125/198
Wenn Punkte in 8 Argumenten angegeben werden:
Wenn Punkte in einem zweidimensionalen Array bereitgestellt werden:
Dieser Code verwendet keine dieser ausgefallenen Vektor-Mathematik. Stattdessen wird nur ein einfacher Algebra-Trick verwendet, um festzustellen, ob sich der Punkt innerhalb des Dreiecks befindet oder nicht. Die Formel:
was sagt, dass sich der Punkt auf welcher Seite einer Linie befindet , ergibt sich aus der Neuordnung der Definition der Neigung:
Wenn wir alle drei Seiten testen, sollten alle drei nur dann Zahlen mit demselben Vorzeichen ergeben, wenn sich der Punkt innerhalb des Dreiecks befindet, da wir ihn um das Dreieck testen. Wenn der Punkt auf einer Seite liegt, sollte einer der Tests 0 zurückgeben.
Testcode für jsFiddle: http://jsfiddle.net/DerekL/zEzZU/
Bei der Konvertierung in CoffeeScript werden 97 Zeichen (ohne Leerzeichen oder Tabulatoren) gezählt:
115 Zeichen bei Konvertierung in ES6:
quelle
d=(x,y,...)=>{...}
. In Ihrem Fall können Sie noch mehr sparen, indem Sie CoffeeScript verwenden, was nicht erforderlich istreturn
: pastebin.com/RVFk1D5k ... und in jedem Fall können Sie ein Byte sparen, indem Sie<1
anstelle von verwenden==0
.R 23
Inspiriert von MATLAB ,
heißt wie
SDMTools::pnt.in.poly(point,triangle)
wopoint
ist ein Vektor der Länge 2 undtriangle
ist eine 3x2 Matrix von Eckpunkten. SDMTools ist auf CRAN verfügbar.quelle
Mathematica, 38 Zeichen
Beispiel:
(* Wahr *)
quelle
C (gcc) , 108 Bytes
Probieren Sie es online!
Nimmt drei Kreuzprodukte und kehrt zurück,
1
wenn sich das Vorzeichen derk̂
Komponente nicht ändert.quelle