Mathematica, 42 bajty
0!=##&@@d&&##&@@((d=IntegerDigits@#)∣#)&
Myślę, że 0!=##&@@d&&##&@@jest nowy niski poziom czytelności dla Mathematica ...
Wyjaśnienie
Niektóre z podstawowych stosowanych tutaj cukru syntaktycznego:
& ma bardzo niski priorytet i zamienia wszystko, co z niego zostało, w funkcję bez nazwy.
&&jest tylko Andoperatorem.
# jest argumentem najbliższej obejmującej nienazwaną funkcję.
##jest sekwencją wszystkich argumentów funkcji.
@jest notacją przedrostkową dla wywołań funkcji, tj f@x == f[x].
@@to Apply, który przekazuje elementy listy jako pojedyncze argumenty do funkcji, tj f@@{a,b,c} == f[a,b,c].
Z tym na uboczu ...
(d=IntegerDigits@#)
Powinno to być dość oczywiste: daje nam to listę cyfr dziesiętnych wejścia i zapisuje wynik d.
(...∣#)
Testuje to dane wejściowe pod kątem podzielności według każdej z jego cyfr (ponieważ jest to operator podzielności Listable). To daje nam listę Trues i Falses.
...&@@...
Stosujemy funkcję po lewej stronie do listy wartości logicznych, tak że każda wartość logiczna jest osobnym argumentem.
...&@@d
Stosujemy inną funkcję d, aby poszczególne cyfry podano jako osobne argumenty. Funkcja jest 0!=##&, tj . Sprawdza, czy wszystkie cyfry są odrębne (i że różnią się od nich, ale wynika to z wyzwania, a jeśli nie, to i tak nie byłby dzielnikiem). jest tak naprawdę tylko 1-bajtowym wygaszaczem przy korzystaniu z niego samego i działa, ponieważ istnieje 1-bajtowy element ( ), o którym wiemy, że nie jest obecny. Więc ta pierwsza rzecz sprawdza, czy cyfry są unikalne. Nazwijmy ten wynikUnequal[0, d1, d2, ...]00!=##&Unequal0U
...&&##
Ponownie, jest to naprawdę po prostu skrót And[U, ##]. Przy ##czym sekwencje Poszczególne wartości logiczne od wstępnego sprawdzianu podzielnosci są rozszerzył się na And, więc mamy , która sprawdza, że obie cyfry są wyjątkowe i każda cyfra dzieli wejście.And[U, d1∣n, d2∣n, ...]