Ваша задача - определить, легко ли умножить два числа . Это означает, что их умножение на длинные базовые 10 не имеет никакого переноса (перегруппировки) между местными значениями, рассматривая как этапы умножения, так и этап сложения. Это происходит, когда каждая умножаемая пара цифр дает 9 или меньше, а сумма каждого столбца равна 9 или меньше.
Например, 331
и 1021
их легко умножить:
331
x 1021
------
+ 331
662
0
331
------
337951
И то же самое верно (как всегда), если мы умножаем в другом порядке:
1021
x 331
------
+ 1021
3063
3063
------
337951
Но, 431
и 1021
их нелегко умножить, с переносами, происходящими между указанными столбцами:
431
x 1021
------
+ 431
862
0
431
------
440051
^^^
Кроме того , 12
и 16
не легко размножаться , так как перенос происходит , когда не умножая 12 * 6
получить 72
, даже если не несет произойдет в стадии добавления.
12
x 16
----
+ 72
12
----
192
Входные данные: два натуральных числа или их строковые представления. Вы можете предположить, что они не будут переполнять целочисленный тип вашего языка, равно как и их продукт.
Вывод: одно непротиворечивое значение, если их легко умножить, и другое непротиворечивое значение, если нет.
Тестовые случаи: первые 5 легко умножить, последние 5 нет.
331 1021
1021 331
101 99
333 11111
243 201
431 1021
12 16
3 4
3333 1111
310 13
[(331, 1021), (1021, 331), (101, 99), (333, 11111), (243, 201)]
[(431, 1021), (12, 16), (3, 4), (3333, 1111), (310, 13)]
Leaderboard:
var QUESTION_ID=151130,OVERRIDE_USER=20260;function answersUrl(e){return"https://api.stackexchange.com/2.2/questions/151130/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={},r=1,a=null,n=1;e.forEach(function(e){e.size!=a&&(n=r),a=e.size,++r;var t=jQuery("#answer-template").html();t=t.replace("{{PLACE}}",n+".").replace("{{NAME}}",e.user).replace("{{LANGUAGE}}",e.language).replace("{{SIZE}}",e.size).replace("{{LINK}}",e.link),t=jQuery(t),jQuery("#answers").append(t);var o=e.language;/<a/.test(o)&&(o=jQuery(o).text()),s[o]=s[o]||{lang:e.language,user:e.user,size:e.size,link:e.link}});var t=[];for(var o in s)s.hasOwnProperty(o)&&t.push(s[o]);t.sort(function(e,s){return e.lang>s.lang?1:e.lang<s.lang?-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}#answer-list,#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=83c949450c8b"> <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><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="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>
Ответы:
Желе , 7 байт
Попробуйте онлайн!
Использует свертку (которую я внес в желе: D)
Как это работает
источник
<⁵Ạ
для вывода без логического НЕ выполняется.JavaScript (ES6), 67 байт
Принимает ввод как 2 строки в синтаксисе карри
(a)(b)
. Возвращаетfalse
легко илиtrue
не легко.Контрольные примеры
Показать фрагмент кода
Чередующийся версия (ошибочная),
645552 байтаСохранено 3 байта путем взятия строк, как предложено @Shaggy
Как указывалось @LeakyNun, этот метод завершится с ошибкой на некоторых больших конкретных целых числах
Принимает ввод как 2 строки в синтаксисе карри
(a)(b)
. Возвращаетtrue
легко илиfalse
не легко.Контрольные примеры
Показать фрагмент кода
Как?
Идея здесь состоит в том, чтобы явно выставить переносы, вставляя нули перед каждой цифрой каждого фактора.
Примеры:
331 x 1021 становится 30301 x 1000201 , что дает 30307090501 вместо 337951 . Добавляя ведущий ноль к результату и группируя все цифры по 2, это можно записать как 03 03 07 09 05 01 . Все группы меньше 10 , что означает, что в стандартном умножении не было никакого переноса.
431 x 1021 становится 40301 x 1000201 , что дает 40309100501 и может быть записано как 04 03 09 10 05 01 . На этот раз у нас есть 10, который показывает перенос в стандартном умножении.
источник
108
посередине запутался ваш алгоритм)Алиса , 30 байт
Попробуйте онлайн!
Выходы
1
для легких и0
для тяжелых.Числа легко умножаются тогда и только тогда, когда цифровая сумма произведений равна произведению цифровых сумм.
источник
MATL , 10 байт
Выходы
0
легкие,1
тяжелые.Попробуйте онлайн!Или проверьте все тестовые случаи .
объяснение
источник
R ,
13511010986 байтПопробуйте онлайн!
Принимает ввод как строки.Это некрасиво, но это работает ™.Теперь в нем используется метод свертки, как в ответе Лики Нун , поэтому он принимает входные данные в виде целых чисел и возвращает
TRUE
для сложного умножения чисел иFALSE
простые для умножения.В прошлом у меня всегда были проблемы с переносом методов свертки, но сегодня я наконец прочитал документацию :
Что просто глупо. Таким образом, извлечение цифр меняется на обратное
n
, и оно превращается в порт ответа Лики Нун.источник
Python 2 , 88 байт
Принимает два целых числа в качестве входных данных и возвращает
False
(легко умножить) илиTrue
(нет).Попробуйте онлайн! (слишком медленно для одного из тестовых случаев)
источник
len(`n+m`)
на самом деле потерпит неудачу на 40, 30 .len(`n+m`)+1
?len(`n`+`m`)
должен сделать хотя.JavaScript (Node.js) ,
43413736 байтСпасибо @ Dennis за идею использования интерполяции строк в этом ответе и сэкономьте 4 байта!
Спасибо @ ÖrjanJohansen за -1!
Попробуйте онлайн!
Конечно, когда база назначения меньше, чем исходная база (как в моем ответе на желе, база равна 2),
<
необходимо щелкнуть.источник
Wolfram Language (Mathematica) ,
75666556 байтПопробуйте онлайн!
Получение 2-х строковых входов
Объяснение:
-9 для изменения использования строки в качестве ввода
-1 за использование инфиксного оператора
-9 Спасибо @MartinEnder за
Max
функциюисточник
Python 2 ,
158135123113 байтов-12 байтов благодаря Leaky Nun -10 байтов благодаря ovs
Попробуйте онлайн! или попробуйте все тестовые случаи
источник
all(d[k]<10for k in d)
работает или это только Python 3?Юлия 0,6 , 30 байт
Попробуйте онлайн!
Ввод - это набор чисел, вывод -
true
для умножения трудноfalse
простых ..
является поэлементным применением функции....
расширяет кортеж (из списков целых чисел) до двух отдельных входовconv
функции.источник
Python 3 ,
5835 134039 байтПохоже, у меня была эта идея на два часа позже .
Спасибо @ ÖrjanJohansen за отыгрывание 1 байта!
Попробуйте онлайн!
источник
SNOBOL4 (CSNOBOL4) ,
268264247246243131 байтПопробуйте онлайн!
Порты подход по нитродону . Я думаю, что это первый раз, когда я определяю функцию в SNOBOL
D
для суммы цифр.старая версия, 243 байта:
Попробуйте онлайн!
Ввод на STDIN, разделенный символами новой строки, вывод на STDOUT: одна новая строка для простого умножения и отсутствие вывода для простого умножения.
Это не принесет никаких наград, но представляет другой подход (ну, на самом деле, это наивный подход). Я не думаю, что смогу написать это в cubix, но SNOBOL достаточно сложен, чтобы работать с ним как есть.
Так как он принимает ввод как строку, он будет работать для любого ввода, содержащего менее 512 цифр каждый; Я не уверен на 100%, насколько большойARRAY
может быть СНОБОЛ.В этой версии SNOBOL INPUT буферизуется с максимальной шириной 1024 символа; все остальные персонажи затем теряются. Похоже, что массив может быть довольно большим; более 2048 клеток необходимо.
источник
Древесный уголь , 38 байт
Попробуйте онлайн! Ссылка на подробную версию кода. Вывод,
-
когда числа легко умножить. Объяснение:Инициализируйте
z
достаточно большой (сумма длин входов) массив нулей.Цикл по показателям входов
q
иh
.Выполните один шаг длинного умножения.
Проверьте для выполнения.
источник
Пари / ГП , 52 байта
Попробуйте онлайн!
источник
Haskell,
8281 байтЧисла взяты как строки. Возвращает,
False
если числа легко умножить и вTrue
противном случае.Попробуйте онлайн!
Я думаю, что это достаточно отличается от ответа @ Laikoni . Как это работает:
источник
Хаскелл ,
4544 байтаРедактировать:
==
на<
.Я подумал об этом, прежде чем посмотреть на другие ответы, а затем обнаружил, что Алиса использовала ту же основную идею. Публикация в любом случае, так как она короче, чем другие ответы на Haskell.
?
принимает два целых числа и возвращаетBool
. Использовать как331?1021
.False
означает, что умножение легко.Попробуйте онлайн!
s
это функция, которая вычисляет сумму цифр целого числа. (read.pure
преобразует однозначный символ в целое число.)источник
Рубин , 69 байт
Попробуйте онлайн!
источник
Haskell , 123 байта
Попробуйте онлайн! Пример использования:
"331" % "1021"
доходностьTrue
.источник
Perl 5 , 100 + 2 (
-F
) = 102 байтаПопробуйте онлайн!
выводит false для простого, true для непростого.
источник
Желе , 8 байт
Попробуйте онлайн!
Порт моего Javascript ответа . Не короче существующего желе ответ, потому что Jelly имеет мощную встроенную свертку.
Принять ввод как список из двух чисел. Возвращается
1
легко0
не легко.Объяснение:
источник
C (GCC) , 104 байта
Обычно делайте умножение «вручную» в r [] и устанавливайте возвращаемое значение, если любой столбец становится больше 9, поскольку это будет означать, что произошел перенос.
Удивительно, но это было короче, чем моя первая попытка, в которой в качестве аргументов использовались строки.
Попробуйте онлайн!
источник