Napisać program lub funkcję, która przyjmuje w dodatnich liczb całkowitych a
, b
i c
, i drukuje lub powraca a/b
do c
miejsc po przecinku, przy zastosowaniu operacji + - * /% [dodawanie, odejmowanie, mnożenie, dzielenie, modulate] na dodatnich liczb całkowitych: można użyć wszystkiego, twój język pozwala, ale nie na liczbach zmiennoprzecinkowych. Zakres a, b, c będzie zakresem dozwolonym dla liczb całkowitych bez znaku w twoim języku. Wynik liczbowy zostanie obcięty do ostatniej cyfry do wydrukowania (więc nie round
).
Oznacza to, że jeśli twój język nie ma typu liczb całkowitych (tylko liczba zmiennoprzecinkowa), możesz uczestniczyć, używając tych liczb zmiennoprzecinkowych tylko jako dodatnich liczb całkowitych. Istotą tego ćwiczenia byłoby napisanie funkcji, która znajdzie cyfry w podziale zmiennoprzecinkowym, używając tylko operacji + - * /% na liczbach całkowitych [niepodpisanych].
Przykłady
print(1,2,1)
wydrukuje0.5
print(1,2,2)
wydrukuje0.50
print(13,7,27)
wydrukuje1.857142857142857142857142857
print(2,3,1)
wydrukuje0.6
print(4,5,7)
wydrukuje0.8000000
print(4,5,1)
wydrukuje0.8
print(9999,23,1)
wydrukuje434.7
print(12345613,2321,89)
wypisuje się, jeśli Twój język ma 32-bitowy niepodpisany5319.09220163722533390779836277466609220163722533390779836277466609220163722533390779836277466
Najkrótszy kod w bajtach wygrywa. Przykro mi, jeśli wydaje się to niejasne ... Nie znam również języków, nie pamiętam dobrze słów ... Lepiej mieć jeden link do Ideone.com lub innego miejsca, aby łatwo wypróbować odpowiedź, szczególnie dla przetestuj niektóre dane wejściowe inne niż proponowane.
(1,2,0)
. Zobacz meta.codegolf.stackexchange.com/a/5608/194(1,2,0)
?(1,2,0)
powinno być nieistotne, ponieważ0
nie jest dodatnią liczbą całkowitą. I wolałbym, żeby c tak pozostało, ponieważ wolałbym nie myśleć o dołączaniu.
czy nieOdpowiedzi:
05AB1E ,
17 13 11 1914 bajtówWprowadź w formularzu
b, a, c
.Zaoszczędzono 5 bajtów dzięki Grimy .
Wypróbuj online!
źródło
b,a,c
?‰`I°*¹÷I°+¦'.sJ
‰`¹+I°*¹÷¦'.sJ
Haskell, 87 bajtów
Przykład użycia:
(13#7)27
->"1.857142857142857142857142857"
.23 bajty do obsługi
c==0
sprawy i użycie wiodącego zera zamiast rzeczy takich jak.5
.Jak to działa: pomnóż
a
przez10^c
, podziel przezb
, zamień w ciąg, podziel w miejscu, w którym.
należy wstawić, połącz obie części.
pomiędzy nimi i napraw skrzynie krawędzi.źródło
Perl 6 ,
58 57 5548 bajtówDość denerwujące jest to, że można by go skrócić do tego samego poziomu,
{($^a.FatRat/$^b).base(10,$^c)}
gdyby pozwolono mu zaokrąglić do najbliższej wartości.Wyjaśnienie:
źródło
(...).FatRat / 10**$x
podział nie jest rozumny ? Dozwolone jest tylko dzielenie liczb całkowitych.does Real
lubdoes Numeric
byłoby to dozwolone? Co by się stało, gdyby ulepszyć istniejącą klasę (łata małpy) w celu usunięcia tych ról?+-*/%
tylko z zwykłymi liczbami całkowitymi. „zwykła liczba całkowita” pod względem funkcjonalności (przede wszystkim: dzielenie liczb całkowitych), a nie wewnętrznej reprezentacji. Czy uważasz, że dozwolone jest używanie programowej biblioteki zmiennoprzecinkowej, która (pomimo nazwy) używa również liczb całkowitych do wewnętrznej reprezentacji?Perl, 55 bajtów
Obejmuje +3 za
-p
Podaj aib w jednej linii na STDIN, c w następnej
division.pl
:$_/$&
jest nieco dyskusyjna. Właściwie chcę tam podział na liczby całkowite, ale Perl nie ma go bez ładowania specjalnych modułów. Jest to więc tymczasowo niecałkowita, którą następnie natychmiast obcinam (za pomocą|0
), więc kończę na liczbie całkowitej, jaką dałby podział liczb całkowitych. Można go przepisać($_-$_%$&)/$&
, aby nawet chwilowo nie miał wartości niecałkowitej (choć wewnętrznie nadal byłby zmiennoprzecinkowy)źródło
$-
go, aby był to tylko int? (Myślę, że istnieją ścisłe ograniczenia dotyczące miksu / maksimum i jestem pewien, że już to rozważyliście, ale chociaż warto to sprawdzić!)use integer
$-
, dobrze wiedzieć. Dzięki!JavaScript (ES6),
5550 bajtów(a/b|0)
wykonuje dzielenie zmiennoprzecinkowe, ale natychmiast rzuca na liczbę całkowitą. Daj mi znać, jeśli nie jest to dozwolone.źródło
PHP, 187 bajtów
działa z łańcuchami licznika, które mogą być wartościami int większymi niż
PHP_INT_MAX
Nie mam innej szansy, więc 13/7 skraca się do 1,8571428571429 i docieram więc nie do przypadku testowego z 27 miejscami dziesiętnymi
W ten sposób 36 bajtów nie jest dozwolone
źródło
Pyth -
2119181614 bajtówSprawdzę format wejściowy, który może uratować wiele.
Pakiet testowy . (PS 27 nie kończy się online, więc zrobiłem 10 zamiast tego).
źródło
0
nie jest to dodatnia liczba całkowita (nawet jeślic=0
JavaScript (ES6),
646259 bajtówZaoszczędzono 2 bajty dzięki produktom ETH.
Uwzględniony podział zawsze skutkuje liczbą całkowitą.
źródło
m
ogóle nadal działałoby?f=(a,b,n,s)=>n+1?f((q=(a-a%b)/b,a%b*10),b,n-1,s?s+q:q+'.'):s
ma 60 bajtów.Java 7, 105 bajtów
Kod niepoznany i testowy:
Wypróbuj tutaj.
Wynik:
źródło
divide
i nie/
.int
typu do przechowywania wartości liczbowych. (Czy to nie fajne? BigInteger składa sięint[]
z cyfr. Na przykład {1,2,5} w podstawie 10 wynosi 125. I nie jestem pewien, na jakiej podstawie znajdują się cyfry BigInteger, ale sądzę, że jest to więcej niż 10. ”Rubin, 67 bajtów
jeśli uczynię to funkcją wykonywania powyższych przypadków testowych
źródło
->a,b,c{...}
zastąpienie elips kodem. (Rzeczywiste przypisanie zmiennej nie jest wymagane przez konsensus.)Rakieta 203 bajtów
Nie golfowany:
Stosowanie:
Wynik:
Inna metoda (niepoprawna odpowiedź tutaj):
źródło
real->decimal-string
oczekujereal
wartości jako pierwszego argumentu, podobnie jak/
podział zmiennoprzecinkowy, co nie jest dozwolone w tym zadaniu. Ponadto:real->decimal-string
zaokrągla ((f 1 6 7)
->0.1666667
) zamiast obcinania.q 196 bajtów
Aby uruchomić: najpierw ustaw a, b, c.
źródło
Rdza, 114 bajtów
kod testowy:
źródło
PHP, 89 bajtów
intdiv () jest wprowadzony w php 7, więc wymaga tego. php 7.1 pozwoli mi zmienić list () na [], a tym samym zaoszczędzi 4 bajty.
użyj jak:
źródło
$o.=intdiv($a=10*($a%$b),$b);
z$o.=($a=10*($a%$b))/$b^0;
uratuje 4 bajty.C #, 126 bajtów
Pełny program z przypadkami testowymi:
Wprowadzono podział na liczby całkowite. Można użyć liczb o dowolnym rozmiarze, ze względu na
BigInteger
typ danych (System.Numerics
wymagany jest import ). Parametr liczby cyfrc
jest ograniczony do 2 ^ 31-1, jednak powinien zawierać więcej niż wystarczającą liczbę cyfr.źródło
Groovy (
787742 bajtów)Wyjaśnienie
Eval.me(a+'.0g');
- Konwertuj z wejścia liczb całkowitych na dane wejściowe BigDecimal. W groovy notacji BigDecimal jest notacja podwójna z dołączonym G lub g. Mógłbym również użyć konstruktora,new BigDecimal(it)
ale to uratowało bajt..divide(b, n, 1)
- Podziel przez bz precyzją n, tryb zaokrąglania do połowy.Wypróbuj tutaj: https://groovyconsole.appspot.com/script/5177545091710976
źródło
Partia, 122 bajty
źródło
Mathematica, 50 bajtów
Nienazwany funkcją trzech argumentów (które zostały zamówione
c
,a
,b
aby zapisać gdzieś bajt), która zwraca ciąg znaków. Mnoży sięa/b
przez10^c
, przyjmuje największą funkcję całkowitą, a następnie konwertuje na ciąg i wstawia kropkę dziesiętną w odpowiednim miejscu. Szkoda, że nazwy funkcji nie są krótsze.źródło
Python 3, 62 bajtów
Wypróbuj tutaj
* Uwaga : repl.it używa starszej wersji Python 3 , która wymaga określenia wszystkich indeksów pól, co oznacza
"{:.{1}f}"
, że"{0:.{1}f}"
zamiast tego, będzie to 63 bajty w repl.itJak używać
Wprowadź wszystkie trzy wartości ze spacjami pomiędzy nimi. tzn. Dane wejściowe
1 2 1
dają wynik0.5
Wyjaśnienie
input().split()
: Pobiera dane wejściowe użytkownika i dzieli je na listę z separatorem (spacja)a,b,c = map(int,XX)
: Odwzorowuje zmienne na wartości określone przez użytkownika za pomocą typu int"{:.{1}f}".format(a/b,c)
: Formatuje ciąg, aby wyświetlić wynik podziału i zastępuje{1}
go,c
aby ustawić miejsce dziesiętne wyświetlanego ciąguprint(XX)
: drukuje dostarczony ciągźródło
Python 3 , 58 bajtów
Wypróbuj online!
Jest to dokładne z określoną liczbą miejsc po przecinku, o ile
a * 10 ** c
nie jest zbyt duże.Próbowałem Python 2, aby skrócić
str(...)
do`...`
ale Pythonie 2 wstawiaL
na końcu jeśli jest zbyt duży, więc sprawdzenie zajęłoby sposób więcej bajtów niż to warte.źródło
Stax , 13 bajtów
Uruchom i debuguj
Argumenty są akceptowane w
c a b
kolejności.źródło
C, 67 bajtów
Wypróbuj online!
Pewna poprzednia wersja, jak sądzę, miała błąd w pamięci odczytu poza przypisanym do programu ... Dzięki pułapce cat i wszystkim ...
źródło