Biorąc pod uwagę trzy długości boczne trójkąta, oceń jego współczynnik proporcji AR na podstawie następującego wzoru:
gdzie
Im trójkąt jest bliższy równowadze, tym bliższy jest 1
jego współczynnik kształtu. Współczynnik kształtu jest większy lub równy 1
dla prawidłowych trójkątów.
Wejścia
Dane wejściowe to trzy rzeczywiste liczby dodatnie, które w razie potrzeby mogą być zawarte w liście lub czymkolwiek podobnym.
Twój program musi wypisywać tę samą wartość bez względu na kolejność wprowadzania trzech długości bocznych.
Te trzy liczby zawsze będą prawidłowymi długościami bocznymi trójkąta (zdegenerowane trójkąty, takie jak ta o długościach bocznych 1
, 1
i 2
nie zostaną podane jako dane wejściowe). Nie musisz się martwić niedokładnościami liczb zmiennoprzecinkowych, gdy wartości stają się bardzo bliskie zdegenerowanemu trójkątowi (np. Dopuszczalne jest, że twój program popełnił błąd division by 0
przy wprowadzaniu [1, 1, 1.9999999999999999]
).
Dane wejściowe można podać STDIN
jako argument funkcji lub coś podobnego.
Wyjścia
Wynik jest liczbą rzeczywistą większą lub równą 1
standardowej dokładności akceptowanej w Twoim języku.
Wyjście może być wydrukowane STDOUT
, zwrócone z funkcji lub coś podobnego.
Przypadki testowe
Inputs Output
1 1 1 1
3 4 5 1.25
42 42 3.14 ≈ 6.9476
14 6 12 1.575
6 12 14 1.575
0.5 0.6 0.7 ≈ 1.09375
Punktacja
To jest golf golfowy , więc wygrywa najkrótsza odpowiedź w bajtach.
źródło
42.0
zamiast42
.0
?Odpowiedzi:
Galaretka , 6 bajtów
Ta odpowiedź oparta jest na odpowiedzi Emabny 05AB1E . Ogromne podziękowania dla Dennisa i Lynn za pomoc w znalezieniu tej odpowiedzi. Zapraszamy do gry w golfa! Wypróbuj online!
Ungolfing
źródło
⁸÷
zostaje odcięty od łańcucha jako jednostka i należy go odczytywać, dzieląc początkowy lewy argument przez to lub coś takiego.Galaretka , 7 bajtów
Wypróbuj online!
Wyjaśnienie
Przeczytajmy ten łańcuch:
Domniemany argument to lista
[a, b, c]
.Najpierw czytamy
S
. Dzieje sumę:a + b + c
.Potem czytamy
H
. Ten połówki go:(a + b + c)/2
. (To jests
.)Następnie czytamy diadę
_
(odejmujemy), a następnie kolejną diadę. To jest haczyk : brakuje mu właściwego argumentu, więc otrzymuje argument do tego łańcucha[a, b, c]
, dając nam[s-a, s-b, s-c]
. (Jest to piąty wzór łańcucha w tabeli tutaj .)Następnie czytamy parę diad-monada
÷@H
. To jest rozwidlenie :÷@
jest to podział z odrzuconymi argumentami iH
jest o połowę, więc nasza wartość robocza dostajeH
przez to argument do tego łańcucha÷
. To wektoryzuje; zostaliśmy z[(a/2)/(s-a), (b/2)/(s-b), (c/2)/(s-c)]
. (To jest drugi wzór łańcucha w tabeli tutaj .)Wreszcie, zabieramy produkt
P
, zabierając nasabc/(8(s-a)(s-b)(s-c))
.Zobacz podobny do drzewa wykres, w jaki sposób łączą się linki.
źródło
Galaretka , 6 bajtów
Wypróbuj online!
Jak to działa
źródło
³⁴⁵
jako argument ...JavaScript, 38 bajtów
To jest ( curry ) lambda:
(Jeśli przypiszesz ją do zmiennej
f
, musisz ją nazwać jakf(3)(4)(5)
)źródło
s = 1/2(a+b+c)
do formuły i uprościć: D (np.s-a = .5*b+.5*c-.5*a
I trzy czynniki.5
anulowania za pomocą8
)(a,b,c)=>
ma taką samą długość i kosztuje mniej bajtów;)05AB1E ,
117 bajtów05AB1E wykorzystuje kodowanie CP-1252 .
Wypróbuj online!
Wyjaśnienie
źródło
MATL ,
87 bajtówWypróbuj online!
Wyjaśnienie
[3 4 5]
Jako przykład weźmy dane wejścioweźródło
R,
3429 bajtówOdczytuje dane wejściowe ze standardowego wejścia i przechowywać jako R-wektor
x
. Następnie skorzystaj z wektoryzacji R, aby utworzyć mianownik.źródło
Haskell, 36 bajtów
Definiuje funkcję,
#
która przyjmuje trzy argumenty.Musisz to nazwać w następujący sposób:
(3#4)5
Trochę dłużej, ale być może bardziej golfowy:
źródło
MATLAB,
64 3825 bajtówJest to jednoznaczna funkcja, która implementuje formułę podaną poniżej:
Zakłada, że dane wejściowe to lista trzech wartości, np
[3,4,5]
. Ten przykład został użyty w następującym objaśnieniu:źródło
Mathematica, 20 bajtów
Pobiera dane wejściowe jako listę trzech wartości, które są określane jako
#
wewnątrz funkcji.Tr@
Jest to najkrótsza droga do sumowania listę (dostać2s
) i1##&@@(...)
mnoży trzech czynnikówi/(2s-2i)
dlai
wa, b, c
.Jeśli dane wejściowe są liczbami całkowitymi lub liczbami wymiernymi, otrzymasz dokładny wynik.
źródło
Python 3 , 42 bajty
Wypróbuj online!
źródło
OCaml, 51 bajtów
Tak, oddzielne operatory dla pływaków ...
źródło
Cud , 48 bajtów
ROZERWAĆ
Stosowanie:
Wyjaśnienie
Wywołania funkcji są kosztowne w Wonder w porównaniu do operatorów infix w innych językach. Z tego powodu zawarłem wszystkie warunki w tablicy i otrzymałem wynik wyniku zamiast pomnożenia każdego terminu. Kod byłby równoważny do czegoś takiego jak:
źródło
Faktycznie ,
108 bajtówTa odpowiedź jest oparta na doskonałej odpowiedzi Dennisa na żelki . Zapraszamy do gry w golfa! Wypróbuj online!
Ungolfing
źródło
Minecraft 1.8, 1607 bajtów + 85 bloków = 1692 blytów
Ostrzeżenie: Nie grał w golfa. Golfed będzie trwać do 1 / 3 mniej blytes.
Oto skomentowany zrzut ekranu:
Wejścia są
a
,b
ic
, a wyjście jestfin
fin
, a wszystkie inne zmienne w Minecraft są liczbami całkowitymi, więc standardowa dokładność Minecraft wynosi 0 miejsc po przecinkuZielona ramka: bloki poleceń po lewej aktywują się po blokach po prawej, które są tylko zmiennymi inicjalizacjami.
Dźwignia (szarobrązowy prostokąt w prawym dolnym rogu) to spust urządzenia
To zajmuje tak dużo ze względu na sposób, w jaki Minecraft obsługuje zmienne . Bardzo uproszczony przegląd:
/scoreboard objectives add name dummy
tworzy nową zmienną o nazwie „name
”/scoreboard players set @p name number
ustawia zmiennąname
nanumber
. Liczba musi być liczbą rzeczywistą, a nie zmienną./scoreboard players operation @p name += @p name2
przyrostyname
oname2
.name2
musi być zmienną, a nie liczbą.-=
,/=
,*=
,=
I inne mogą być stosowane zamiast+=
, aby zmniejszyć pomnożyć, podzielić itpNie zamierzam tutaj publikować wszystkich 43 poleceń. Pomogłoby to w grę w golfa, ale również doprowadziłoby mnie do szaleństwa podczas kopiowania
Gdyby zastosowano bloki poleceń 1.9, rozwiązanie zużyłoby (przynajmniej) 42 bloki mniej. Gdyby zastosować zmienne jednoliterowe, zapisano by prawie 200 bajtów.
źródło
Java, 38 bajtów
Testowanie i nie golfista
Sprawdź to!
Wydajność
źródło
(a,b,c)
to trochę oszustwo, ponieważ nie zawiera żadnych informacji o typie. IMO niejawny interfejs lambda (w twoim przypadkuF
) powinien liczyć się w całkowitej sumie bajtów.Meduza ,
1716 bajtówDzięki Zgarbowi za uratowanie 1 bajtu.
Wypróbuj online!
Wyjaśnienie
Jest to oparte na tej samej wzajemnej formule, co odpowiedź Dennisa .
W bardziej tradycyjnej notacji funkcjonalnej powyższy program brzmi następująco:
Gdzie
i
jest lista wejściowa. Pamiętaj, żefold(multiply, ...)
po prostu oblicza produkt ifold(add, ...)
sumę, dzięki czemu możemy dodatkowo uprościć to do:sum(i) / i
Jest realizowany poprzez haka)/+
, który wyznacza nową funkcję jednoargumentowy do zrobienia zarówno czynności naraz.źródło
Dyalog APL ,
109 bajtówJest to anonimowy ciąg funkcji (na szczycie rozwidlenia rozwidlenia rozwidlenia), co oznacza, że każda podfunkcja jest stosowana do argumentu wewnątrz następującej struktury:
Wypróbuj APL online!
×/
produkt z⊢
argumenty÷
podzielony przez+/
suma argumentów-
minus+⍨
argumenty podwojone (dosł. dodane do siebie)Tło matematyczne.
ngn ogolił bajt.
źródło
2sable , 6 bajtów
Port galaretki Dennisa .
Wykorzystuje kodowanie CP-1252 . Wypróbuj online!
źródło
dc, 49 bajtów
Bezpośrednie wdrożenie podanego wzoru. Monituje o trzy dane wejściowe po wywołaniu w trzech oddzielnych wierszach i wyświetla zmiennoprzecinkową wartość z 5 cyframi po przecinku do następnego wiersza.
Wyjaśnienie
źródło
TI-Basic, 11 bajtów
Dane wejściowe powinny mieć postać listy, np
{A B C}
.Może ten obraz pomoże (pamiętaj o tym
2s = a+b+c
):źródło
Perl 6 , 44 bajtów
źródło
Python, 55 bajtów
Podziękowania dla Dennisa . Właśnie przeniesiłem. W Pythonie, język bardzo zaniedbany.
źródło
Dalej, 83 bajty
Zakłada, że parametry zmiennoprzecinkowe zaczynają się na stosie zmiennoprzecinkowym. Pozostawia wynik na stosie zmiennoprzecinkowym. Używanie stosu do params / return jest standardem dla Forth.
Wypróbuj online - zawiera wszystkie przypadki testowe
Korzysta ze wzoru
a*b*c * 1/ ( -(a+b-c) * -(b+c-a) * (a+c-b) )
. Prawie cały program używa tylko stosu zmiennoprzecinkowego. Wyjątkiem jest3
w3 fpick
. Ten program wymaga interpretera, który obsługujefpick
(Ideone działa, repl.it nie działa).Wyjaśnienie: nieco mniej golfa
źródło
Ised : 19 bajtów
Nazwać jako
ised --l 'inputfile.txt' '@*$1/@*{@+$1-2.*$1}'
gdzieinputfile.txt
mogą być oddzielone w przestrzeni plików tablicy, albo-
otrzymać od rury / standardowego wejścia.Wersja Unicode (ta sama liczba bajtów, ale 3 znaki mniej):
Niestety
ised
marnuje wiele znaków na składnię argumentów wejściowych.źródło
vba, 76
Zadzwoń z
lub w Excelu
źródło
Public Function r(a,b,c):r=a*b*c/(b+c-a)/(a-b+c)/(a+b-c):End Function
C #, 82 bajty
Stosowanie:
źródło
Pyke, 12 bajtów
Wypróbuj tutaj!
Cóż, BlueEyedBeast, miałeś swoją szansę. Użyłem tutaj dobrego algorytmu .
źródło
k, 19 bajtów
Ocenia od prawej do lewej - Podziel listę x przez 2, zsumuj wynik i odejmij go od pierwotnego x. Pomiń odpowiedź i uzyskaj iloczyn wyniku i 8. Wynik jest mianownikiem, licznik jest iloczynem listy.
źródło
Lua, 45 bajtów
Mocno oparty na odpowiedzi JavaScript.
źródło