Mathematica, 42 Bytes
0!=##&@@d&&##&@@((d=IntegerDigits@#)∣#)&
Ich denke, 0!=##&@@d&&##&@@
Mathematica hat eine neue Lesbarkeitsschwäche ...
Erläuterung
Einige der hier verwendeten syntaktischen Grundzucker:
&
hat eine sehr niedrige Priorität und verwandelt alles, was davon übrig bleibt, in eine unbenannte Funktion.
&&
ist nur der And
Betreiber.
#
ist das Argument der nächsten umschließenden unbenannten Funktion.
##
ist eine Folge aller Argumente der Funktion.
@
ist die Präfixnotation für Funktionsaufrufe, dh f@x == f[x]
.
@@
ist Apply
, das die Elemente einer Liste als einzelne Argumente an eine Funktion übergibt, dh f@@{a,b,c} == f[a,b,c]
.
Damit aus dem Weg ...
(d=IntegerDigits@#)
Dies sollte ziemlich selbsterklärend sein: Dies gibt uns eine Liste der Dezimalstellen der Eingabe und speichert das Ergebnis in d
.
(...∣#)
Dies testet die Eingabe auf Teilbarkeit durch jede ihrer Ziffern (weil der Teilbarkeitsoperator ist Listable
). Dies gibt uns eine Liste von True
s und False
s.
...&@@...
Wir wenden die Funktion auf der linken Seite auf die Liste der Booleschen Werte an, sodass jeder Boolesche Wert ein separates Argument ist.
...&@@d
Wir wenden eine andere Funktion an d
, so dass die einzelnen Ziffern als separate Argumente angegeben werden. Die Funktion ist 0!=##&
, dh . Es prüft, ob alle Ziffern verschieden sind (und ob sie verschieden sind von, aber das ist durch die Herausforderung gegeben, und wenn es nicht so wäre, wäre es sowieso kein Divisor). ist wirklich nur ein 1-Byte-Sparer bei der Verwendung von sich selbst, und es funktioniert, weil es ein 1-Byte-Element ( ) gibt, von dem wir wissen, dass es nicht vorhanden ist. Das erste, was überprüft, dass die Ziffern eindeutig sind. Nennen wir dieses ErgebnisUnequal[0, d1, d2, ...]
0
0!=##&
Unequal
0
U
...&&##
Auch dies ist wirklich nur eine Abkürzung für And[U, ##]
. Da ##
es sich um eine Sequenz handelt, werden die einzelnen Booleschen Werte aus der anfänglichen Teilbarkeitsprüfung in die erweitert And
, sodass überprüft wird, ob beide Ziffern eindeutig sind und jede Ziffer die Eingabe teilt.And[U, d1∣n, d2∣n, ...]