To, co musisz zrobić, to utworzyć funkcję / program, który przyjmuje liczbę dziesiętną jako dane wejściowe i wyprowadza wynik wielokrotnego przyjmowania odwrotności ułamkowej części liczby, aż liczba stanie się liczbą całkowitą.
Mówiąc dokładniej, proces wygląda następująco:
Niech x będzie wejściem
Jeśli x jest liczbą całkowitą, wyślij ją.
W przeciwnym razie: . Wróć do 2.
jest ułamkowym składnikiem jest równe . to podłoga x, która jest największą liczbą całkowitą mniejszą niż .
Przypadki testowe:
0 = 0
0.1 = 1/10 -> 10
0.2 = 1/5 -> 5
0.3 = 3/10 -> 10/3 -> 1/3 -> 3
0.4 = 2/5 -> 5/2 -> 1/2 -> 2
0.5 = 1/2 -> 2
0.6 = 3/5 -> 5/3 -> 2/3 -> 3/2 -> 1/2 -> 2
0.7 = 7/10 -> 10/7 -> 3/7 -> 7/3 -> 1/3 -> 3
0.8 = 4/5 -> 5/4 -> 1/4 -> 4
0.9 = 9/10 -> 10/9 -> 1/9 -> 9
1 = 1
3.14 = 157/50 -> 7/50 -> 50/7 -> 1/7 -> 7
6.28 = 157/25 -> 7/25 -> 25/7 -> 4/7 -> 7/4 -> 3/4 -> 4/3 -> 1/3 -> 3
Podsumowanie dla 0 do 1 w krokach co 0,1: 0, 10, 5, 3, 2, 2, 2, 3, 4, 9, 1
To jest golf golfowy , więc wygrywa najmniej bajtów.
Wyjaśnienia:
- „Punkty bonusowe” za brak błędu zaokrąglenia
- Powinien działać dla każdej nieujemnej liczby wymiernej (ignorując błąd zaokrąglenia)
- Możesz, ale nie musisz generować podjętych kroków
- Dane wejściowe można przyjmować jako liczbę dziesiętną, ułamkową lub parę liczb, które mogą być ciągiem.
Przepraszamy za wszystkie problemy, to moje pierwsze pytanie na tej stronie.
code-golf
math
arithmetic
recursion
rational-numbers
Solomon Ucko
źródło
źródło
Odpowiedzi:
J, 18 bajtów
W języku J idiom
u ^: v ^:_
oznacza „Stosuj czasownik,u
dopóki warunekv
zwróci wartość prawda.W naszym przypadku warunek końcowy jest zdefiniowany przez hak
~:<.
, co oznacza, że „podłoga liczby<.
nie jest równa~:
samej liczbie” - więc zatrzymamy się, gdy czasownik głównyu
zwróci liczbę całkowitą.u
w tym przypadku jest inny haczyk-<.
- liczba minus jego podłoga - którego wartość zwracana jest wprowadzana do@
czasownika wzajemnego%
.Wypróbuj online!
źródło
_2{(%@-<.) ::]^:a:
.%@|~&1^:(~:<.)^:_
Python 3 , 101 bajtów
Wypróbuj online!
Format: ciąg musi zawierać kropkę dziesiętną.
źródło
.replace(".","")
->.replace(*"._")
zapisz 1 bajtMathematica, 36 bajtów
Próbny
źródło
Rationalize
?Rationalize
Mathematica uważa, że nie ma wystarczającej precyzji, aby wygenerować wszystkie warunki ułamka ciągłego. Na przykładContinuedFraction[0.1]
jest po prostu{0}
.Perl 6 , 42 bajtów
Wypróbuj online!
nude
Metoda zwraca nu merator i de liczniku liczby wymiernej postaci listy dwóch elementów. Krótsze jest uzyskanie mianownika w ten sposób niżdenominator
bezpośrednie wywołanie metody.źródło
Haskell , 47 bajtów
To przewyższa odpowiedź Kreatora Pszenicy, ponieważ
GHC.Real
pozwala nam wzorować dopasowanie na racjonalnych przy użyciu:%
, a także o krótszej nazwieWypróbuj online!
f
przyjmujeRational
liczbę jako dane wejściowe, chociaż ghc pozwala na zapisywanie ich w formacie dziesiętnym z pewną dokładnością.źródło
Haskell ,
4034 bajtówEdytować:
(Nie mogłem się powstrzymać od opublikowania tego po zobaczeniu odpowiedzi Haskell z pełnymi importami - teraz widzę, że niektóre odpowiedzi w innych językach również zasadniczo używają tej metody).
!
pobiera dwa argumenty liczb całkowitych (licznik i mianownik ułamka; nie muszą być one w najmniejszych słowach, ale mianownik musi być dodatni) i zwraca liczbę całkowitą. Jak zadzwonić314!100
.Wypróbuj online!
n/d
(przy założeniud
dodatniej) jestmod n d/d
, więc chybamod n d==0
, że!
powtarza się z reprezentacjąd/mod n d
.źródło
Python 3 + sympy , 67 bajtów
Wypróbuj online!
Sympy to symboliczny pakiet matematyczny dla Pythona. Ponieważ jest to symboliczny, a nie binarny, nie ma niedokładności zmiennoprzecinkowych.
źródło
PHP , 69 bajtów
Wypróbuj online!
PHP , 146 bajtów
Wypróbuj online!
źródło
Galaretka , 8 bajtów
Wypróbuj online!
Niedokładności zmiennoprzecinkowe.
źródło
M
naprawić nieścisłości zmiennoprzecinkowych: P . To galaretka, ale z matematyczną precyzją. Nie naprawia jednak pętli 0.7.JavaScript ES6, 25 bajtów
Zadzwoń
f(a,b)
poa/b
źródło
gcd(a,b)=1
można usunąć/b
Haskell ,
6261 bajtówWypróbuj online!
Korzysta z
Data.Ratio
biblioteki Haskella w celu obliczenia dowolnej dokładności. Gdyby tylko wbudowane nazwy nie były tak długie.źródło
Data.Ratio
. Nigdy o tym nie słyszałemGHC.Real
. Możesz to opublikować jako własną odpowiedź.APL (Dyalog Classic) , 18 bajtów
Wypróbuj online!
APL NARS, 18 znaków
-1 bajt dzięki testowi Uriel
źródło
⍵-⌊⍵
→1|⍵
dla jednego bajtuSmalltalk, 33 bajty
źródło
Stax , 8 bajtów
Uruchom i debuguj
„Punkty bonusowe” za brak błędów precyzji. Nie zastosowano arytmetyki zmiennoprzecinkowej. To (w końcu) wykorzystuje wbudowany typ racjonalny stax.
źródło
JavaScript, 70 bajtów
Jeśli możemy zmienić typ danych wejściowych na ciąg znaków, może to zaoszczędzić 5 bajtów.
źródło