Mathematica, 42 байта
0!=##&@@d&&##&@@((d=IntegerDigits@#)∣#)&
Я думаю, что 0!=##&@@d&&##&@@
это новый низкий уровень читаемости для Mathematica ...
объяснение
Некоторые из основных синтаксических сахара, используемых здесь:
&
имеет очень низкий приоритет и превращает все, что от него осталось, в неназванную функцию.
&&
это просто And
оператор.
#
является аргументом ближайшей включающей безымянной функции.
##
это последовательность всех аргументов функции.
@
является префикс для обозначения вызовов функций, то есть f@x == f[x]
.
@@
это Apply
, который передает элементы списка в виде отдельных аргументов функции, то есть f@@{a,b,c} == f[a,b,c]
.
С этим из пути ...
(d=IntegerDigits@#)
Это должно быть достаточно понятным: это дает нам список десятичных цифр ввода и сохраняет результат в d
.
(...∣#)
Это проверяет входные данные на делимость каждой из его цифр (потому что оператор делимости есть Listable
). Это дает нам список True
с и False
с.
...&@@...
Мы применяем функцию слева к списку логических значений, так что каждый логический аргумент является отдельным аргументом.
...&@@d
Мы применяем еще одну функцию d
, чтобы отдельные цифры задавались как отдельные аргументы. Функция 0!=##&
, то есть . Он проверяет, что все цифры различны (и что они отличны от, но это дается заданием, и если это не так, он не будет делителем в любом случае). на самом деле просто 1-байтовая заставка при использовании себя, и это работает, потому что есть 1-байтовый элемент ( ), которого мы знаем, что нет. Итак, это первое, что проверяет, что цифры уникальны. Давайте назовем этот результатUnequal[0, d1, d2, ...]
0
0!=##&
Unequal
0
U
...&&##
Опять же, это действительно просто сокращение And[U, ##]
. С ##
Будучи последовательности, отдельные булевы от первоначальной проверки делимости подставляются в And
, таким образом мы получаем , которая проверяет , что обе цифры являются уникальными , и каждая цифра делит вход.And[U, d1∣n, d2∣n, ...]