Tantangan
Diberikan bilangan bulat, n
sebagai input di mana 36 >= n >= 2
, menampilkan berapa banyak nomor Lynch-Bell yang ada di pangkalan n
.
Output harus dalam basis 10.
Nomor Lynch-Bell
Angka adalah nomor Lynch-Bell jika:
- Semua digitnya unik (tidak ada pengulangan digit)
- Jumlahnya dapat dibagi dengan masing-masing digit
- Ini tidak mengandung nol sebagai salah satu digitnya
Karena, semua digit harus unik, dan Anda memiliki satu set nomor digit tunggal di setiap basis, ada sejumlah terbatas nomor Lynch-Bell.
Sebagai contoh, dalam basis 2 hanya ada satu nomor Lynch-Bell 1
, karena semua angka lainnya dapat mengulangi angka atau mengandung angka 0.
Contohnya
Input > Output
2 > 1
3 > 2
4 > 6
5 > 10
6 > 10
7 > 75
8 > 144
9 > 487
10 > 548
Mathematica Online kehabisan memori di atas basis 10. Anda dapat menggunakan kode berikut untuk menghasilkan sendiri:
Do[Print[i," > ",Count[Join@@Permutations/@Rest@Subsets@Range[#-1],x_/;And@@(x\[Divides]FromDigits[x,#])]&[i]],{i,10,36,1}]
Kemenangan
Kode terpendek dalam byte menang.
code-golf
number
base-conversion
Peluruhan Beta
sumber
sumber
>10
?f(36)
. Membuat tantangan kode tercepat berdasarkan ini mungkin akan menarik.Jawaban:
Jelly , 13 byte
Cobalah online!
Lain O (n n ) solusi.
Penjelasan
sumber
ṖŒPḊŒ!€Ẏ⁼g¥"ḅ¥³S
dan lebih cepatJelly , 15 byte
Cobalah online!
Kompleksitas .
O(nn)
sumber
O(N^N)
solusi yang tidak hanya dapat diterima, tetapi bagus.O(N↑↑N)
O(N^(N+1))
karena memeriksa validitas dari setiap nomor yang dihasilkanO(N)
? (walaupun saya tidak mengerti Jelly)N+1
ada diO(N)
) tidak berartiN^(N+1)
ada diO(N^N)
.Java,
222212190 byte-10 byte terima kasih kepada Herman
-22 byte terima kasih kepada Kevin
Tidak Disatukan:
Cobalah online!
Sangat lambat untuk jumlah besar.
sumber
a->{int c=0,i=1;A:for(;i<Math.pow(a,a);i++){java.util.Set<Character>g=new java.util.HashSet<>();for(char b:Long.toString(i,a).toCharArray())if(!g.add(b)|b<49||i%Long.parseLong(b+"",a)>0)continue A;c++;}return c;}
A:
dancontinue A;
13 byte sementara{--c;break;}
12. Apakah itu memperkenalkan bug yang tidak saya lihat?i%a
dani/=a
pada setiap loop. Anda dapat menghindari set dengan menggunakanint[]
dan mengeceknyax[b]++<2
java.util.Set<Character>g=new java.util.HashSet<>();
bisaimport java.util.*;
+Set g=new HashSet();
;Long.toString
bisaa.toString
; danLong.parseLong
bisaa.parseInt
.Perl 6 ,
868477 byte-2 byte terima kasih kepada Ramillies
Cobalah online!
Berfungsi untuk n = 8 pada TIO.
sumber
.all
alih - alihall $_
.Sebenarnya , 24 byte
Cobalah online!
Penjelasan
Program ini terdiri dari dua bagian utama: generasi permutasi, dan tes Lynch-Bell. Jadi, penjelasan ini akan melihat masing-masing bagian secara terpisah, untuk kejelasan yang lebih besar.
Menghasilkan Permutasi
Input:
n
(bilangan bulat di[2, 36]
)Output: semua permutasi parsial dan total
[1, n-1]
(urutan yang berisi nilai-nilai dari[1, n-1]
tanpa pengulangan yang panjangnya[1, n-1]
)Tes Lynch-Bell
Input: daftar
n
bilangan bulat basis , direpresentasikan sebagai daftar basis-n
angkaOutput: jumlah nomor Lynch-Bell di pangkalan
n
sumber
Mathematica,
827976 bytesumber
[<parameter>]
setelah itu. Denganparameter
menjadi nomor.05AB1E , 22 byte
Cobalah online!
O_O
juga wajah saya ketika ini akhirnya berhasil.<ÝIBJ0Kæ¦Ù€œ˜
lebih cepat daripada cara yang saya gunakan untuk menghasilkan angka dalam jawaban aktual tetapi secara acak berhenti bekerja untuk apa pun yang lebih besar dari 7 (tanpa alasan yang jelas?)Penjelasan
sumber
ε0KÙ}
dapat0м€Ù
menghemat satu byte.Perl 5,
8076 byte (75 +-p
)Menyalahgunakan
$;
untuk kesenangan dan keuntungan. Waktu kehabisan input> 8.EDIT: -4 bytes dengan menggabungkan dua loop.
sumber
Ruby ,
8065 byteCobalah online!
Berkat GB untuk -15 byte.
sumber
Japt
-x
,2519 byte-6 byte terima kasih kepada Shaggy
Cobalah online!
sumber
-x
bendera.Python 3 ,
204174 byteCobalah online!
Untuk setiap permutasi dari setiap elemen rentang set daya (1, n) (tanpa nol, unik), konversi ke string numerik ke basis n. Jumlahkan semua yang dapat dibagi oleh setiap digit, kurangi 1 karena powerset menghasilkan set kosong.
-30 byte terima kasih kepada @ovs!
sumber
Haskell , 117 byte
Cobalah online! Bekerja pada TIO hingga
n=7
sebelum waktu habis.sumber
Perl 5 , 108 + 1 (
-p
) = 109 byteCobalah online!
Itu babi. Tidak yakin apakah itu akan melakukan lebih dari basis 8 pada TIO tanpa batas waktu.
sumber
C # (Visual C # Interactive Compiler) , 144 byte
Telusuri semua angka dari 0 hingga
ulong.MaxValue
, dan pilih yang merupakan nomor Lynch-Bell di pangkalan yang ditentukan. Dibutuhkan selamanya untuk menjalankan, bahkan untuk 2, meskipun jika Anda mengatur~0UL
bagian dalam loop untuk sesuatu yang lebih kecil, Anda bisa mendapatkan output untuk input hingga 7 dalam satu menit pada TIO.Cobalah online!
sumber