From http://en.wikipedia.org/wiki/Triangle :
Napisz program, który pobiera trzy krotki współrzędnych 2d (kartezjański) i klasyfikuje, jaki kształt opisują te trzy punkty.
W prawie wszystkich przypadkach punkty te opisują trójkąt różnych typów. W niektórych zdegenerowanych przypadkach punkty będą opisywać pojedynczy punkt lub linię prostą. Program określi, które z następujących znaczników dotyczą opisanego kształtu:
- Punkt (3 punkty to incydent)
- Linia (3 punkty leżą na linii prostej - nie więcej niż 2 punkty mogą być współwystępujące)
- Równoległe (3 strony równe, 3 kąty równe)
- Równoramienne (2 strony równe, 2 kąty równe)
- Skalen (0 boków równych, 0 kątów równych)
- W prawo (1 kąt dokładnie π / 2 (lub 90 °))
- Ukośne (0 kątów dokładnie π / 2 (lub 90 °))
- Tępy (1 kąt> π / 2 (lub 90 °))
- Ostre (3 kąty <π / 2 (lub 90 °))
Pamiętaj, że w przypadku niektórych opisanych kształtów zastosowanie będzie mieć więcej niż jeden z powyższych znaczników. Na przykład każdy kąt prosty będzie albo równoramienny, albo skalenowy.
Wkład
- Program może odczytać 3 współrzędne wejściowe ze STDIN, wiersza poleceń, zmiennych środowiskowych lub dowolnej innej metody dogodnej dla wybranego języka.
- Współrzędne wejściowe mogą być sformatowane, ale jest to wygodne dla wybranego języka. Można założyć, że wszystkie liczby wejściowe są dobrze uformowane w odniesieniu do typów danych, z których ostatecznie korzystasz.
- Nic nie można założyć o uporządkowaniu współrzędnych wejściowych.
Wydajność
- Program wyświetli STDOUT, okno dialogowe lub dowolną metodę wyświetlania dogodną dla wybranego języka.
- Wyjście wyświetli wszystkie znaczniki mające zastosowanie do kształtu opisanego przez współrzędne wejściowe.
- Tagi mogą być wyprowadzane w dowolnej kolejności.
Inne zasady
- Dopuszczalne są trygonometryczne biblioteki / interfejsy API w Twoim języku, ale wszelkie interfejsy API, które specjalnie obliczają typy trójkątów, są zakazane.
- Przy określaniu równości kątów lub długości boków prawdopodobnie skończysz na porównywaniu wartości zmiennoprzecinkowych. Dwie takie wartości należy uznać za „równe”, jeśli jedna mieści się w granicach 1% drugiej.
- Standardowe „luki”, które nie są już śmieszne
- To jest golf golfowy , więc wygrywa najkrótsza odpowiedź w bajtach.
Przykłady
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