Definition
Ein "ganzzahliges Dreieck" ist eines mit ganzzahligen Koordinaten. Das folgende Dreieck ist beispielsweise ein ganzzahliges Dreieck:
(0, 0), (0, 1), (1, 2) with perimeter 1 + sqrt(2) + sqrt(5) ≈ 4.650.
Aufgabe
Ziel dieser Herausforderung ist es, alle ganzzahligen Dreiecke (bis zur Kongruenz) mit einem Umfang von weniger als n zu zählen.
Ein- und Ausgang
Das Argument wird als Ganzzahl angegeben, und die Ausgabe sollte die Anzahl der Dreiecke sein, deren Umfang strikt kleiner ist als das Argument.
Beispiele
Das kleinste ganzzahlige Dreieck pro Umfang ist kongruent zu
(0, 0), (0, 1), (1, 0) which has perimeter 2 + sqrt(2) ≈ 3.414
Die nächstkleineren sind:
(0, 0), (0, 1), (1, 2) with perimeter 1 + sqrt(2) + sqrt(5) ≈ 4.650,
(0, 0), (0, 2), (1, 1) with perimeter 2 + 2sqrt(2) ≈ 4.828,
(0, 0), (0, 2), (1, 0) with perimeter 3 + sqrt(5) ≈ 5.236, and
(0, 0), (1, 2), (2, 1) with perimeter sqrt(2) + 2sqrt(5) ≈ 5.886
Testfälle:
a(1) = 0
a(2) = 0
a(3) = 0
a(4) = 1
a(5) = 3
a(6) = 5
a(7) = 11
a(8) = 18
a(9) = 29
a(10) = 44
a(12) = 94
a(20) = 738
a(30) = 3756
a(40) = 11875
Ich habe Koordinaten für jedes der Dreiecke in diesem Gist .
Warnungen
Beachten Sie, dass zwei nicht kongruente Dreiecke denselben Umfang haben können:
(0, 0), (0, 3), (3, 0) and (0, 0), (0, 1), (3, 4) both have perimeter 6 + 3sqrt(2).
Denken Sie auch daran, dass die Ungleichung streng ist ; Das 3-4-5-Pythagoras-Dreieck sollte mit einem (13) und nicht mit einem (12) gezählt werden.
Wertung
Das ist Code-Golf - der kürzeste Code gewinnt!
quelle
Antworten:
Jelly ,
28272523 BytesProbieren Sie es online!
Wie es funktioniert
quelle
Jelly ,
3833 Bytes-1 Dank an Erik den Outgolfer (invertiere
SP¬+÷/E$
durch VerwendenSẠ>÷/E$
und VerwendenÇÐf
anstattÇÐḟ
) -1 Dank an Mr. Xcoder (keine Notwendigkeit, vor dem Sortierenzu reduzieren ) -2 Dank an Mr. Xcoder (
S<¥Ðf³L
->S€<³S
)-1 Stehlen eines Tricks von eine frühere Überarbeitung von Dennis 'Antwort (
ṗ2’Œc
->p`⁺’
- überflüssigere Fälle, aber golferischer!)Ein vollständiges Programm, das eine Ganzzahl aufnimmt und das Ergebnis druckt.
Probieren Sie es online! (zu langsam, um Testfälle über 20 in unter 60 Jahren abzuschließen)
Wie?
quelle
[(a+c)×(b+d)]
->(a+c)×(b+d)
,[c÷a,d÷b]
->[a÷c,b÷d]
,c÷a==d÷b
->a÷c==b÷d
," c÷a==d÷b
->" a÷c==b÷d
. Funktion .nan
.SP¬
und missbraucht nicht wirklich die Division durch Null Ergebnisse (Ich denke, das könnte explizit mit einem tatsächlichen oder sein)¬+
mit<
. (EDIT: Sie müssen nicht ersetzen ,P
mitẠ
, wie Sie nur nicht-negative Koordinaten.)7
kehrt21
zum Beispiel)JavaScript (ES7), 157 Byte
Testfälle
Mit der Standardstapelgröße der meisten JS-Engines können nur kleine Werte berechnet werden.
Code-Snippet anzeigen
Nicht rekursive Version, 165 Bytes
Testfälle
Diese Version funktioniert auch für eine (30) und eine (40) , aber das würde für das Snippet zu viel Zeit in Anspruch nehmen.
Code-Snippet anzeigen
quelle
Julia 0,6 , 135 Bytes
Durchlaufen Sie mögliche Nichtursprungspunkte, um das Dreieck zu bilden, stellen Sie sie als komplexe Zahlen dar, sortieren Sie die quadratischen Längen und halten Sie sie in einem Satz, um die Kongruenz zu überprüfen. Vermeidet kolineare Punkte, indem überprüft wird, ob der Winkel zwischen ihren komplexen Zahlen ungleich Null ist. Dann wird die Länge des Sets zurückgegeben. Es ist kürzer, die Längen direkt zu verwenden, aber Sie erhalten die falsche Antwort für
a(40)
. Die Lösung ist zu langsam, um ausgeführt zu werden,a(40)
da eine Warnung wegen Verfalls angezeigt wird. Daher habe ich auch einen Link zu einer schnelleren Version.Probieren Sie es online!
Eine schnellere, längere Version mit Verfall wird vermieden. Probieren Sie es online! Verwendet
sqrt.(g)
anstelle von veraltet√g
für elementweise Quadratwurzel.quelle
Sauber ,
227... 143 BytesProbieren Sie es online!
Erkennt kongruente Dreiecke durch Vergleichen der drei Werte, die den Umfang ergeben, und der kolinearen Punkte, indem überprüft wird, dass die beiden kleinsten dieser Werte nicht zur dritten addiert werden.
Hier ist eine Version, die einen schnelleren, speicherintensiveren Ansatz verwendet: Probieren Sie es online aus!
quelle
Start = @ 12.0
Ich erhalte keine Ausgabe" wechsle, mache ich etwas falsch?