Pythagoras hatte sein Bein im Krieg gesprengt. Es musste amputiert werden, und obwohl er fast gestorben wäre, zog er durch und machte eine vollständige Genesung. Jetzt, nach einem Jahr mit Krücken, hat er das Privileg, eine Beinprothese zu bekommen! Es gibt jedoch einige, die passen, aber welche?
Die Aufgabe
Bei einer positiven Ganzzahl als Eingabe, die der Länge eines Zweigs eines pythagoreischen Tripels entspricht, werden alle Möglichkeiten für den anderen Zweig ausgegeben. Zum Beispiel ist das kleinste pythagoreische Tripel (3,4,5), das ein Dreieck mit zwei Beinen der Länge 3 und 4 und einer Hypotenuse der Länge 5 bildet.
Beispiele
Leg:5
12
Leg:28
21
45
96
195
Leg:101
5100
Leg:1001
168
468
660
2880
3432
4080
5460
6468
10200
38532
45540
71568
501000
Die Regeln
- Die Eingabe ist eine einzelne positive Ganzzahl
n
. - Die Ausgabe kann in beliebiger Reihenfolge erfolgen, mit einem beliebigen Trennzeichen, in einer beliebigen Basis (obwohl diese Basis konsistent sein muss) und mit optionalen öffnenden und schließenden geschweiften Klammern sowie optionalen nachgestellten Leerzeichen. Das heißt,
1 2 3
,[1,2,3]
, und1,11,111
alle passen diese Ausgabespezifikation. - Sie können davon ausgehen, dass dieser
n
Wert niemals größer als ein Viertel der vierten Wurzel Ihrer Sprachbeschränkung ist (ohne Bibliotheken zu verwenden). In der Praxis können Sie davon ausgehen, dass die Eingabe geringer ist als diese oder 10.000, je nachdem, welcher Wert geringer ist.
Pythagoras wartet auf Sie, schreiben Sie Ihren Code also schnell und kurz!
Antworten:
Pyth - 13 Bytes
Brute zwingt alle möglichen bis
n^2+1
.Test Suite .
quelle
Gelee , 8 Bytes
Diese Antwort ist nicht konkurrierend, da sie Funktionen verwendet, die nach dem Posten der Herausforderung implementiert wurden. Probieren Sie es online!
Dieser Ansatz verwendet keine Gleitkomma-Mathematik und gibt die richtige Antwort, solange die dazwischenliegenden Listen in den Speicher passen.
Idee
Wenn (a, b, c) ein pythagoreisches Tripel ist, gibt es streng positive ganze Zahlen k, m, n, so dass die Mengengleichung {a, b} = {km 2 - kn 2 , 2kmn} gilt.
Dies bedeutet insbesondere, dass a <b 2 und b <a 2 ist , sodass wir für Eingabe a einfach prüfen können, ob a 2 + b 2 ein perfektes Quadrat für jedes b in {1,… a 2 } ist .
Code
quelle
Julia, 35 Bytes
Dies ist eine anonyme Funktion, die eine Ganzzahl akzeptiert und ein Array zurückgibt.
Für jede
i
von 1 bis zum Quadrat der Eingabe berechnen wir die Hypotenuse mit Julias integrierterhypot
Funktion und bestimmen, ob der Bruchteil 0 ist. Wenn ja, behalten wir ihn bei, andernfalls ist er ausgeschlossen.quelle
CJam, 17 Bytes
Dies ist eine anonyme Funktion, die eine Ganzzahl aus dem Stapel entfernt und ein Array zurückgibt.
Probieren Sie es online!
Idee
Wenn (a, b, c) ein pythagoreisches Tripel ist, gibt es streng positive ganze Zahlen k, m, n, so dass die Mengengleichung {a, b} = {km 2 - kn 2 , 2kmn} gilt.
Dies bedeutet insbesondere, dass a <b 2 und b <a 2 ist , sodass wir für Eingabe a einfach prüfen können, ob a 2 + b 2 ein perfektes Quadrat für jedes b in {1,… a 2 } ist .
Code
quelle
JavaScript ES6, 60
62Entspricht den anderen Antworten und prüft von 1 bis a * a-1
Danke an @ Mwr247, der kürzeste Weg, um eine Reichweite in ES6 zu erstellen
2 Bytes gespart dank @ETHproductions
quelle
a=>[...Array(a*a).keys()].filter(b=>b&&!(Math.hypot(a,b)%1))
C 96 Bytes
Erhöhen Sie abwechselnd
y
(das andere Bein) undz
(die Hypotenuse), bis die Differenz auf 1 sinkt. Geben Sie jede exakte Übereinstimmung (c==0
) aus, die Sie unterwegs finden.Rufen Sie das kompilierte Programm mit n als Parameter auf; Es wird eine durch Leerzeichen getrennte Liste von Dezimalzahlen ausgegeben.
Offensichtlich nicht die kürzeste; Ich mag Trost darin finden, den schnellsten zu haben.
quelle
Wolfram Language (Mathematica) , 40 Byte
Ich verwende eine undokumentierte Form von
Solve
: Wenn die Liste der Variablen weggelassen wird, wirdSolve
standardmäßig nach allen Symbolen im Ausdruck aufgelöst. Wir sparen also 6 Bytes gegenüber den regulärenSolve[#^2+b^2==c^2,{b,c},PositiveIntegers]
.PositiveIntegers
ist neu in Version 12 von Mathematica und daher in TIO nicht verfügbar . In Desktop Mathematica bekommen wirquelle
Python 2, 53 Bytes
Eine einfache Lösung,
abs
bei der die Länge der Hypotenuse mithilfe von Komplex berechnet wird. Es ist sichern*n
als obere Schranke für das andere Bein zu verwenden, weil(n*n)^2 + n^2 < (n*n+1)^2
. Ich habe versucht, stattdessen eine Rekursion zu verwenden, habe aber nichts Kürzeres gefunden.quelle
Im Ernst, 20 Bytes
Gleiche Strategie wie die Antwort von xnor in Python: Überprüfen Sie, ob
i in range(1,n*n)
Werte vorhanden sindabs(i+nj) % 1 == 0
, und geben Sie die Liste aus. Probieren Sie es online ausErläuterung:
quelle
PARI / GP, 36 Bytes
quelle
APL (NARS), 373 Zeichen, 746 Byte
Kommentar:
Die Idee wäre der Faktor der Eingabe, um das mögliche m, n zu kennen, das unter Verwendung aller Pythagorianischen Tripel erzeugt wird, die die Eingabe als Schenkel haben. Prüfung:
quelle
APL (Dyalog Extended) ,
15 bis14 Byte SBCSAnonyme implizite Präfixfunktion.
Probieren Sie es online!
×⍨
Quadrat (lit. Multiplikation Selfie) des Arguments(
…)
Wenden folgende anonyme stillschweigende Funktion an:⍳
ɩ Zahlen 1 durch das Argument⍳
multiplizieren Sie mit ɩ ntegers 1 durch das Argument (dh Quadrat)⊢(
…)
Wende die folgende anonyme implizite Funktion mit dem Argument als linkes Argument an:+
ist die Summe∊
ein Mitglied von⊢
es?⍸
ɩ ndices von Wahrheitenquelle
Perl 5, 43 Bytes
Wenn Sie möchten, dass das Skript beendet wird, können wir andere Zweige nur bis zu einer Größe von n² untersuchen, wie von xnor erläutert. Wir haben also 48 Bytes:
quelle
Japt , 16 Bytes
Probieren Sie es online!
Wie es funktioniert
quelle
Stax , 8 Bytes
Führen Sie es aus und debuggen Sie es
Im Pseudocode:
quelle
05AB1E , 10 Bytes
Probieren Sie es online aus oder überprüfen Sie alle Testfälle .
Probieren Sie es online aus oder überprüfen Sie alle Testfälle .
Erläuterung:
quelle
MathGolf , 9 Bytes
Probieren Sie es online!
Konnte keinen guten Weg finden, um irgendwelche der
²
s zu entfernen , die 3/9 Bytes belegen. Ansonsten ist es ganz einfachErläuterung
quelle
Java 8, 72 Bytes
Probieren Sie es online aus.
Erläuterung:
quelle