Первоначально Мультипликативный цифровой корень
Вызов
В основном делать то, что говорит название
метод
Учитывая положительное целое число 1 <= N <= 100000000 через один из наших стандартных методов ввода , умножьте каждую цифру вместе, игнорируя нули.
Пример: возьми номер, скажи 361218402
:
3
*6
=18
18
*1
=18
18
*2
=36
36
*1
=36
36
*8
=288
288
*4
=1152
1152
*1
(игнорировать нули или превратить их в единицы) =1152
1152
*2
=2304
Выход для 361218402
IS2304
Тестовые случаи
1 => 1 любая другая цифра> 0 => сама 10 => 1 20 => 2 100 => 1 999 => 729 21333 => 54 17801 => 56 4969279 => 244944 100000000 => 1
Стандартные лазейки запрещены, и это код-гольф , поэтому выигрывает самый короткий байт!
Поздравляю Джо Кингу, который получил награду с его 70-байтовым ответом мозгового штурма!
code-golf
math
arithmetic
integer
FantaC
источник
источник
100000000000
я предлагаю тестовый пример99999999999 => 31381059609
, поскольку он не помещается в 32-разрядное целое число по умолчанию. Возможно, лучше было бы снизить максимальный вывод до 32-битного максимума (2147483647).Ответы:
Пыть , 3 байта
Объяснение:
Попробуйте онлайн!
источник
Haskell , 27 байт
Попробуйте онлайн!
Разрушенный с UniHaskell и
-XUnicodeSyntax
объяснение
Начну с того, что у меня изначально было:
Это бессмысленное выражение, которое оценивает функцию, принимающую строку (или список символов) s (
"301"
) в качестве аргумента. Он отображаетmax 1.read.pure
над S , по существу , принимая каждый знак I , впрыскивая его в список (что делает его строка) (["3", "0", "1"]
), а затем читать его, который вычисляет строку ([3, 0, 1]
) и , наконец , принимать большее из I и 1 ([3, 1, 1]
). Затем он принимаетproduct
полученный список целых чисел (3
).Затем я сыграл в гольф на байт с:
Это работает, потому что
product
эквивалентноfoldr (*) 1
. Вместо сопоставления и свертывания я объединил их, сворачивая их,(*).max 1.read.pure
получая каждую ненулевую цифру и умножая ее на аккумулятор.источник
Python 2 , 34 байта
Попробуйте онлайн!
источник
Желе , 4 байта
Попробуйте онлайн! или посмотрите набор тестов
Как это работает
источник
R , 40 байт
Попробуйте онлайн!
Поскольку входные данные гарантированно содержат не более 12 цифр, это должно работать хорошо. Вычисляет цифры как
x
(включая ведущие нули), затем заменяет нули на1
и вычисляет произведение.источник
C (gcc) , 39 байт
Нужно компилировать без оптимизации (это настройка по умолчанию для gcc, в любом случае).
Попробуйте онлайн!
источник
k=k;
внесениеk
в регистр возврата случайно - просто зло. Вы, вероятно, должны добавить, что это работает только без оптимизаций, возможно, только на x86 / x64. +1.O0
) не используется по умолчанию для gcc, поэтому нет необходимости явно использовать этот флаг. Я думаю, я добавлю упоминание об этом в любом случае.Brain-Flak ,
747270 байт-2 спасибо Nitrodon за предложение получить отрицание числа, так что вам нужно только увеличивать, а не уменьшать позже
Попробуйте онлайн!
Там может быть несколько способов сделать это дальше, например,
повторить умножение, чтобы избежать необходимости инициализировать итоговое значение 1.(-2 байта)Как это работает:
источник
05AB1E , 4 байта
Попробуйте онлайн!
объяснение
источник
J ,
171413 байт-4 байта любезно предоставлены @GalenIvanov
Попробуйте онлайн!
Возможно, можно улучшить некоторые из них. Редактировать: и так было.
объяснение
&.
-ундер - изящное наречие, которое применяет глагол справа, затем глагол слева, затем обратный глагол справа. Также технически конвертируем обратно в числа, используя eval (".
-do).источник
+0=]
для*#]
Попробовать онлайн[:*/0-.~,.&.":
для 14 байтов. Попробуйте онлайн(+-.@*)
, думаю, я склонен добавить. Я пытался использовать'0'-.~
допущение ввода строки, не зная, почему мне не пришло в голову сделать это с разделенными цифрами. Благодарность!1>.
делает работу0-.~
за байт меньше.[:*/1>.,.&.":
Попытайся!Python 2 , 43 байта
Попробуйте онлайн!
источник
JavaScript (ES6), 28 байт
Предназначен для 32-битных целых чисел.
Контрольные примеры
Показать фрагмент кода
источник
Bash + coreutils + sed + bc,
272423 байтаПопробуйте онлайн!
источник
Брахилог , 5 байт
Попробуйте онлайн!
объяснение
Это работает, потому что
⊇
объединяет большие подмножества в малые, поэтому первое, что приведет к ненулевому произведению, - это когда все нули исключены и ничего больше.источник
Perl 5 , 23 + 1 (
-p
) = 24 байтаПопробуйте онлайн!
источник
Java 8,
55545351 байтПорт @Dennis 'Python 2 ответа .
-1 байт благодаря @RiaD .
Попробуй это здесь.
5554 байтов версия:Попробуйте онлайн.
источник
long f(long n){return n>0?(n%10>0?n%10:1)*f(n/10):1;}
Юлия 0,6, 26 байт
Пример использования:
Попробуйте онлайн!
источник
JavaScript (Node.js) , 30 байт
Попробуйте онлайн!
Принимает строку в качестве входных данных, обрабатывает ее как массив и путем деструктуризации массива отделяет первый элемент
[a,...b]
.+a||1
возвращает цифру, соответствующуюa
символу. Я думаю, что отдых самоочевиден ..источник
Октава , 21 байт
Спасибо @Luis Mendo за сохранение байта и спасибо @alephalpha за сохранение другого байта!
Принимает ввод в виде строки цифр.
Попробуйте онлайн!
30 байтов:
Принимает ввод как число.
Попробуйте онлайн!
источник
@(n)prod((k=n-48)+~k)
Мозг-Flak , 88 байт
Читаемая версия:
Попробуйте онлайн!
источник
Clojure , 56 байт
Довольно простой. Превращает число в строку, затем вычитает 48 из каждого символа, чтобы превратить их обратно в числа. Затем он заменяет каждый 0 на 1 и применяется
*
к результирующему списку чисел (который сокращается*
по списку). Может принимать число или строковый номер.Попробуйте онлайн!
источник
MATL , 5 байтов
Ввод принимается как строка
Попробуйте это в MATL Online! Или проверьте контрольные примеры в Try It Online!
объяснение
источник
Befunge,
2322 байтаПопробуйте онлайн!
объяснение
источник
JavaScript (Node.js) ,
3633 байтаПростой Javascript (ES6) метод, который принимает входные данные в виде числовой строки, распространяет их в массив, затем уменьшает их путем умножения или возвращает значение, если результат равен 0.
3 байта сохранены благодаря Shaggy
Попробуйте онлайн!
источник
Рубин,
4240353227 байтПредполагается, что нет новых строк в вводе Основные влияния
-2 байта благодаря @GolfWolf
-5 байт благодаря @ Конор О'Брайен
источник
tr
: 32 байта*
чтобы присоединиться?p eval (gets.chars-[?0])*?*
?Java (OpenJDK 8) , 45 байт
Попробуйте онлайн!
источник
C # , 97 байт (первый код гольф)
Не уверен, должен ли я был обернуть это в метод или нет, просто включил это, чтобы быть безопасным
Принимает Int, преобразует его в строку и возвращает кратное каждого из символов, игнорируя 0. Пришлось минус 48 из-за того, что программа использовала значение ascii, поскольку оно считывает его как символ.
источник
var z=y.ToString();
и поместить его прямо вforeach
, например, такforeach(var q in y.ToString())
:; и получить результат можно сохранить большее количество байт, заменяя{if(q!=48){r*=q-48;}}
сr*=(q>48?q:1);
, бреют кронштейны иif
.C # (интерактивный компилятор Visual C #) , 46 байт
Попробуйте онлайн!
источник
Haskell , 36 байт
Тот же счетчик байтов:
Попробуйте онлайн!
источник
Желе ,
6, 5 байтПопробуйте онлайн!
источник
DTịDP
сэкономил бы байт, но есть лучшие способы удалить нули или заменить их чем-то другим.> <> , 19 байт
Попробуйте онлайн!
источник