Zadanie
Biorąc pod uwagę dwie ściśle dodatnie liczby całkowite n i d jako dane wejściowe, określ, czy n jest równomiernie podzielne przez d , tj. Czy istnieje taka liczba całkowita q , że n = qd
.
Możesz napisać program lub funkcję i użyć dowolnej z naszych standardowych metod otrzymywania danych wejściowych i dostarczania danych wyjściowych.
Wynik powinien być wartością prawdomówną lub fałszem ; prawda, jeśli n jest podzielne przez d , a fałsz w przeciwnym razie.
Twój kod musi obsługiwać tylko liczby całkowite, które może reprezentować w sposób natywny, o ile działa dla wszystkich liczb całkowitych ze znakiem 8-bitowych. Jednak Twój algorytm musi działać dla dowolnie dużych liczb całkowitych.
Możesz używać dowolnego języka programowania , ale pamiętaj, że te luki są domyślnie zabronione.
To jest golf golfowy , więc wygrywa najkrótsza ważna odpowiedź - mierzona w bajtach .
Przypadki testowe
n, d output
1, 1 truthy
2, 1 truthy
6, 3 truthy
17, 17 truthy
22, 2 truthy
1, 2 falsy
2, 3 falsy
2, 4 falsy
3, 9 falsy
15, 16 falsy
Tabela liderów
Fragment kodu na dole tego postu generuje katalog na podstawie odpowiedzi a) jako listy najkrótszych rozwiązań dla każdego języka oraz b) jako ogólnej tabeli wyników.
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 poprawić swój wynik, to 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 jest sumą dwóch plików lub chcesz osobno wymienić kary za flagi tłumacza), upewnij się, że rzeczywisty wynik jest ostatnią liczbą w nagłówku:
## Perl, 43 + 3 (-p flag) = 45 bytes
Możesz także ustawić nazwę języka jako link, który pojawi się we fragmencie:
## [><>](http://esolangs.org/wiki/Fish), 121 bytes
<style>body { text-align: left !important} #answer-list { padding: 10px; width: 290px; float: left; } #language-list { padding: 10px; width: 290px; float: left; } table thead { font-weight: bold; } table td { padding: 5px; }</style><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=83c949450c8b"> <div id="language-list"> <h2>Shortest Solution 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> <div id="answer-list"> <h2>Leaderboard</h2> <table class="answer-list"> <thead> <tr><td></td><td>Author</td><td>Language</td><td>Size</td></tr> </thead> <tbody id="answers"> </tbody> </table> </div> <table style="display: none"> <tbody id="answer-template"> <tr><td>{{PLACE}}</td><td>{{NAME}}</td><td>{{LANGUAGE}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr> </tbody> </table> <table style="display: none"> <tbody id="language-template"> <tr><td>{{LANGUAGE}}</td><td>{{NAME}}</td><td>{{SIZE}}</td><td><a href="{{LINK}}">Link</a></td></tr> </tbody> </table><script>var QUESTION_ID = 86149; var ANSWER_FILTER = "!t)IWYnsLAZle2tQ3KqrVveCRJfxcRLe"; var COMMENT_FILTER = "!)Q2B_A2kjfAiU78X(md6BoYk"; var OVERRIDE_USER = 48934; var answers = [], answers_hash, answer_ids, answer_page = 1, more_answers = true, comment_page; function answersUrl(index) { return "https://api.stackexchange.com/2.2/questions/" + QUESTION_ID + "/answers?page=" + index + "&pagesize=100&order=desc&sort=creation&site=codegolf&filter=" + ANSWER_FILTER; } function commentUrl(index, answers) { return "https://api.stackexchange.com/2.2/answers/" + answers.join(';') + "/comments?page=" + index + "&pagesize=100&order=desc&sort=creation&site=codegolf&filter=" + COMMENT_FILTER; } function getAnswers() { jQuery.ajax({ url: answersUrl(answer_page++), method: "get", dataType: "jsonp", crossDomain: true, success: function (data) { answers.push.apply(answers, data.items); answers_hash = []; answer_ids = []; data.items.forEach(function(a) { a.comments = []; var id = +a.share_link.match(/\d+/); answer_ids.push(id); answers_hash[id] = a; }); if (!data.has_more) more_answers = false; comment_page = 1; getComments(); } }); } function getComments() { jQuery.ajax({ url: commentUrl(comment_page++, answer_ids), method: "get", dataType: "jsonp", crossDomain: true, success: function (data) { data.items.forEach(function(c) { if (c.owner.user_id === OVERRIDE_USER) answers_hash[c.post_id].comments.push(c); }); if (data.has_more) getComments(); else if (more_answers) getAnswers(); else process(); } }); } getAnswers(); var SCORE_REG = /<h\d>\s*([^\n,<]*(?:<(?:[^\n>]*>[^\n<]*<\/[^\n>]*>)[^\n,<]*)*),.*?(\d+)(?=[^\n\d<>]*(?:<(?:s>[^\n<>]*<\/s>|[^\n<>]+>)[^\n\d<>]*)*<\/h\d>)/; var OVERRIDE_REG = /^Override\s*header:\s*/i; function getAuthorName(a) { return a.owner.display_name; } function process() { var valid = []; answers.forEach(function(a) { var body = a.body; a.comments.forEach(function(c) { if(OVERRIDE_REG.test(c.body)) body = '<h1>' + c.body.replace(OVERRIDE_REG, '') + '</h1>'; }); var match = body.match(SCORE_REG); if (match) valid.push({ user: getAuthorName(a), size: +match[2], language: match[1], link: a.share_link, }); else console.log(body); }); valid.sort(function (a, b) { var aB = a.size, bB = b.size; return aB - bB }); var languages = {}; var place = 1; var lastSize = null; var lastPlace = 1; valid.forEach(function (a) { if (a.size != lastSize) lastPlace = place; lastSize = a.size; ++place; var answer = jQuery("#answer-template").html(); answer = answer.replace("{{PLACE}}", lastPlace + ".") .replace("{{NAME}}", a.user) .replace("{{LANGUAGE}}", a.language) .replace("{{SIZE}}", a.size) .replace("{{LINK}}", a.link); answer = jQuery(answer); jQuery("#answers").append(answer); var lang = a.language; lang = jQuery('<a>'+lang+'</a>').text(); languages[lang] = languages[lang] || {lang: a.language, lang_raw: lang.toLowerCase(), user: a.user, size: a.size, link: a.link}; }); var langs = []; for (var lang in languages) if (languages.hasOwnProperty(lang)) langs.push(languages[lang]); langs.sort(function (a, b) { if (a.lang_raw > b.lang_raw) return 1; if (a.lang_raw < b.lang_raw) return -1; return 0; }); for (var i = 0; i < langs.length; ++i) { var language = jQuery("#language-template").html(); var lang = langs[i]; language = language.replace("{{LANGUAGE}}", lang.lang) .replace("{{NAME}}", lang.user) .replace("{{SIZE}}", lang.size) .replace("{{LINK}}", lang.link); language = jQuery(language); jQuery("#languages").append(language); } }</script>
Odpowiedzi:
Galaretka , 1 bajt
Zajęło mi to godziny gry w golfa.
Wypróbuj online!
źródło
Brain-Flak ,
727064625846 bajtówBierze dywidendę i dzielnik (w tej kolejności) jako dane wejściowe i drukuje dzielnik (prawda) lub nic. Ponieważ każdy stos ma niejawną, nieskończoną liczbę zer, puste dane wyjściowe należy uznać za fałsz.
Rozwiązanie to, choć nie wymaga czyszczenia stosu, wykorzystuje tylko jeden stos.
Wypróbuj online!
Dzięki @WheatWizard za grę w golfa z 2 bajtów!
Jak to działa
Obliczanie modułu, 42 bajty
Powyższy pełny program można zmodyfikować w trywialny sposób, aby zamiast tego obliczyć moduł.
Tak jak poprzednio, ta metoda nie jest czyszczona przy stosach, ale używa tylko jednego stosu. Moduł 0 pozostawi stos pusty, co z grubsza odpowiada pozostawieniu 0 ; każdy stos zawiera nieskończone zera.
Wypróbuj online!
Jak to działa
Porównaj dwie pętle testera podzielności i kalkulatora modułu.
Jedyną różnicą jest to położenie
{(<()>)}{}
, które swapy d i r , gdy d = 0 . Aby obliczyć moduł, wykonujemy tę zamianę po zmniejszeniu d i zwiększeniu r .Ta zmiana nie wpływa na wynik, jeśli % b> 0 , ale jeśli % b = 0 , pozostawia (n, d, r) = (0, b, 0) - zamiast (n, d, r) = (0, 0, b) - na stosie.
W ten sposób, w celu uzyskania modułu, mamy tylko pop n i d z
{}{}
.Obliczanie modułu czyszczenia stosu, 64 bajty
42-bajtowy algorytm modułu nie jest czyszczony na stosie, więc nie można go używać tak jak we wszystkich programach. Następująca wersja wyrzuca dywidendę i dzielnik (w tej kolejności) z aktywnego stosu i wypycha moduł w zamian. Nie ma innych skutków ubocznych.
To rozwiązanie jest w dużej mierze oparte na poprzednim 72-bajtowym rekordzie @ WheatWizard, ale oszczędza 6 bajtów, nigdy nie zmieniając stosów.
Wypróbuj online!
Jak to działa
źródło
kod maszynowy x86_32, 8 bajtów
To jest moja pierwsza odpowiedź na golfa, więc mam nadzieję, że przestrzegam wszystkich zasad.
Najpierw wywołuje cdq, aby wyczyścić rejestr edx, a następnie wykonuje podpisany podział na rejestrze ecx, który przechowuje resztę w edx. Testowa linia edx, edx ustawi flagę zerową, jeśli edx wynosi zero, a sete ustawia 0 na fałsz, jeśli edx nie był równy zero, i ustawia 1 na true, jeśli edx miał wartość 0.
Jest to tylko fragment kodu, który przyczynia się do liczenia bajtów, ale do testowania oto kod C, który napisałem z zestawem wbudowanym, ponieważ w ten sposób łatwiej jest obsługiwać operacje we / wy.
źródło
Sześciokąt,
15, 13, 1210 bajtówUlubiony język oparty na sześciokącie! :RE
TL; DR działa przy użyciu magicznych, niesformatowanych rozwiązań zmniejszających liczbę bajtów:
Zaoszczędzono 2 bajty dzięki kreacji układu @ MartinEnder.
@FryAmTheEggman oszczędził 1 bajt, wykorzystując narożniki w bardziej kreatywny sposób
Zarówno @MartinEnder, jak i @FryAmTheEggman opracowały 10-bajtowe rozwiązanie, które nie drukuje niczego dla fałszywych wartości.
Moje rozwiązanie (15):
Niesformatowany:
Sformatowany:
@Martin Ender's Solution (13):
Niesformatowany:
Sformatowany:
Wyjaśnienie:
Najpierw otrzymujemy dane wejściowe i bierzemy moduł.
Następnie sprawdza, czy moduł wynosi 0, czy nie. Jeśli tak, IP obraca się o 60 stopni w lewo, odbija się od lustra, ustawia komórkę na 1 i drukuje.
Następnie adres IP przechodzi do czwartego rzędu. Kiedy osiągnie
>
, skręca w prawo (ponieważ wartość komórki wynosi teraz 1). Przechodzi i wraca w prawym dolnym rogu pod nagłówkiem NW. Adres IP uderza w<
, przechodzi wzdłuż górnego rzędu i wraca w prawym rogu, aby trafić@
, zatrzymując program.Jeśli moduł okaże się dodatni, IP skręca o 60 stopni w prawo. Po wyjściu z prawego dolnego rogu, kontynuuje na lewym dolnym brzegu ze względu na zasady owijania Sześciokąta.
'
Jest wykorzystywany, aby IP przejdź do celi z 0 w nim. Następnie IP przemieszcza się wzdłuż czwartego rzędu, owija się do drugiego, uderza w druk i zostaje odbity na<
. Reszta ścieżki do@
tego samego jest taka sama.To poważna magia.
@ FryAmTheEggman's Solution (12):
Niesformatowany:
Sformatowany:
Wyjaśnienie:
Podobnie jak inne rozwiązania, pobiera dane wejściowe i przyjmuje moduł.
Następnie adres IP jest odchylany w dolnym rogu. Jeśli moduł jest dodatni, idzie na lewą górną krawędź. Nie
?
ma już danych wejściowych, więc ustawia komórkę na 0.!
Następnie wypisuje 0 i@
kończy działanie programu.Sprawa jest znacznie trudniejsza, gdy moduł wynosi 0. Po pierwsze, zmniejsza się, następnie resetuje do 0, następnie ustawia na 1, a następnie drukuje. Następnie wartość 1 jest zmniejszana do 0. Następnie program działa tak jak na początku, dopóki nie spróbuje
0%0
. To sprawia, że rzuca cichy błąd i kończy pracę.Naprawdę chciałbym cichej błędu podstęp, ale prostszy sposób będzie zastąpić
(
w/
taki sposób, że przechodzi przez IP po raz pierwszy, ale pobiera odzwierciedlone w@
drugim.Rozwiązanie oparte na współpracy (10):
Niesformatowany:
Sformatowany:
Ten program zaczyna się tak samo, jak wszystkie inne programy, uzyskując dane wejściowe i modyfikując je.
Jeśli wejście ma wartość 0, adres IP skręca w lewo, gdy uderza
<
. Zostaje odchylony na1!@
, co drukuje 1 i kończy pracę.Jeśli sygnał wejściowy jest dodatni, adres IP skręca w prawo po trafieniu
<
. Wychodzi przez narożnik i biegnie wzdłuż prawej górnej krawędzi, uderzając w @ bez drukowania.źródło
Płat mózgowy
102, 98,96 bajtówEww. Obrzydliwy. Mogę opublikować wyjaśnienie, ale sam ledwo je rozumiem. Ten język boli mój mózg.
Wypróbuj online!
Podziękowania dla użytkownika github @Wheatwizard za wymyślenie przykładu modułu. Prawdopodobnie sam tego nie wymyśliłem!
Krótsza odpowiedź jest tutaj .
Prawdopodobnie nieprawidłowe wyjaśnienie:
Reszta jest dość prosta.
źródło
The rest is pretty straightforward.
Tak, wydaje się, że tak.JavaScript (ES6)
171211 bajtówźródło
d=a=>b=>a%b<1
śledzićd(32,2)
w konsoli JS ... Po prostu otrzymuję odpowiedźfunction b=>a%b<1
d(32)(2)
. Ponieważd(32)
dajefunction b=>a%b<1
, musisz wywołać tę funkcję ze swojąb
wartościąVim, 11 naciśnięć klawiszy
Nieźle jak na język, który obsługuje tylko ciągi znaków. :RE
źródło
<C-Left>
zrobić? Nie można go przetestować, ponieważ przełącza okna na komputerze Mac> _>B
zamiastb
(aCtrl
+Right
to odpowiednikW
) - różnica polega na znakach innych niż słowa, ale w tym przypadku robi dokładnie to samo :) vimdoc.sourceforge.net/htmldoc/motion. html # <C-Left >Mathematica -
17 133 bajtówDzięki @MartinEnder za oszczędność tony bajtów!
źródło
Divisible[]
.Siatkówka, 12 bajtów
Pobiera wejście rozdzielone spacją jako jednoargumentowe, na przykład
111111111111 1111
sprawdza, czy 12, jeśli dzieli się przez 4 . Drukuje 1 (prawda) lub 0 (fałsz).Wypróbuj online!
FryAmTheEggman zapisał dwa bajty.Ups, przepisałem moją odpowiedź, aby uporządkować argumenty we właściwej kolejności. (Potem Fry pobił mnie do tego w komentarzach. Jestem powolny w wyrażeniach regularnych!)źródło
^(1+)\1* \1$
zadziała.Partia, 20 bajtów
Wyniki
1
w przypadku sukcesu,0
niepowodzenia.źródło
C #,
271312 bajtówDzięki TuukkaX za wskazanie anonimowych lambd są dopuszczalne. Dzięki Davidowi Conradowi za nakłonienie mnie do curry, którego nawet nie zdawałem sobie sprawy, było czymś.
Krótko i słodko, ponieważ mamy do czynienia tylko z liczbami całkowitymi, których możemy użyć,
<1
a nie==0
uratować cały bajt.źródło
(a,b)=>a%b<1;
. +1.a=>b=>a%b<1;
(uwaga: wtedy musisz to nazwaćf(a)(b)
raczej niżf(a,b)
)pieprzenie mózgu, 53 bajty
Pobiera dane wejściowe jako bajty, dane wyjściowe są wartością bajtów
0x00
lub0x01
. Jest to algorytm DivMod, po którym następuje logiczna negacja .Wypróbuj online - ma kilka dodatkowych
+
pod koniec, dzięki czemu możesz zobaczyć dane wyjściowe w ASCII.źródło
Brain-Flak ,
8886 bajtówTo jest gęstsza wersja oryginalnego algorytmu testu podzielności Brain-Flaka napisanego przez
Dr Green Eggs i Iron ManDJMcMayhem i mnie.Oto krótkie (ish) wyjaśnienie, jak to działa:
Wypróbuj online!
źródło
LOLCODE,
7464 bajtówźródło
O RLY?
Nie wiedziałem tego! wymiana pieniędzy.BTW
oto wskazówki dotyczące gry w golfa.C, 60 bajtów
źródło
+1
ode mnie. Ponadto zezwalamy na funkcje, dzięki czemu można łatwo to skrócićint f(a,b){return !(a%b);}
lub nawet skrócić.int f(a,b){return!(a%b);}
ma 25 bajtów, a jeśli użyjesz odpowiedniego kompilatora, możesz nawet zrobićf(a,b){return!(a%b);}
21 bajtów.#define f(a,b)!(a%b)
( link ideone )Dyalog APL , 3 bajty
Czy zero jest równe pozostałej części podziału?
źródło
R,
2220 bajtówJak zwykle odczytuje dwie liczby z wejścia zakończonego pustą linią.
Aktualizacja: dzięki Jarko Dubbeldamowi za zgolenie 2 bajtów (pomimo faktu, że jego edycja została odrzucona, była bardzo pomocna!).
źródło
Java 8, 11 bajtów
Co do cholery, istnieją wersje JS i C #, dlaczego też nie wersja Java?
Stosowanie:
źródło
a->b->a%b<1
To powoduje błąd składniowy, prawda?Python, 16 bajtów
źródło
lambda a,b:1.*a/b==a/b
, ale byłem pod wrażeniem. To bardzo skomplikowany fragment kodu ...GolfScript, 3 bajty
Wyjaśnienie:
Wypróbuj online!
źródło
CJam,
64 bajtówZaoszczędzono 2 bajty dzięki Dennisowi
Wypróbuj online
źródło
Brachylog , 2 bajty
Wypróbuj online!
źródło
Julia, 9 bajtów
Wypróbuj online!
źródło
Fortran 95, 78 bajtów
źródło
MarioLANG,
121109107 bajtówZaoszczędzono 14 bajtów dzięki Martinowi Enderowi
Wypróbuj online!
Wyjaśnienie
Algorytm polega po prostu na odejmowaniu
d
od,n
aby sprawdzić, czy można to zrobić liczbę całkowitą razy i nie pozostawiać żadnych.Najpierw gromadzone są dane wejściowe.
n
jest w pierwszej komórce,d
w drugiej.Jest to zasadniczo główna pętla. Zmniejsza pierwszą i drugą komórkę i zwiększa trzecią.
To jest końcowy wynik. Jeśli po zwiększeniu / zmniejszeniu pierwsza komórka ma wartość 0, to wyeliminowaliśmy
n
. Jeśli po tym, druga komórka (d
) jest0
, tod
poszłan
równomiernie. Zwiększamy i drukujemy (1
). W przeciwnym razie przejdź z powrotem do pierwszej komórki (która jest0
) i wydrukuj ją.Ta pętla ma miejsce, jeśli druga komórka jest
0
po inkrementacji i dekrementacji. Kopiuje trzecią komórkę do drugiej komórki. Część na dole ma obejść pętlę, jeśli komórka nie jest0
.źródło
Tcl, 34 bajty
Moja pierwsza / * udana * / próba w codegolf! Ten kod musi być wykonany w powłoce Tcl, w przeciwnym razie nie będzie działał.
Jeden bajt dzięki @Lynn.
Cztery bajty dzięki @Lynn i @LeakyNun (teraz rozumiem, co miał na myśli)!
źródło
?1:0
?$a%$b==0
powrócił?exp $a%$b==0
?exp $a%$b<1
może?PHP,
2322 bajtówwypisuje 1 dla true, pusty łańcuch (= nic) dla false
zadzwonić z CLI z
n
ad
jako argumenty10 bajtów dla starożytnego PHP:
<?=$n%$d<1
źródło
<?=!($A%$B)
. Wartości mogą być przekazywane jako część$_SESSION
,$_COOKIE
,$_POST
,$_GET
lub (jeśli się nie mylę) powyżej$_ENV
.for PHP<5.4 with register_globals=On
. Ale dodam to w celach informacyjnych.for PHP<5.4 with register_globals=On
”, ponieważ musisz policzyć bajtyphp.ini
pliku zawierającegoregister_globals=On
. Jednak PHP4.1 jest szczególnym przypadkiem. Jest to ostatnia wersja, w którejregister_globals=On
jest wartością domyślną, a większość funkcji jest dostępna od wersji PHP 4.1. Ta wersja umożliwia także korzystanie z innych funkcji, takich jak ostrzeżeniaereg
isplit
bez nich.J, 3 bajty
Stosowanie:
Powróci
1
. I jest równoważne pseudokodowi10 MOD 2 EQ 0
Zauważ, że jest to bardzo podobne do odpowiedzi APL , ponieważ J jest mocno zainspirowany APL
źródło
PowerShell v2 +, 20 bajtów
Pobiera dane wejściowe jako dwa argumenty wiersza poleceń
$args
,-join
łączy je razem w ciąg znaków%
jako separator, potoki doiex
(skrótInvoke-Expression
i podobne doeval
). Wynik jest albo0
niezerowy, więc bierzemy wartość logiczną nie!
tego wyniku, co oznacza albo$TRUE
albo$FALSE
(niezerowe liczby całkowite w PowerShell są prawdziwe). To, że wartość logiczna jest pozostawiona w potoku, a dane wyjściowe są niejawne.Alternatywne wersje, również po 20 bajtów
Ta sama koncepcja, tylko nieco inne sposoby strukturyzacji danych wejściowych. Dziękujemy @DarthTwon za ich dostarczenie.
Przykłady
źródło
param($a,$b)!($a%$b)
!($args[0]%$args[1])
Haskell,
1311 bajtówTo definiuje nową funkcję
(!) :: Integral n => n -> n -> Bool
. Odmod n m
zwraca tylko dodatnie liczby jeślin
im
są pozytywne, możemy zapisać bajt stosując1>
zamiast0==
.Stosowanie:
źródło
((1>).).mod
.