Zainspirowany tym filmem autorstwa tecmath .
Przybliżenie pierwiastka kwadratowego dowolnej liczby x
można znaleźć, biorąc całkowitą pierwiastek kwadratowy s
(tj. Największą liczbę całkowitą taką s * s ≤ x
), a następnie obliczając s + (x - s^2) / (2 * s)
. Nazwijmy to przybliżeniem S(x)
. (Uwaga: jest to równoważne z zastosowaniem jednego etapu metody Newtona-Raphsona).
Chociaż ma to dziwactwo, gdzie S (n ^ 2 - 1) zawsze będzie √ (n ^ 2), ale ogólnie będzie bardzo dokładne. W niektórych większych przypadkach może to mieć dokładność> 99,99%.
Wejście i wyjście
Weźmiesz jeden numer w dowolnym dogodnym formacie.
Przykłady
Format: Wejście -> Wyjście
2 -> 1.50
5 -> 2.25
15 -> 4.00
19 -> 4.37 // actually 4.37 + 1/200
27 -> 5.20
39 -> 6.25
47 -> 6.91 // actually 6.91 + 1/300
57 -> 7.57 // actually 7.57 + 1/700
2612 -> 51.10 // actually 51.10 + 2/255
643545345 -> 25368.19 // actually 25,368.19 + 250,000,000/45,113,102,859
35235234236 -> 187710.50 // actually 187,710.50 + 500,000,000/77,374,278,481
Dane techniczne
Twój wynik musi być zaokrąglony do co najmniej najbliższej setnej (tj. Jeśli odpowiedź to 47.2851, możesz otrzymać 47,29)
Dane wyjściowe nie muszą mieć następujących zer i dziesiętnych, jeśli odpowiedź jest liczbą całkowitą (tzn. 125.00 można również zapisać jako 125 i 125,0)
Nie musisz obsługiwać żadnych liczb poniżej 1.
Nie musisz obsługiwać danych wejściowych niecałkowitych. (tj. 1,52 itd.)
Zasady
Standardowe luki są zabronione.
To jest golf golfowy , więc wygrywa najkrótsza odpowiedź w bajtach.
źródło
s + (x - s^2) / (2 * s) == (x + s^2) / (2 * s)
Odpowiedzi:
Galaretka ,
87 bajtów-1 bajt dzięki uproszczonej formule matematycznej Oliviera Grégoire'a - zobacz odpowiedź na Javę .
Wypróbuj online!
W jaki sposób?
źródło
÷ƽ+ƽH
po raz pierwszy próbuję użyć Galaretki, więc mogę się mylić. Chciałbym jednak wiedzieć, jak przechowywaćƽ
, żeby tego nie powtarzać. To może zaoszczędzić kolejny bajt.ƽɓ÷⁹+H
nie przeliczyłby korzenia całkowitoliczbowego, ale również 7.ɓ
rozpoczyna nowy łańcuch diadadowy z zamienionymi argumentami, a następnie⁹
odnosi się do właściwego argumentu tego łańcucha (tj. wynikuƽ
).ƽɓ÷+⁹H
też tu by działał.Haskell , 34 bajty
Wypróbuj online!
Objaśnienie w pseudokodzie imperatywnym:
źródło
Java (OpenJDK 8) , 32 bajty
Wypróbuj online!
Objaśnienia
Kod jest równoważny z tym:
Matematyka za:
źródło
Python 2 ,
47... 36 bajtów-3 bajty dzięki @JungHwanMin
-1 bajtów dzięki @HyperNeutrino
-2 bajty dzięki @JonathanFrech
-3 bajtów dzięki @ OlivierGrégoire
Wypróbuj online!
źródło
s+(x-s*s)/s/2
do(x+s*s)/s/2
+.0
i zastąpić/s/2
z/2./s
, oszczędzając dwa bajty?MATL ,
129 bajtówWypróbuj online!
źródło
R,
43 bajty29 bajtówDzięki @Giuseppe za nowe równanie i pomoc w golfie 12 bajtów dzięki rozwiązaniu dzielenia liczb całkowitych. Wymieniając wywołanie funkcji do skanowania, grałem w golfa o kolejne kilka bajtów.
Wypróbuj online!
źródło
f <-
aby przypisać funkcję. Ale wciąż fajne rozwiązanie, pamiętaj, aby przeczytać Porady dotyczące gry w golfa w R, gdy masz szansę!APL (Dyalog) ,
2016 bajtówWypróbuj online!
źródło
JavaScript (ES7), 22 bajty
Tak naprawdę nie potrzebujemy zmiennej pośredniej, więc można ją przepisać jako:
Przypadki testowe
Pokaż fragment kodu
źródło
C, 34 bajty
Dzięki @Olivier Grégoire!
Działa tylko z
float
wejściami.Wypróbuj online!
C,
413937 bajtówWypróbuj online!
C,
49474543 bajtówWypróbuj online!
Dzięki @JungHwan Min za zapisanie dwóch bajtów!
źródło
Haskell , 40 bajtów
Kolejny bajtuje kurz dzięki H.PWiz.
Wypróbuj online!
źródło
AWK ,
47 4438 bajtówWypróbuj online!
UWAGA: TIO like ma 2 dodatkowe bajty,
\n
aby uczynić wydruk ładniejszym. :)To trochę oszustwo, aby użyć sqrt do znalezienia pierwiastka kwadratowego, więc tutaj jest wersja z kilkoma dodatkowymi bajtami, która tego nie robi.
Wypróbuj online!
źródło
sqrt($1)
ciebie możesz użyć$1^.5
\n
aby uzyskać wynik, printf w awk nie potrzebuje nawiasów, a formułę można skrócićs/2+$1/s/2
, co powoduje{s=int($1^.5);printf"%.2f",s/2+$1/s/2}
. Przepraszam, jeśli ten komentarz wydaje się niegrzeczny.Rakieta , 92 bajty
Dzięki @JungHwan Min za wskazówkę w sekcji komentarzy
Wypróbuj online!
Nie golfił
źródło
PowerShell , 54 bajty
Wypróbuj online! lub Zweryfikuj niektóre przypadki testowe
Pobiera dane wejściowe,
$x
a następnie robi dokładnie to, co jest wymagane.|?
Część znajdzie maksymalnej liczby całkowitej, że gdy do kwadratu, jest-l
ess niż lub-e
qual do wejścia$x
, a następnie wykonujemy niezbędne obliczenia. Wynik jest niejawny.źródło
Łuska , 9 bajtów
Wypróbuj online!
W tej odpowiedzi wciąż jest coś brzydkiego, ale nie mogę znaleźć krótszego rozwiązania.
Wyjaśnienie
Wdrażam jeden krok algorytmu Newtona (który jest rzeczywiście równoważny z tym zaproponowanym w tym pytaniu)
źródło
÷
Pyt ,
1110 bajtówWyjaśnienie
źródło
Droga Mleczna ,
17 lat14 bajtów-3 bajty przy użyciu formuły Oliviera Grégoire'a
Wypróbuj online!
Wyjaśnienie
źródło
C # (.NET Core) , 39 bajtów
Wypróbuj online!
Wersja AC # odpowiedzi Java Oliviera Grégoire'a .
źródło