Prawie przeciwne biegunowo, jeśli to wyzwanie, i podejrzewam, że będzie nieco łatwiej.
Twoim zadaniem jest pobranie dwóch liczb całkowitych w formacie a/b
(tworzenie liczby wymiernej), a następnie wypisanie dokładnie liczby dziesiętnej.
Na przykład, gdybyś wprowadził dane 1/3
wyjściowe:
0.33333333333333333
I drukowałby 3 s do końca czasu, z opcjonalnym początkowym 0. (Możesz także wydrukować jeden znak w wierszu, jeśli i tylko wtedy, gdy twój język nie pozwala na drukowanie w tym samym wierszu).
Zachowanie dla x/0
będzie niezdefiniowane. Dla liczby, która wygląda na to, że się nie powtarza (powiedzmy, powiedzmy, 5/4
że tak się dzieje), to się powtarza. Każda z dwóch poniższych form byłaby akceptowalna dla 5/4
:
1.25000000000000000
1.24999999999999999
(To samo z liczbami całkowitymi 1.9999999
lub 2.000000
)
Frakcja nie może być w swojej najprostszej formie, a a
czy b
może być ujemna (Uwaga -a/b = -(a/b)
, -a/-b = a/b
, a/-b = -a/b
, i -.6249999
to nieważne, ale -0.6249999
jest do przyjęcia, ale nadal można korzystać.
źródło
bc
, czy to oszustwo?a
i / lub możeb
być negatywna?a
lubb
(lub oba) mogą być negatywne)Odpowiedzi:
CJam,
3837 bajtówJak to działa
źródło
C 108
79Edytuj Zmodyfikowany, aby działał z liczbami ujemnymi.
Dane wejściowe ze standardowego wejścia. Stary styl K&R.
źródło
Rubin,
83691029189 bajtówProsta implementacja ręcznego podziału liczb całkowitych na podstawie podziału liczb całkowitych komputera.
Dzięki @blutorange za pomoc w grze w golfa.
Edycja: Naprawiono rozwiązanie uwzględniające liczby ujemne.
źródło
->s{a,b=s.split(?/).map &:to_i;$><<a/b<<?.;loop{a=a%b*10;$><<a/b}}
Po prostu uwielbiam to w ruby.?/
aby oznaczać znaki, ani nie wiedziałem o$><<
drukowaniu ani oloop
słowach kluczowych. Wielkie dzięki!!$>
jest skrótem od$stdout
i<<
jest operatorem. Możesz zapisać jeszcze jeden bajt w drugiej linii, zmieniając go nac*d<0&&$><<?-
; kilka bajtów przez połączenie trzeciej / czwartej linii z$><<a/b<<?.
i jeszcze jeden przez usunięcie spacji po<<
w ostatniej linii. A oto pomysł sprowadzenia go do 91 bajtów:->s{a,b=s.scan(/\d+/).map &:to_i;1==s.count(?-)&&$><<?-;$><<a/b<<?.;loop{a=a%b*10;$><<a/b}}
(ruby 2.2.0)$><<a/b
nie działała poprawnie, dlatego umieściłem tam miejsce. Reszta wydaje się dobra, dziękuję bardzo!Rational(2,3) == 2/3r
) od Ruby 2.1 (którego nauczyłem się około 10 minut temu), którego można użyć do skrócenia drugiej linii:eval(s+?r)<0&&$><<?-
Java,
177176170Algorytm jest prosty; trudną częścią było uruchomienie drukowania. W końcu miałem sen z komputera na sekundę między każdym krokiem, aby mógł drukować.
Rozszerzona wersja do uruchomienia
źródło
R,
103137109103Trochę szczęśliwsi z tym teraz. Używając skanowania z separatorem oszczędzasz dużo bajtów. Może jeszcze mieć miejsce na ulepszenia. Zastąpione
<-
z=
. Nie zawsze miałem z tym szczęście, ale tym razem się udało.Przebiegi testowe
źródło
Python 3,
107115 bajtówCałkiem proste:
-1/3
->-0.
)* (Chociaż obliczenia
a
zostały przeniesione do pętli, aby zaoszczędzić kilka bajtów.)Edycja: Naprawiono błąd z ujemnymi ułamkami> -1.
źródło
Python 2.7, 209 bajtów
edytować:
Teraz wypisuje wszystkie znaki w tym samym wierszu, zgodnie z zapytaniem.edycja2:
Teraz odczytuje ułamek argumentu wiersza poleceń, zgodnie z żądaniem :)źródło
map
zamiast listowego zrozumienia znacznie oszczędza; 2) nie są potrzebne w nawiasachm*a
w każdym ze swoich miejsc, jak*
,%
i/
są tym samym priorytecie i lewostronna; 3) Można uprościć logikę 0 lub kropki w linii 3"0."[m==1]
, ponieważ i tak ją drukujesz; 4) prawdopodobnie zapisze znaki, aby po prostu ustawićo=stdout.write
i przekonwertować argumenty liczbowe na ciąg znaków z backticks w razie potrzeby.1/-3
daje-1.666666666
zamiast-0.333333333
.