задача
Даны два строго положительные целые числа п и д в качестве входных данных, определить , является ли п является равномерно делится на д , то есть, если существует целое число д такое , что n = qd
.
Вы можете написать программу или функцию и использовать любой из наших стандартных методов получения ввода и предоставления вывода.
Вывод должен быть истинным или ложным значением ; правда, если n делится на d , и ложно в противном случае.
Ваш код должен обрабатывать только целые числа, которые он может представлять нативно, если он работает для всех 8-битных целых чисел со знаком. Однако ваш алгоритм должен работать для сколь угодно больших целых чисел.
Вы можете использовать любой язык программирования , но учтите, что эти лазейки по умолчанию запрещены.
Это код-гольф , поэтому самый короткий действительный ответ - измеренный в байтах - выигрывает.
Контрольные примеры
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
Leaderboard
Фрагмент стека в нижней части этого поста создает каталог из ответов а) в виде списка кратчайшего решения для каждого языка и б) в качестве общей таблицы лидеров.
Чтобы убедиться, что ваш ответ обнаружен, начните его с заголовка, используя следующий шаблон уценки:
## Language Name, N bytes
где N
размер вашего представления. Если вы улучшите свой счет, вы можете сохранить старые результаты в заголовке, вычеркнув их. Например:
## Ruby, <s>104</s> <s>101</s> 96 bytes
Если вы хотите включить в заголовок несколько чисел (например, потому что ваш результат равен сумме двух файлов или вы хотите перечислить штрафы за флаг интерпретатора отдельно), убедитесь, что фактический результат является последним числом в заголовке:
## Perl, 43 + 3 (-p flag) = 45 bytes
Вы также можете сделать имя языка ссылкой, которая будет отображаться во фрагменте кода:
## [><>](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>
Ответы:
Желе , 1 байт
Это заняло у меня несколько часов в гольф.
Попробуйте онлайн!
источник
Brain-Flak ,
727064625846 байтПринимает дивиденд и делитель (в этом порядке) в качестве входных данных и печатает делитель (истинный) или ничего. Поскольку каждый стек имеет неявное, бесконечное количество нулей, пустой вывод следует считать ложным.
Хотя это решение не является чистым в стеке, оно использует только один стек.
Попробуйте онлайн!
Спасибо @WheatWizard за удаление 2 байта!
Как это работает
Расчет модуля, 42 байта
Приведенную выше полную программу можно изменить тривиальным образом, чтобы вместо этого рассчитать модуль.
Как и прежде, этот метод не является чистым стеком, но использует только один стек. Модуль 0 оставит стек пустым, что примерно эквивалентно оставлению 0 ; каждый стек содержит бесконечные нули.
Попробуйте онлайн!
Как это работает
Сравните две петли тестера делимости и калькулятора модулей.
Единственная разница заключается в расположении
{(<()>)}{}
, которое меняет местами d и r, если d = 0 . Чтобы вычислить модуль, мы выполним этот обмен после уменьшения d и увеличения r .Это изменение не влияет на результат, если a% b> 0 , но если a% b = 0 , оно оставляет (n, d, r) = (0, b, 0) - вместо (n, d, r) = (0, 0, б) - в стеке.
Таким образом, чтобы получить модуль, нам нужно только сложить n и d с
{}{}
.Расчет модуля очистки стека, 64 байта
Алгоритм 42-байтового модуля не является чистым стеком, поэтому его нельзя использовать как есть во всех программах. Следующая версия извлекает дивиденды и делители (в этом порядке) из активного стека и возвращает модуль в ответ. У него нет других побочных эффектов.
Это решение в значительной степени основано на предыдущей 72-байтовой записи @ WheatWizard, но оно экономит 6 байтов, никогда не переключая стеки.
Попробуйте онлайн!
Как это работает
источник
машинный код x86_32, 8 байт
Это мой первый кодовый гольф-ответ, так что, надеюсь, я следую всем правилам.
Сначала вызывается cdq для очистки регистра edx, затем выполняется деление со знаком для регистра ecx, в котором остаток сохраняется в edx. Тест edx, строка edx установит нулевой флаг, если edx равен нулю, и sete устанавливает 0 для false, если edx не был нулем, и устанавливает 1 для true, если edx было 0.
Это просто фрагмент кода, который вносит вклад в подсчет байтов, но для тестирования приведу код C, который я написал со встроенной сборкой, потому что таким способом проще обрабатывать ввод / вывод.
источник
Гексагония,
15, 13, 1210 байтВсеми любимый язык на основе шестиугольника! : D
TL; DR работает с использованием волшебных, неформатированных решений в уменьшении количества байтов:
Сохранено 2 байта благодаря мастерству компоновки @ MartinEnder.
@FryAmTheEggman сэкономил 1 байт, используя более творческие углы
И @MartinEnder, и @FryAmTheEggman предложили 10-байтовое решение, которое ничего не печатает для ложных значений.
Мое решение (15):
Unformatted:
отформатирован:
Решение @Martin Ender (13):
Unformatted:
отформатирован:
Объяснение:
Сначала мы получаем входные данные и берем модуль.
Затем он проверяет, равен ли модуль 0 или нет. Если это так, IP поворачивается на 60 градусов влево, отскакивает от зеркала, устанавливает ячейку в 1 и печатает.
Затем IP продолжается на четвертый ряд. Когда он достигает
>
, он поворачивается вправо (потому что значение ячейки теперь 1). Он выходит из строя и возвращается в правый нижний угол, заголовок NW. IP попадает в<
, проходит по верхнему ряду и возвращается в правый угол, чтобы ударить@
, останавливая программу.Если модуль оказывается положительным, IP поворачивается на 60 градусов вправо. Как только он выходит из нижнего правого угла, он продолжается по нижнему левому краю из-за правил обтекания Hexagony.
'
Повторно используется , чтобы сделать IP перейти к ячейке с 0 в нем. Затем IP перемещается по четвертому ряду, переходит ко второму, нажимает на печать и отражается в<
. Остальная часть пути к@
тому же.Это серьезное волшебство.
Решение @ FryAmTheEggman (12):
Unformatted:
отформатирован:
Объяснение:
Как и другие решения, он получает входные данные и принимает модуль.
Затем IP отклоняется в нижний угол. Если модуль положительный, он идет по верхнему левому краю. У
?
него больше нет входных данных, поэтому он устанавливает ячейку в 0. Затем!
он печатает 0 и@
завершает программу.Ситуация намного сложнее, когда модуль равен 0. Прежде всего, он уменьшается, затем сбрасывается на 0, затем устанавливается на 1, затем печатается. Затем 1 уменьшается до 0. После этого программа работает так же, как и в начале, пока не попытается это сделать
0%0
. Это заставляет его выдать тихую ошибку и выйти.Мне очень нравится немой трюк ошибок, но более простой способ было бы заменить
(
с/
тем чтобы IP проходит через первый раз, но получает отражение в@
секунду.Совместное решение (10):
Unformatted:
отформатирован:
Эта программа запускается так же, как и все другие программы, получая ввод и модифицируя его.
Если вход 0, IP поворачивается налево, когда он попадает
<
. Это отклоняется в1!@
, который печатает 1 и выходит.Если вход положительный, IP поворачивается направо при попадании
<
. Он выходит через угол и идет по верхнему правому краю, ударяя @ без печати.источник
Brain-flak
102, 98,96 байтовEww. Валовой. Я мог бы опубликовать объяснение, но сам едва понимаю его. Этот язык вредит моему мозгу.
Попробуйте онлайн!
Спасибо пользователю github @Wheatwizard за то, что он предложил пример модуля. Я, вероятно, не мог понять это сам!
Также более короткий ответ здесь .
Возможно неправильное объяснение:
Остальное довольно просто.
источник
The rest is pretty straightforward.
Да, похоже на это.Javascript (ES6)
171211 байтисточник
d=a=>b=>a%b<1
следоватьd(32,2)
в консоли JS ... я просто получаю ответfunction b=>a%b<1
d(32)(2)
. Потому чтоd(32)
даетfunction b=>a%b<1
, тогда вы должны вызвать эту функцию с вашимb
значениемVim, 11 нажатий клавиш
Неплохо для языка, который обрабатывает только строки. : D
источник
<C-Left>
? Не могу проверить это, потому что он переключает окна на Mac> _>B
а неb
(иCtrl
+Right
эквивалентW
) - разница с несловесными символами, но в этом случае он делает то же самое :) vimdoc.sourceforge.net/htmldoc/motion. html # <C-Left >Mathematica -
17 133 байтаСпасибо @MartinEnder за сохранение тонны байтов!
источник
Divisible[]
.Сетчатка, 12 байт
Принимает разделенный пробелами ввод в унарном виде, например,
111111111111 1111
чтобы проверить, если 12 делится на 4 . Выводит 1 (true) или 0 (false).Попробуйте онлайн!
FryAmTheEggman сохранил два байта.Ой, переписал мой ответ, чтобы рассуждать в правильном порядке. (Затем Фрай опередил меня в комментариях. Я опаздываю!)источник
^(1+)\1* \1$
будет работать.Пакетный, 20 байтов
Выходы
1
на успех,0
на провал.источник
C #,
271312 байтСпасибо TuukkaX за указание на анонимные лямбды. Спасибо Дэвиду Конраду за то, что он указал мне на карри, о котором я даже не подозревал.
Коротко и приятно, поскольку мы имеем дело только с целыми числами, которые мы можем использовать,
<1
а не==0
сохранять целый байт.источник
(a,b)=>a%b<1;
. +1.a=>b=>a%b<1;
(примечание: тогда вы должны вызывать его как,f(a)(b)
а не какf(a,b)
)брейкфук, 53 байта
Принимает входные данные как байты, выходные данные являются байтовыми значениями
0x00
или0x01
. Это алгоритм DivMod, за которым следует логическое отрицание .Попробуйте онлайн -
+
в конце есть куча дополнительных, чтобы вы могли увидеть результат в ASCII.источник
Brain-Flak ,
8886 байтЭто более плотная версия оригинального алгоритма теста делимости Brain-Flak написанного
доктором Green Eggs и Iron ManDJMcMayhem и мной.Вот краткое (ish) объяснение того, как это работает:
Попробуйте онлайн!
источник
LOLCODE,
7464 байтаисточник
O RLY?
Я этого не знал! меняется.BTW
Вот советы по игре в гольф.C, 60 байт
источник
+1
от меня. Кроме того, мы разрешаем функции, чтобы вы могли легко сократить этоint f(a,b){return !(a%b);}
или, возможно, даже сократить.int f(a,b){return!(a%b);}
составляет 25 байтов, и если вы используете правильный компилятор, вы могли бы даже сделатьf(a,b){return!(a%b);}
для 21 байта.#define f(a,b)!(a%b)
( ideone link )Дьялог АПЛ , 3 байта
Ноль равен остатку от деления?
источник
R
22 22байтаКак обычно, читает два числа из входа, который заканчивается пустой строкой.
Обновление: спасибо Jarko Dubbeldam за то, что он сбрил 2 байта (несмотря на то, что его редактирование было отклонено, это было очень полезно!).
источник
Java 8, 11 байт
Какого черта, есть версии на JS и C #, почему не версия на Java тоже?
Использование:
источник
a->b->a%b<1
Это вызывает синтаксическую ошибку, не так ли?Python, 16 байт
источник
lambda a,b:1.*a/b==a/b
, но был весьма впечатлен. Это такой сложный кусок кода ...GolfScript, 3 байта
Объяснение:
Попробуйте онлайн!
источник
CJam,
64 байтаСохранено 2 байта благодаря Денису
Попробуйте онлайн
источник
Брахилог , 2 байта
Попробуйте онлайн!
источник
Юлия, 9 байт
Попробуйте онлайн!
источник
Фортран 95, 78 байт
источник
MarioLANG,
121109107 байтСохранено 14 байтов благодаря Мартину Эндеру
Попробуйте онлайн!
объяснение
Алгоритм просто держать вычитая
d
из ,n
чтобы увидеть , если вы можете сделать это целое число раз и не имеют никакого остатка.Во-первых, вход собирается.
n
находится в первой ячейке,d
во второй.Это по сути основной цикл. Уменьшает первую и вторую ячейки и увеличивает третью.
Это окончательный вывод. Если после увеличения / уменьшения первая ячейка равна 0, то мы исключили
n
. Если после этого вторая ячейка (d
) есть0
, тоd
вошлаn
равномерно. Увеличиваем и печатаем (1
). В противном случае вернитесь к первой ячейке (которая есть0
) и распечатайте ее.Этот цикл происходит, если вторая ячейка находится
0
после увеличения и уменьшения. Копирует третью ячейку во вторую ячейку. Часть внизу - это обход цикла, если ячейка отсутствует0
.источник
Tcl, 34 байта
Моя первая / * успешная * / попытка в Codegolf! Этот код должен выполняться в оболочке Tcl, иначе он не будет работать.
Один байт благодаря @Lynn.
Четыре байта благодаря @Lynn и @LeakyNun (теперь я понимаю, что он имел в виду)!
источник
?1:0
?$a%$b==0
вернуться?exp $a%$b==0
?exp $a%$b<1
, может быть?PHP,
2322 байтапечатает 1 для истины, пустая строка (= ничего) для ложного
вызов из кли с
n
и вd
качестве аргументов10 байт для древнего PHP:
<?=$n%$d<1
источник
<?=!($A%$B)
. Значения могут быть переданы как часть вашего$_SESSION
,$_COOKIE
,$_POST
,$_GET
более или (если я не ошибаюсь)$_ENV
.for PHP<5.4 with register_globals=On
. Но я добавлю это для справки.for PHP<5.4 with register_globals=On
», так как вы должны сосчитать байты вашегоphp.ini
файла, содержащиеregister_globals=On
. Тем не менее, PHP4.1 является особым случаем. Это последняя версия, гдеregister_globals=On
задано значение по умолчанию, и большинство функций доступны с PHP4.1 и выше. Эта версия также позволяет использовать другие функции, какereg
иsplit
без предупреждений.J, 3 байта
Использование:
Вернется
1
. И эквивалентно псевдокоду10 MOD 2 EQ 0
Обратите внимание, что это очень похоже на ответ APL , потому что J вдохновлен APL
источник
PowerShell v2 +, 20 байт
Принимает входные данные как два аргумента командной строки
$args
,-join
объединяет их в строку с%
разделителем и передает ихiex
(сокращение отInvoke-Expression
и аналогичноeval
). В результате либо0
или не равен нулю, поэтому мы возьмем булеву не!
из этого результата, что означает либо$TRUE
или$FALSE
, отличное (ненулевые целые числа в PowerShell верны). Это логическое значение остается в конвейере, а вывод неявным.Альтернативные версии, также 20 байтов каждая
Та же концепция, только немного разные способы структурирования ввода. Спасибо @DarthTwon за предоставление этого.
Примеры
источник
param($a,$b)!($a%$b)
и!($args[0]%$args[1])
Haskell,
1311 байтЭто определяет новую функцию
(!) :: Integral n => n -> n -> Bool
. Посколькуmod n m
возвращает только положительные числа, еслиn
иm
являются положительными, мы можем сохранить байт, используя1>
вместо0==
.Использование:
источник
((1>).).mod
.