Biorąc pod uwagę liczbę dziesiętną k
, znajdź najmniejszą liczbę całkowitą, n
tak aby pierwiastek kwadratowy n
był w k
liczbie całkowitej. Jednak odległość powinna być niezerowa - n
nie może być idealnym kwadratem.
Biorąc pod uwagę k
liczbę dziesiętną lub ułamek (w zależności od tego, co jest dla Ciebie łatwiejsze), na przykład 0 < k < 1
, wypisz najmniejszą dodatnią liczbę całkowitą, n
tak aby różnica między pierwiastkiem kwadratowym n
i najbliższą liczbą całkowitą pierwiastka kwadratowego n
była mniejsza lub równa, k
ale niezerowa .
Jeśli i
jest najbliższą liczbą całkowitą do pierwiastka kwadratowego z n
, szukasz pierwszego n
gdzie 0 < |i - sqrt(n)| <= k
.
Zasady
- Nie można użyć niewystarczającej implementacji języka liczb niecałkowitych w celu trywializacji problemu.
- W przeciwnym razie można założyć, że
k
nie spowoduje to problemów, na przykład, zaokrąglanie zmiennoprzecinkowe.
Przypadki testowe
.9 > 2
.5 > 2
.4 > 3
.3 > 3
.25 > 5
.2 > 8
.1 > 26
.05 > 101
.03 > 288
.01 > 2501
.005 > 10001
.003 > 27888
.001 > 250001
.0005 > 1000001
.0003 > 2778888
.0001 > 25000001
.0314159 > 255
.00314159 > 25599
.000314159 > 2534463
Dane oddzielone przecinkami przypadków testowych:
0.9, 0.5, 0.4, 0.3, 0.25, 0.2, 0.1, 0.05, 0.03, 0.01, 0.005, 0.003, 0.001, 0.0005, 0.0003, 0.0001, 0.0314159, 0.00314159, 0.000314159
To jest golf golfowy , więc wygrywa najkrótsza odpowiedź w bajtach.
JavaScript (ES7),
5150 bajtówWypróbuj online!
(zawodzi w przypadku przypadków testowych, które wymagają zbyt dużej rekurencji)
Wersja nierekurencyjna,
5756 bajtówWypróbuj online!
Lub dla 55 bajtów :
Wypróbuj online!
(ale ten jest znacznie wolniejszy)
źródło
J ,
3929 bajtówNB. Ta krótsza wersja po prostu wykorzystuje formułę @ alephalpha.
Wypróbuj online!
39 bajtów, oryginalna, brutalna siła
Wypróbuj online!
Obsługuje wszystkie przypadki testowe
źródło
Japt ,
1816 bajtów-2 bajty od Kudłaty
Wypróbuj online!
źródło
%1 &&
paskudne, nie jestem pewien, czy użycie rozwiązania Arnaulda byłoby krótsze (być może nie)Z¬u1
doZ
na początku funkcji.[1,-1]®*U²Ä /U/2 c ²-Z} rm
Pyth,
2221 bajtówSpróbuj go online tutaj , lub sprawdzić wszystkie przypadki testowe od razu tutaj .
Kolejna porcja doskonałej odpowiedzi Alephalpha , upewnij się, że dałeś im głos!
Edycja: Zapisano bajt dzięki Kevinowi Cruijssenowi
źródło
[-1,1]
w 3 bajtach, czy potrzebujesz dodatkowego odwrotności, aby stał się 4 bajtami? Jeśli jest to możliwe w 3 bajtów, można to zrobić, a następnie zmienić*_d
się*d
i+d
do-d
. Ponadto, czy Pyth nie ma wbudowanego minimum, zamiast sortować i brać najpierw?- ... d
, co oszczędza mi bajt! Dzięki[1,-1]
czy[-1,1]
. Porównywałem*d
i-d
z moją odpowiedzią 05AB1E, gdzie nie używam mapy, ale mogę odjąć / pomnożyć tablicę 2D z / z innej tablicy 2D, więc nie potrzebuję mapy. Cieszę się, że pomogłem w tym przypadku uratować bajt. :) I dziękuję za inspirację do mojej odpowiedzi 05AB1E.Perl 6 ,
343329 bajtów-1 bajt dzięki Grimy
Wypróbuj online!
źródło
>=
w>
. Pierwiastki kwadratowe liczb całkowitych są albo całkowite, albo nieracjonalne, więc przypadek równości jest niemożliwy.APL (Dyalog Unicode) , 27 bajtów SBCS
Wypróbuj online!
Monadyczny pociąg bierze jeden argument. To jest port odpowiedzi Alephalpha .
W jaki sposób:
źródło
C # (interaktywny kompilator Visual C #) ,
898571 bajtówWypróbuj online!
-4 bajty dzięki Kevin Cruijssen!
źródło
n++
w pętli, aby-1
można go było usunąć ze zwrotu:k=>{double n=1,p;for(;Math.Abs(Math.Round(p=Math.Sqrt(0d+n))-p)>k|p%1==0;n++);return n;}
0d+
można je usunąć, prawda?n
był już podwójnyJava (JDK) ,
7370 bajtówWypróbuj online!
-3 bytes
dzięki @ceilingcatźródło
Java 8, 85 bajtów
Odpowiedź C # .NET Port of EmbodimentOfIgnorance .
Wypróbuj online.
Math.round
Alternatywnie mogą być, ale niestety jest to ten sam bajt-count:Wypróbuj online.
źródło
MathGolf , 16 bajtów
Wypróbuj online!
Nie jest wielkim fanem tego rozwiązania. Jest to port rozwiązania 05AB1E, które opiera się na tej samej formule, z której korzysta większość odpowiedzi.
Wyjaśnienie
źródło
byte
golfa w kodzie? Ponieważ niektóre z twoich postaci wymagają więcej niż jednego bajtu. Nie mam zamiaru'ԓ'
znak ma w rzeczywistości 2 bajty, ale reszta to 1 bajt.Dalej (gforth) , 76 bajtów
Wypróbuj online!
Wyjaśnienie
Rozpoczyna licznik od 1 i zwiększa go w pętli. Przy każdej iteracji sprawdza, czy wartość bezwzględna pierwiastka kwadratowego licznika - najbliższa liczba całkowita jest mniejsza niż k
Objaśnienie kodu
źródło
Galaretka , 13 bajtów
Nie udało mi się uzyskać nic bardziej zwięzłego niż to samo podejście co alephalpha
- idź głosować jego odpowiedź Mathematica !
Wypróbuj online!
W jaki sposób?
źródło
Japt , 14 bajtów
Spróbuj
źródło
Perl 5
-p
, 42 bajtówWypróbuj online!
źródło