Wyzwanie to, choć prawdopodobnie trywialne w większości „standardowych” języków, jest skierowane do tych języków, które są tak ezoteryczne, niskiego poziomu i / lub trudne w użyciu, które są bardzo rzadko spotykane na tej stronie. Powinien stanowić ciekawy problem do rozwiązania, więc jest to okazja, aby wypróbować ten dziwny język, o którym czytałeś!
Zadanie
Weź dwie liczby naturalne a
i b
jako dane wejściowe, i wyślij dwie inne liczby: wynik dzielenia liczb całkowitych a/b
i pozostałą część takiego podziału ( a%b
).
Oto kod-golf : najkrótsza odpowiedź (w bajtach), dla każdego języka, wygrywa!
Wejście wyjście
- 0 <=
a
<= 255, 1 <= b
<= 255. Każde twoje wejście (i wyjście) zmieści się w jednym bajcie.
- Możesz wybrać dowolny format dla wejścia i wyjścia, o ile dwie liczby są wyraźnie rozróżnialne (np. Brak drukowania dwóch wyników razem bez ogranicznika)
Przykłady
a,b->division,remainder
5,7->0,5
5,1->5,0
18,4->4,2
255,25->10,5
Uwaga: Wbudowane funkcje, które zwracają zarówno wynik podziału, jak i resztę, są zabronione . Przynajmniej pokaż nam, jak twój język radzi sobie z zastosowaniem dwóch funkcji do tych samych argumentów.
Uwaga 2: Jak zawsze wyjaśnienie, jak działa Twój kod, jest bardzo mile widziane, nawet jeśli wygląda na czytelne, może nie być tak dla kogoś innego!
Tabela liderów
Oto fragment kodu w celu wygenerowania przeglądu zwycięzców według języka.
Aby upewnić się, że twoja odpowiedź się pojawi, zacznij od nagłówka, korzystając z następującego szablonu Markdown:
# Language Name, N bytes
gdzie N
jest rozmiar twojego zgłoszenia. Jeśli poprawisz swój wynik, ty może zachować stare porachunki w nagłówku, uderzając je przez. Na przykład:
# Ruby, <s>104</s> <s>101</s> 96 bytes
Jeśli chcesz umieścić w nagłówku wiele liczb (np. Ponieważ twój wynik to suma dwóch plików lub chcesz osobno wymienić kary za flagi tłumacza), upewnij się, że rzeczywisty wynik jest ostatnim liczbą w nagłówku:
# Perl, 43 + 2 (-p flag) = 45 bytes
Możesz także ustawić nazwę języka jako link, który pojawi się we fragmencie tabeli wyników:
# [><>](http://esolangs.org/wiki/Fish), 121 bytes
var QUESTION_ID=114003,OVERRIDE_USER=62393;function answersUrl(e){return"https://api.stackexchange.com/2.2/questions/"+QUESTION_ID+"/answers?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+ANSWER_FILTER}function commentUrl(e,s){return"https://api.stackexchange.com/2.2/answers/"+s.join(";")+"/comments?page="+e+"&pagesize=100&order=desc&sort=creation&site=codegolf&filter="+COMMENT_FILTER}function getAnswers(){jQuery.ajax({url:answersUrl(answer_page++),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){answers.push.apply(answers,e.items),answers_hash=[],answer_ids=[],e.items.forEach(function(e){e.comments=[];var s=+e.share_link.match(/\d+/);answer_ids.push(s),answers_hash[s]=e}),e.has_more||(more_answers=!1),comment_page=1,getComments()}})}function getComments(){jQuery.ajax({url:commentUrl(comment_page++,answer_ids),method:"get",dataType:"jsonp",crossDomain:!0,success:function(e){e.items.forEach(function(e){e.owner.user_id===OVERRIDE_USER&&answers_hash[e.post_id].comments.push(e)}),e.has_more?getComments():more_answers?getAnswers():process()}})}function getAuthorName(e){return e.owner.display_name}function process(){var e=[];answers.forEach(function(s){var r=s.body;s.comments.forEach(function(e){OVERRIDE_REG.test(e.body)&&(r="<h1>"+e.body.replace(OVERRIDE_REG,"")+"</h1>")});var a=r.match(SCORE_REG);a&&e.push({user:getAuthorName(s),size:+a[2],language:a[1],link:s.share_link})}),e.sort(function(e,s){var r=e.size,a=s.size;return r-a});var s={};e.forEach(function(e){var o=e.language;/<a/.test(o)&&(o=jQuery(o).text().toLowerCase()),s[o]=s[o]||{lang:e.language,user:e.user,size:e.size,link:e.link,uniq:o}});var t=[];for(var o in s)s.hasOwnProperty(o)&&t.push(s[o]);t.sort(function(e,s){return e.uniq>s.uniq?1:e.uniq<s.uniq?-1:0});for(var c=0;c<t.length;++c){var i=jQuery("#language-template").html(),o=t[c];i=i.replace("{{LANGUAGE}}",o.lang).replace("{{NAME}}",o.user).replace("{{SIZE}}",o.size).replace("{{LINK}}",o.link),i=jQuery(i),jQuery("#languages").append(i)}}var ANSWER_FILTER="!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe",COMMENT_FILTER="!)Q2B_A2kjfAiU78X(md6BoYk",answers=[],answers_hash,answer_ids,answer_page=1,more_answers=!0,comment_page;getAnswers();var SCORE_REG=/<h\d>\s*([^\n,]*[^\s,]),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/,OVERRIDE_REG=/^Override\s*header:\s*/i;
body{text-align:left!important}#language-list{padding:10px;width:290px;float:left}table thead{font-weight:700}table td{padding:5px}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/codegolf/all.css?v=617d0685f6f3"> <div id="language-list"> <h2>Winners by Language</h2> <table class="language-list"> <thead> <tr><td>Language</td><td>User</td><td>Score</td></tr></thead> <tbody id="languages"> </tbody> </table> </div><table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td><a href="{{LINK}}">{{SIZE}}</a></td></tr></tbody> </table>
a b
podaćb a
zamiast tego?You may choose any format you like for both input and output, as long as the two numbers are clearly distinguishable
1
.Odpowiedzi:
BitCycle ,
1467964 bajtówWłaśnie zdałem sobie sprawę, że cała sekcja mojego oryginalnego kodu była niepotrzebna. Ogromna redukcja!
Program pobiera dane jednostkowe z wiersza poleceń, najpierw dzielnikiem. Wyprowadza iloraz i resztę w jedności, oddzielone przez
0
. Na przykład, otoa=11
,b=4
,a/b=2
,a%b=3
:Niegolfowany w akcji
Oto moja wersja ungolfed computing
a=3
,b=5
z animacją włączony (przepraszam za glitchiness):Próba wyjaśnienia
Wyjaśnienie dotyczy wersji bez golfa. Zanim to rozwiążesz , zdecydowanie polecam przeczytanie strony Esolangs, aby przekonać się, jak działa ten język.
Algorytm wygląda następująco:
0
a następnie bity dywidendy, a następnie zakończ.Sercem kodu są relacje między kolekcjonerami (wielkie litery). Ponieważ istnieje wiele osobne kolektory z każdej litery, niech odnoszą się do nich jako
A1
,A2
,B1
,B2
, itd., W liczbie od góry do dołu.A1
iA2
przytrzymaj odpowiednio dzielnik i dywidendę na początku głównej pętli.B1
.C1
jeden, a drugi wC3
. Reszta dywidendy idzie naB2
.C2
.C3
lubC2
na wyjście. Reszta dywidendy idzie naC4
.B
kolektorach są jakieś bity , cyklicznie przewijają zawartość doA
kolektorów i kontynuują w wewnętrznej pętli.A
iB
kolektory są puste,C
kolektory otwierają się i przechodzimy do etapu przetwarzania:C1
iC4
zrzuć ich zawartość (odpowiednio dzielnik i pozostałą dywidendę) doD1
iD3
.C2
jest pusty, nadal drukujemy iloraz.C3
przejdź do prawego górnego=
przełącznika. Pierwszy1
bit przechodzi bezpośrednio do!
i jest wysyłany.1
bit przechodzi, aktywuje przełącznik w prawo, co powoduje wysłanie wszystkich kolejnych bitów z planszy.C2
nie jest pusty, drukujemy resztę.C2
jest negowany do a0
i przechodzi przez przełącznik.0
Idzie dalej!
i jest wyprowadzany.0
bit przechodzi, aktywuje przełącznik w lewo. Teraz wszystkie fragmentyC3
przechodzą w lewo od przełącznika i są przekierowywane do!
, generując całą resztę.C2
jest również wysyłana doD2
.D
kolektory są otwarte.D2
środku, oznacza to, że wydrukowaliśmy resztę. Bit zD2
trafia w@
, co kończy program.D1
iD3
pętla wracają odpowiednio doA1
iA2
, a główna pętla zaczyna się od nowa.źródło
pieprzenie mózgu ,
4341 bajtówUżywa zmodyfikowanej wersji mojego algorytmu niszczącego modułu na Esolangs .
Program odczytuje dwa bajty - d i n , w tej kolejności - od standardowego wejścia i drukuje dwa bajty - n% D i n / d , w tym celu - na standardowe. Wymaga tłumacza z podwójnie nieskończoną lub okrągłą taśmą, taką jak ta na TIO.
Wypróbuj online!
Jak to działa
Przed uruchomieniem programu wszystkie komórki mają wartość 0 . Po odczytaniu d ze STDIN (
,
), przesunięciu się o jeden krok w lewo (<
) i odczytaniu n ze STDIN (,
) taśma wygląda następująco.Następnie, zakładając, że n> 0 , wchodzimy do pętli while
który przekształca taśmę w następujący sposób.
Po pierwsze,
>->+<
pożyczki do komórki C i zmniejsza go, a następnie przejście do komórki D i przyrosty go, a wreszcie wraca do komórek C . To, co stanie się potem, zależy od tego, czy wartość komórki C wynosi zero, czy nie.Jeśli komórka C posiadać dodatnią wartość,
[>]
(idź w prawo, podczas gdy komórka jest niezerowe) awansuje do komórek E .>>>>+<<<
Postęp do komórek J aby ją zwiększyć, a następnie wraca do komórek F .Ponieważ komórka F będzie zawsze trzymać 0 , czas pętla
[<+>-]
zostanie pominięty całkowicie, i<<
wraca do komórki D .Wreszcie, ponieważ ani D ani C przytrzymaj 0 ,
[<]
(idź w lewo, podczas gdy komórka jest niezerowe) będzie retrocede do komórek A .Jeśli komórka C zawiera 0 , pętla
[>]
jest całkowicie pomijana;>>>>+<<<
Postęp do komórek G , aby ją zwiększyć, a następnie przechodzi z powrotem do komórkowej D .W tym momencie D będzie trzymać d (w rzeczywistości suma wartości w C i D będzie zawsze d ), więc
[<+>-]
(gdy D jest dodatnia, przyrost C i spadek D ) ustawią C na d, a D na 0 .Wreszcie,
<<
retrocedes do komórek B ,[<]
(lewo, gdy komórka jest niezerowa) dalej pozostawia się komórki A .W obu przypadkach
>-
przesuwa się do komórki B i zmniejsza ją, a pętla rozpoczyna się od nowa, chyba że zostanie wyzerowana.Po k iteracjach, taśma wygląda następująco.
Po n iteracjach B jest zerowane i wyrywamy się z pętli. Żądane wartości ( n% d i n / d ) zostaną zapisane w komórkach D i G , więc
>>.>>>.
je wydrukuje.źródło
Funciton ,
224108 bajtówLiczba bajtów zakłada kodowanie UTF-16 za pomocą BOM.
Wypróbuj online!
Powyższe definiuje funkcję
f
, która przyjmuje dwie liczby całkowite i zwraca zarówno ich podział, jak i iloczyn (funkcje w Funciton mogą mieć wiele wyjść, o ile suma wejść i wyjść nie przekracza 4).Używanie dwóch wartości wejściowych do wielu celów jest w rzeczywistości dość trywialne: po prostu odłączysz złącze za pomocą trójnika o wartości, która zostanie zduplikowana wzdłuż obu gałęzi, które możemy następnie osobno zasilić wbudowane podziały i modulo.
Właściwie zajęło mi dwa razy więcej czasu, aby dowiedzieć się, jak wyświetlić wynik użytkownikowi niż tylko wdrożenie rozwiązania.
Ponadto Funciton ma wbudowany divmod,
÷%
i zabawnie wbudowane,÷
a%
moje rozwiązania są zaimplementowane pod względem÷%
. Jednak mojaf
powyższa funkcja nie jest do końca identyczna÷%
: musiałem zamienić kolejność danych wejściowych i chociaż wydaje się, że zmiana powinna być łatwa, ale jak dotąd nie byłem w stanie tego zrobić bez zwiększenia liczby bajtów .źródło
JavaScript (ES6), 17 bajtów
Dzięki @Arnauld za grę w golfa na jednym bajcie
Odbiera dane wejściowe w formacie (x) (y)
Pobiera wartość x / y przez wykonanie bitowe lub
Pobiera resztę o x% y
Umieszcza obie wartości w tablicy, dzięki czemu można je zwrócić
Wypróbuj online!
źródło
APL (Dyalog) , 5 bajtów
-2 bajty dzięki @ngn
To jest na szczycie (2 pociągi) widelca (3 pociągi), gdzie prawy ząb na szczycie jest pochodną funkcją (wynikiem zastosowania operatora do funkcji):
⌊
piętro÷
podział,
catenated do|
pozostała część podziału⍨
z zamienionymi argumentami (moduł APL jest „wstecz”)Wypróbuj online!
źródło
⌊÷,|⍨
Brachylog , 6 bajtów
Wypróbuj online!
Wyjaśnienie
Nadużywamy metapredykatu,
ᶠ findall
aby zastosować dwa różne predykaty do listy danych wejściowych dwóch argumentów:źródło
MATL ,
1210 bajtówDane wejściowe są
a
zatemb
. Wyjście to reszta, a następnie iloraz.Wypróbuj online!
Wyjaśnienie
Pozwala to uniknąć zarówno modulo, jak i podziału. Zamiast tego używa przekształcania tablic :
a+1
niezerowych elementów.b
wierszy. W razie potrzeby automatycznie uzupełnia się zerami.1
, są odpowiednio resztą i ilorazem.Rozważmy na przykład
a=7
,b=3
.źródło
Mathematica,
2018 bajtówNiewielkie nadużywanie elastycznych reguł produkcji: wynik jest podawany jako
div[mod]
, co pozostanie nieocenione. Poszczególne liczby można wyodrębnić za pomocąresult[[0]]
iresult[[1]]
.I hej, to tylko jeden bajt dłuższy niż śmiesznie nazwany wbudowany
QuotientRemainder
.Mathematica, właściwie ma fajny sposób na zastosowanie wielu funkcji do tego samego wejścia, ale jest o trzy bajty dłużej:
źródło
quotRem
wbudowane można zaoszczędzić dużo czasu na wywołaniequot
irem
oddzielnie.05AB1E , 5 bajtów
Wypróbuj online!
05AB1E ma błąd, więc niejawne dane wejściowe nie działają :(Emigna zauważyła, że dane wejściowe są często wypychane do tyłu.źródło
You may choose any format you like for both input and output, as long as the two numbers are clearly distinguishable
przez to, że możesz zdecydować, że dane wejściowe są traktowane jakodivisor, dividend
. Możesz po prostu określić w odpowiedzi „Dane wejściowe są traktowane jakodivisor, dividend
” i będą one wyraźnie widoczne :)Meduza , 14 bajtów
Wypróbuj online!
Wyjaśnienie
Meduza to piękny język, jeśli chodzi o stosowanie wielu funkcji do tego samego wejścia. Język jest dwuwymiarowy i wszystkie funkcje binarne wyglądają na południe dla jednego wejścia i na wschód dla drugiego. Zbliżając się do jednej wartości z zachodu i z północy, możemy podać ją do dwóch funkcji bez konieczności kopiowania jej w kodzie.
Dwa
i
s w programie są zastępowane dwoma wartościami wejściowymi podczas uruchamiania programu. Teraz%
jest podział. Zajmuje jedno wejście bezpośrednio ze wschodu, a gdy idzie na południe, uderza w to,E
które przekierowuje również wyszukiwanie na wschód. Tak więc oba dane wejściowe są podawane%
jako argumenty.|
jest wbudowanym modułem, który zasadniczo robi to samo, ale w końcu szuka obu na południe.Łączymy oba wyniki w parę z
,
. Następniem
jest funkcja podłogi (której potrzebujemy, ponieważ%
jest to dzielenie zmiennoprzecinkowe) i na koniec wypisujemy wynik za pomocąp
.źródło
Cubix , 12
13bajtówKtóry mapuje na następujący sześcian
Wypróbuj tutaj
Wyjaśnienie z wykonanymi krokami
,I|I,
- zaczyna się od zbędnego podziału liczb całkowitych, pobiera pierwszą liczbę całkowitą z wejścia, odbija się wstecz i pobiera następną liczbę całkowitą z wejścia, a następnie dzieli ponownieO;
- Wyprowadza wynik podziału liczb całkowitych i wstawia go%
- wykonaj modyfikację. Można to zrobić później, ale skończyło się tutajS\o
- Dodaj znak spacji do stosu, przekieruj w górę i wypuść spacjęW;
- Przesuń w lewo i wyskakuj spację ze stosuO|@
- Wyjmij obliczony wcześniej mod, przejdź przez poziomy reflektor i zatrzymaj się.źródło
Brain-Flak ,
5654 bajtówWypróbuj online!
-2 bajty dzięki Wheat Wizard
Wyjaśnienie
Obecnie najbardziej znany podział liczb całkowitych i modulo w Brain-Flak są bardzo podobne (w rzeczywistości obecnie używany podział liczb całkowitych jest tylko modyfikacją, którą wprowadziłem na feersum ).
Porównanie podziału modulo i liczb całkowitych:Dogodnie program podziału liczb całkowitych wykorzystuje tylko trzeci stos do przechowywania danych, podczas gdy program modulo wykorzystuje tylko normalne dwa stosy do przechowywania danych. Zatem po prostu uruchamiając je jednocześnie, nie kolidują ze sobą.
Kombinacja podziału modulo i liczb całkowitych:Wreszcie, zarówno programy do dzielenia liczb całkowitych, jak i programy modulo używane w tej kombinacji zostały zaprojektowane tak, aby były czyste w stosach (nie pozostawiają śmieci na stosach / nie zależą od (nie) istnienia wartości na stosach innych niż ich dane wejściowe), ale nie jest to konieczne za ten problem. W ten sposób możemy zaoszczędzić dwa bajty, nie zawracając sobie głowy zerowaniem zera na końcu głównej pętli, a kolejne dwa bajty, nie popychając zera na początku, zamiast tego bazując na zerowym wypełnieniu u dołu stosów.
To daje nam końcowy program:Wyjaśnienie programu podziału liczb całkowitych patrz w odpowiedzi na feersum
Wyjaśnienie dywizji liczb całkowitych już wkrótce ...
źródło
Java 8, 18 bajtów
(a,b)->a/b+","+a%b
To jest tego typu wyrażenie lambda
BiFunction<Integer, Integer, String>
.Dziwi mnie, że jest to dość zwięzłe rozwiązanie dla Javy. Idź wyrażenia lambda!
źródło
Brain-Flak ,
168 148110 bajtówChyba powinienem najpierw sprawdzić Wiki
Format:
Wypróbuj online!
źródło
sed, 36 bajtów
35 bajtów kodu, +1 dla
-r
flagi.Pobiera dane wejściowe w jednostkowej, oddzielonej spacją, z mniejszą liczbą jako pierwszą. Wyprowadza jako unary, z ilorazem najpierw ws,
1
a pozostałą drugąx
ws. (Jeśli nie jest to dopuszczalne, daj mi znać, a zmienię go na oddzielone spacjami1
s, tak jak dane wejściowe).Wyjaśnienie
źródło
Excel 2013,
31 3026 bajtówWyjaśnienie
Dane wejściowe są w komórce
A1
iB1
. Zwraca to po prostu zwracane wartości funkcjiFLOOR
iMOD
, które dotyczą podziału podłogi i pozostałej części. Te wartości są oddzielone przecinkiem.źródło
FLOOR(A1/B1;1)
zamiastQUOTIENT(A1;B1)
FLOOR(A1/B1;1)
je „INT (A1 / B1)”, aby zaoszczędzić 4 kolejne bajtyPython 2 , 20 bajtów
Wypróbuj online!
Wbudowane, 6 bajtów
Wypróbuj online!
źródło
Galaretka , 3 bajty
Wypróbuj online!
źródło
OLEJ ,
134106103102 bajtówPobiera dane wejściowe ze standardowego wejścia, dwóch liczb oddzielonych znakiem nowej linii. Zwraca wynik dzielenia liczb całkowitych, następnie nową linię, a następnie resztę.
Jest to jeden z najbardziej skomplikowanych programów OIL, jakie kiedykolwiek napisałem, ponieważ OIL nie ma wbudowanych funkcji dzielenia, reszty, dodawania, odejmowania i tak dalej. Działa z pierwotnym sposobem dzielenia: powtarzaną dekrementacją zagnieżdżoną.
Przedstawiam kod w formacie z adnotacjami, z komentarzami w stylu języków skryptowych. Przed wykonaniem komentarze należy usunąć.
edytuj: Ogoliłem jeszcze 3 bajty, przenosząc „stałą” do lokalizacji jednocyfrowej (mniej bajtów do odniesienia), a następnie domyślnie 2 miejsca zero (używając zamiast tego pustej linii. Jeden z nich mógłbym zrobić przed).
edit: I kolejny bajt, domyślnie przyjmując zero początkowe. Naprawdę potrzebujemy tylko jednego dosłownego zera.
źródło
Siatkówka oka , 14 bajtów
Nadużywajmy formatów wejścia / wyjścia!
Pobiera dane wejściowe jako
b\na
jednoargumentowe, wykorzystując w przypadku jednoznacznej cyfry dowolny pojedynczy niecyfrowy, nieliniowy znak. Wysyła iloraz w postaci dziesiętnej, po której bezpośrednio następuje reszta w jedności, przy użyciu tego samego znaku co wartość wejściowa.Wypróbuj online!
(.*) ¶(\1)*
dopasowuje pierwszą liczbę, następnie nową linię (¶ jest skrótem Retiny dla \ n), a następnie pierwszą liczbę ponownie tyle razy, ile to możliwe. Liczba meczów drugiej grupy będzie wynikiem podziału, a część niepasująca będzie resztą.Za pomocą
$#2
zamieniamy wszystko, co pasowało do poprzedniego wiersza, liczbą przechwyceń w drugiej grupie i otrzymujemy nasz wynik.źródło
ArnoldC ,
286283 bajtówWypróbuj online!
Jak to działa
Format wyjściowy
źródło
Labirynt , 11 bajtów
Wypróbuj online!
Wyjaśnienie
Następnie IP uderza w ślepy zaułek, odwraca się i program kończy się z powodu próby podziału przez zero, gdy
%
jest ponownie wykonywany.źródło
C, 32 bajty
Wypróbuj online!
źródło
> <> ,
27 2616 + 1 = 17 bajtówUwaga
-v
flagi, patrz TIO na przykład.Wypróbuj online!
Wyjaśnienie
Zauważ, że stos zaczyna się jako
A, B
, gdzieA
iB
reprezentuje pierwsze i drugie wejście, ze względu na-v
zastosowaną flagę.źródło
į
staje się 255.-v
flagę).C, 21 bajtów
Makro, które zastępuje f (a, b) oddzielonymi przecinkami 2-członowymi. Lepiej jednak przekaż to do funkcji, bo inaczej nie da się rozdzielić dwóch.
Wypróbuj online
źródło
Haskell , 21 bajtów
Wypróbuj online! Przykładowe użycie:
13#2
zwraca(6,1)
. Tak, jest to dość nudne, ale nieco bardziej interesujące niżdivMod
wbudowane, które działa tak samo.Mimo, że jesteśmy na to, istnieje również
quot
,rem
iquotRem
które zachowują się tak samo jak na liczbach naturalnychdiv
,mod
adivMod
. Jednak w przypadku ujemnych wkładów wynikmod
ma taki sam znak jak dzielnik, podczas gdy wynikrem
ma taki sam znak jak dywidenda. Lub, jak to zostało zapisane w dokumentacji Preludium ,quot
jest dzieleniem liczb całkowitych obciętym w kierunku zera idiv
jest dzieleniem liczb całkowitych obciętym w kierunku ujemnej nieskończoności.Co powiesz na brak
div
lubmod
wbudowane?Bez wbudowanych,
36 3231 bajtówWypróbuj online! Przykładowe użycie:
13#2
zwraca(1,6)
, to znaczymod
wynik jest pierwszy, adiv
wynik drugi. Jeślia
jest mniejszeb
, toa mod b
jesta
ia div b
jest0
, więc(a,0)
jest zwracane. Inaczej rekurencyjnie obliczyćmod
idiv
oda-b
ib
, dodać1
do wyniku podziału i zachować resztę.Dodanie 1 do wyniku podziału jest osiągane przez użycie
<$>
, które jest powszechnie używane jakomap
do mapowania funkcji na listach, ale działa również na krotkach, jednak funkcja jest stosowana tylko do drugiego elementu krotki.Edycja: Zapisano jeden bajt dzięki xnor!
źródło
<$>
na krotki do działania w jej drugiego elementu:a#b|a<b=(a,0)|m<-a-b=(+1)<$>m#b
.SWI Prolog, 109 bajtów
Wydajność:
Opis:
Prosty algorytm rekurencyjny bez wbudowanego podziału lub modulo. Po prostu liczy „ile razy zmieści Drugi numer w Pierwszy?” i podaje wynik (zunifikowany do D) z resztą (R).
// edycja: usunięto niepotrzebne spacje
źródło
:-
w ostatniej linii są spacje, ale nie na innych. Czy są wymagane z jakiegoś powodu? To samo dotyczyE + 1
natomiastF-S
sugerują brak potrzebne pomieszczenia.Gol> <> , 11 bajtów
Tłumacz online
źródło
MATL, 5 bajtów
Wypróbuj to w MATL Online!
Wyjaśnienie
źródło
Ouroboros , 15 bajtów
Pobiera liczby w odwrotnej kolejności (np
10 42
.). Wypróbuj tutaj.Wyjaśnienie
źródło