Математика, 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). Це дає нам список Trues і Falses.
...&@@...
Застосовуємо функцію з лівої сторони до списку булевих, так що кожен булевий аргумент є окремим аргументом.
...&@@d
Ми застосовуємо іншу функцію до d, так що окремі цифри подаються як окремі аргументи. Функція є 0!=##&, тобто . Він перевіряє, чи всі цифри є чіткими (і що вони відрізняються від, але це задано викликом, і якби це не було, то все одно не було б дільником). насправді просто 1-байтова заставка на самому використанні , і вона працює, тому що є 1-байтовий елемент ( ), про який ми знаємо, що немає. Тож це перше, що перевіряє, чи є цифри унікальними. Назвемо цей результатUnequal[0, d1, d2, ...]00!=##&Unequal0U
...&&##
Знову ж таки, це справді просто скорочення And[U, ##]. З ##Будучи послідовності, окремі булеві від первісної перевірки подільності підставляються в And, таким чином ми отримуємо , яка перевіряє , що обидві цифри є унікальними , і кожна цифра ділить вхід.And[U, d1∣n, d2∣n, ...]