Mathematica, 42 byte
0!=##&@@d&&##&@@((d=IntegerDigits@#)∣#)&
Saya pikir 0!=##&@@d&&##&@@
ini adalah rendahnya keterbacaan baru untuk ...
Penjelasan
Beberapa gula sintaksis dasar yang digunakan di sini:
&
memiliki prioritas yang sangat rendah dan mengubah semuanya yang tersisa menjadi fungsi yang tidak disebutkan namanya.
&&
hanya And
operator.
#
adalah argumen fungsi terlampir terdekat terlampir.
##
adalah urutan semua argumen fungsi.
@
adalah notasi awalan untuk panggilan fungsi, yaitu f@x == f[x]
.
@@
adalah Apply
, yang meneruskan elemen daftar sebagai argumen individu ke suatu fungsi, yaitu f@@{a,b,c} == f[a,b,c]
.
Dengan itu keluar dari jalan ...
(d=IntegerDigits@#)
Ini harus cukup jelas: ini memberi kita daftar angka desimal input dan menyimpan hasilnya d
.
(...∣#)
Ini menguji input untuk dapat dibagi oleh masing-masing digit (karena operator dibagi adalah Listable
). Ini memberi kita daftar True
s dan False
s.
...&@@...
Kami menerapkan fungsi di sisi kiri ke daftar boolean, sehingga setiap boolean adalah argumen yang terpisah.
...&@@d
Kami menerapkan fungsi lain d
, sehingga digit individu diberikan sebagai argumen terpisah. Fungsinya 0!=##&
, yaitu . Itu memeriksa bahwa semua digit berbeda (dan bahwa mereka berbeda dari tetapi yang diberikan oleh tantangan, dan jika tidak, itu tidak akan menjadi pembagi pula). benar-benar hanya penghemat 1-byte untuk menggunakan itu sendiri, dan itu berfungsi karena ada elemen 1-byte ( ) yang kita tahu tidak ada. Jadi hal pertama ini memeriksa bahwa angka-angka itu unik. Mari kita sebut hasil iniUnequal[0, d1, d2, ...]
0
0!=##&
Unequal
0
U
...&&##
Sekali lagi, ini benar-benar hanya singkatan And[U, ##]
. Dengan ##
menjadi urutan, boolean individu dari pemeriksaan keterbagian awal diperluas ke And
, jadi kami mendapatkan pemeriksaan yang mana kedua digit tersebut unik dan setiap digit membagi input.And[U, d1∣n, d2∣n, ...]