Aus http://en.wikipedia.org/wiki/Triangle :
Schreiben Sie ein Programm, das drei 2-D-Koordinatentupel (kartesisch) verwendet und klassifiziert, welche Form diese drei Punkte beschreiben.
In fast allen Fällen beschreiben diese Punkte ein Dreieck unterschiedlicher Art. In einigen entarteten Fällen beschreiben die Punkte entweder einen singulären Punkt oder eine gerade Linie. Das Programm bestimmt, welche der folgenden Tags für die beschriebene Form gelten:
- Punkt (3 Punkte sind Co-Incident)
- Linie (3 Punkte liegen auf einer geraden Linie - nicht mehr als 2 Punkte dürfen gleichzeitig auftreten)
- Gleichseitig (3 Seiten gleich, 3 Winkel gleich)
- Gleichschenklig (2 Seiten gleich, 2 Winkel gleich)
- Scalene (0 Seiten gleich, 0 Winkel gleich)
- Rechts (1 Winkel genau π / 2 (oder 90 °))
- Schräg (0 Winkel genau π / 2 (oder 90 °))
- Stumpf (1 Winkel> π / 2 (oder 90 °))
- Akut (3 Winkel <π / 2 (oder 90 °))
Beachten Sie, dass für einige beschriebene Formen mehr als eines der oben genannten Tags gilt. Beispielsweise ist jedes rechtwinklige Element entweder gleichschenklig oder schuppenförmig.
Eingang
- Das Programm kann die 3 Eingabekoordinaten von STDIN, der Befehlszeile, den Umgebungsvariablen oder einer für die Sprache Ihrer Wahl geeigneten Methode lesen.
- Die Eingabekoordinaten können formatiert werden, sind jedoch für die Sprache Ihrer Wahl geeignet. Es kann davon ausgegangen werden, dass alle Eingabenummern in Bezug auf die Datentypen, die Sie letztendlich verwenden, wohlgeformt sind.
- Über die Reihenfolge der Eingabekoordinaten kann nichts angenommen werden.
Ausgabe
- Das Programm gibt STDOUT, ein Dialogfeld oder eine andere für die Sprache Ihrer Wahl geeignete Anzeigemethode aus.
- In der Ausgabe werden alle Tags angezeigt, die für die durch die Eingabekoordinaten beschriebene Form gelten.
- Tags können in beliebiger Reihenfolge ausgegeben werden.
Andere Regeln
- Die trigonometrischen Bibliotheken / APIs Ihrer Sprache sind zulässig, aber alle APIs, die speziell Dreieckstypen berechnen, sind gesperrt.
- Wenn Sie die Gleichheit von Winkeln oder Längen von Seiten bestimmen, werden Sie wahrscheinlich Gleitkommawerte vergleichen. Zwei solche Werte sind als "gleich" zu betrachten, wenn einer innerhalb von 1% des anderen liegt.
- Standard "Schlupflöcher", die nicht mehr lustig sind
- Das ist Code-Golf , also gewinnt die kürzeste Antwort in Bytes.
Beispiele
Input Output
(1,2) (1,2) (1,2) Point
(1,2) (3,4) (5,6) Line
(0,0) (1,1) (2,0) Isosceles Right
(0,0) (2,1) (10,1) Scalene Oblique Obtuse
Antworten:
C (451 Bytes)
Verwendet nur quadratische Längen und Steigungen.
Ungolfed (und ternärer Operator ersetzt durch if / else):
Eingabe (über stdin) Format: xyxyxy
Ex. 0 0 1 1 2 0 für Isosceles Right
quelle
./triangle <<< "1 2 1 2 1 2"
sollte mit den Anführungszeichen verwendet werden.C 333
Ich ließ das Leerzeichen für den Moment. Dies funktioniert, könnte aber wahrscheinlich etwas Aufräumen und Golfen vertragen. Ähnliche Mathematik zu
@es1024
die Antwort 's, verwendet jedoch eine Schleife und Arrays. Eingabeformatx y x y x y
Variablen
t[]
Speichert sowohl die Eingabe als auch die Quadrate der Längen. Am Ende des Programms sieht es wie in der folgenden Tabelle aus (eine Erhöhung der Anzahl der Iterationen der Schleife würde zu einer unbestimmten Wiederholung der quadrierten Längen führen.) Am Anfang der Schleife sind Quadrate der Längen (Müll, da nicht alle Daten verfügbar) ) werden unnötigerweise in den Zellen 1,3 und 5 gespeichert, aber umgehend überschrieben.scanf.
Nützliche Daten werden nachz,b,c
ahd geschrieben,s
wenni
= 9,11,13 (t[i]
undt[i-2]
zugegriffen wird.)g[]
wurde spät hinzugefügt, um die für die Steigungsberechnung erforderlichen dx- und dy-Werte zu halten. Die einzigen verwendeten Zellen sind 6 bis 9 (0 bis 5 sind unzuverlässig, da nicht alle Daten zum Zeitpunkt des Schreibens verfügbar sind.) Ifg[6]/g[7]==g[8]/g[9]
die Steigungen von 2 Linien gleich sind und das Dreieck nur eine Linie (oder ein Punkt) ist. Die Gleichung wird im Programm neu angeordnet, um eine Teilung zu vermeiden.r
ist ein Zwischenwert für das Quadrierenz
zählt die Anzahl der Seiten der Länge Null. Es hat einen Versatz von +3, da die Schleife 3 leere Zellen einliestt[]
.c
zählt die Anzahl der Seiten gleicher Länge. Es hat auch einen Offset von +3. Beachten Sie, dass die Seite zweimala
geschrieben wird,t[]
um a = b, b = c, c = a überprüfen zu können.b
ist die größte Länge einer Seite, im Quadrat.s
ist die Summe der Quadrate aller Seiten.Beachten Sie, dass der Vergleich der Seitenlängen A ^ 2 + B ^ 2 + C ^ 2 mit 2 * B ^ 2 dem Vergleich von A ^ 2 + C ^ 2 mit B ^ 2 entspricht (subtrahieren Sie einfach B ^ 2 von beiden Seiten) wenn B ^ 2 = A ^ 2 + C ^ 2 ist, ist es ein rechtwinkliges Dreieck. wenn B ^ 2 größer ist, ist es stumpf, wenn es kleiner ist, ist es akut.
quelle
Golfscript (175 Bytes)
Sie können es hier testen testen (Test-Set enthalten).
Eingabeformat:
Kommentierte Version:
HINWEIS:
Der Grund, warum mein Code keine "gleichseitige" Ausgabe enthält, ist folgender:
quelle
Mathematica (
313307 Zeichen)Golf gespielt:
Ungolfed:
Das Eingabeformat ist eine Liste von Punkten, nach denen die Funktion aufgerufen wird:
quelle