Koła i kwadraty mają jeden określony punkt środkowy. Jednak pojęcie środka trójkąta było długo dyskutowane. Starożytni Grecy znali cztery różne ośrodki:
- Incenter : Przecięcie bisectors kąta trójkąta
- Środek ciężkości : Przecięcie linii od każdego wierzchołka trójkąta do środka jego przeciwnej strony
- Circumcenter : Przecięcie prostopadłych dwusiecznych boków
- Ortocentrum : Przecięcie wysokości trójkąta
Później Euler udowodnił, że środek ciężkości, środek okręgu i ortocentrum są współliniowe w dowolnym trójkącie. Linia, na której te trzy punkty znajdują się w trójkącie, nazywa się linią Eulera . Jest on zdefiniowany dla każdego trójkąta oprócz trójkąta równobocznego, w którym wszystkie punkty pokrywają się.
Wyzwanie polega na stworzeniu najkrótszego programu lub funkcji, która przy dwóch wejściach generuje określone centrum lub linię Eulera trójkąta. Pierwszy określa współrzędne każdego wierzchołka trójkąta. Druga to liczba całkowita od 1 do 5, określająca, co wyprowadzić.
1 - Incenter
2 - Centroid
3 - Circumcenter
4 - Orthocenter
5 - Equation of Euler Line
(if the Euler Line is vertical, output the `x` value of the line
(e.g. output `5` if the equation of the line is `x = 5`))
Możesz założyć, że podane wierzchołki nigdy nie będą współliniowe, i że zawsze będą to współrzędne całkowite (wyklucza to również możliwość wprowadzenia trójkąta równobocznego jako danych wejściowych, zgodnie z komentarzem @ R.Kapa ).
Tablica wejściowa powinna być prawidłową tablicą zagnieżdżoną w Twoim języku, a dane wejściowe powinny mieć dowolny rozsądny format. Wszelkie wartości zmiennoprzecinkowe powinny być wyświetlane z co najmniej 3 miejscami po przecinku, ale nie mniej. Punktem wyjściowym powinna być poprawna tablica w twoim języku, zgodna z formatem wejściowym.
Przypadki testowe:
Input: [(-2, 0), (1, 0), (0, 1)] 1
Output: (-0.089, 0.451)
Input: [(-2, 0), (1, 0), (0, 1)] 2
Output: (-0.333, 0.333)
Input: [(-2, 0), (1, 0), (0, 1)] 3
Output: (-0.5, -0.5)
Input: [(-2, 0), (1, 0), (0, 1)] 4
Output: (0, 2)
Input: [(-2, 0), (1, 0), (0, 1)] 5
Output: 5x + 2
Wyjaśnienie: Dane wejściowe mogą pochodzić ze standardowego wejścia, oddzielone spacją lub znakiem nowej linii lub jako argumenty funkcji. Dane wyjściowe należy jednak zapisać na standardowe wyjście.
y=f(x)
.(if the triangle is equilateral, output the point at which the centers meet)
, ponieważ jest to nie możliwe, aby tworzyć trójkąt równoboczny na płaszczyźnie współrzędnych przy użyciu tylko całkowitą współrzędnych.Odpowiedzi:
Python -
908870Dodano nowe linie, aby ograniczyć przewijanie. Prawdopodobnie można by dalej grać w golfa.
Przypadki testowe (z przypisami):
Jak widać, możliwe są błędy spowodowane przez użycie zmiennoprzecinkowe.
Dalsza gra w golfa:
W oparciu o sugestie w komentarzach poniżej udało mi się to zmniejszyć.
źródło
R=r.append
a następnie wykorzystać to przez cały czas, aby zaoszczędzić bajty?AutoHotkey - 731
Funkcja może być bardziej zminimalizowana (do około 600 znaków LUB mniej) poprzez skrócenie nazw zmiennych, takich jak midx_a, midx_b i tak dalej.
Wywołanie funkcji
źródło
Python 3.5,
851772 bajtów:Pobiera dane wejściowe jako ciąg współrzędnych oddzielonych przecinkami, po których następuje liczba całkowita przenosząca dane wyjściowe. Na przykład, jeśli współrzędne wejściowe są
(1,0),(2,1),(1,4)
i chcesz, aby ortocentrum trójkąta odpowiadało tym współrzędnym, po prostu wywołaj funkcję w następujący sposób:Dane wyjściowe są w formacie krotki, jeśli potrzebny jest określony punkt, w formacie ciągu znaków z równaniem w postaci,
y=mx+b
jeśli potrzebna jest linia Eulera, a linia nie jest pionowa, lub po prostux
wartość linii, jeśli linia Eulera jest potrzebne, ale linia jest pionowa.Tak więc, używając trójkąta z wierzchołkami
(1,0),(2,1),(1,4)
, wyniki byłyby następujące:Z czasem spróbuję zagrać w golfa, gdzie i kiedy będę mógł.
Wypróbuj online! (Ideone)
źródło