Integer positif dapat direpresentasikan dalam basis integer 1 <= b < inf
.
Ketika dikonversi ke dasar bahwa ia memiliki beberapa jumlah digit yang berbeda.
Setiap bilangan bulat positif di pangkalan 1
memiliki1
angka yang berbeda.
Kebanyakan bilangan bulat positif dalam basis 2
memiliki 2
angka yang berbeda, kecuali yang berbentuk angka 2^n - 1
, yang hanya dimiliki oleh angka1
.
Jadi bilangan bulat positif pertama yang dapat diwakili dalam basis bilangan bulat dengan 1
digit unik adalah 1
dan yang pertama yang dapat diwakili dengan 2
angka yang berbeda adalah 2
.
Kita dapat mengatakan bahwa itu 1
adalah bilangan bulat pertama dengan keanekaragaman digital 1
dan 2
adalah bilangan bulat pertama dengan keragaman digital 2
.
Tantangan:
Diberikan integer positif n
mengembalikan integer positif pertama (dalam basis sepuluh *) yang memiliki keragaman digital n
.
* jika bahasa Anda hanya mendukung basis tertentu (mis. unary atau binary) maka Anda dapat menampilkan basis itu.
Algoritme Anda harus bekerja secara teori untuk input bilangan bulat positif: mungkin gagal karena ketepatan bilangan bulat bahasa Anda terlalu kecil untuk output; tapi mungkin tidak gagal karena konversi basis hanya ditentukan hingga batas tertentu.
Uji kasus
input output
1 1
2 2
3 11
4 75
5 694
6 8345
7 123717
17 49030176097150555672
20 5271200265927977839335179
35 31553934355853606735562426636407089783813301667210139
63 3625251781415299613726919161860178255907794200133329465833974783321623703779312895623049180230543882191649073441
257 87678437238928144977867204156371666030574491195943247606217411725999221158137320290311206746021269051905957869964398955543865645836750532964676103309118517901711628268617642190891105089936701834562621017362909185346834491214407969530898724148629372941508591337423558645926764610261822387781382563338079572769909101879401794746607730261119588219922573912353523976018472514396317057486257150092160745928604277707892487794747938484196105308022626085969393774316283689089561353458798878282422725100360693093282006215082783023264045094700028196975508236300153490495688610733745982183150355962887110565055971546946484175232
Ini adalah kode-golf , solusi terpendek dalam byte yang menang.
Oei: A049363 - juga terkecil jumlah Pandigital dalam basis n.
sumber
Python, 40 bytes
Uji di Ideone .
Bagaimana itu bekerja
Angka dengan n digit berbeda harus dengan jelas dinyatakan dalam basis b ≥ n . Karena tujuan kami adalah meminimalkan angka, b juga harus sekecil mungkin, jadi b = n adalah pilihan logis.
Itu membuat kita mengatur angka 0,…, n-1 untuk membuat angka sekecil mungkin, yang berarti digit paling signifikan harus dijaga sekecil mungkin. Karena digit pertama tidak boleh 0 dalam representasi kanonik, angka terkecil adalah
(1) (0) (2) ... (n-2) (n-1) n = n n-1 + 2n n-3 + ... + (n-2) n + (n-1) , yang dihitung f secara rekursif.
sumber
Python 2,
5446 byteIni sangat sangat sangat ! cepat, solusi berulang.
Cobalah online
Tidak ada rekursi, jadi ini berfungsi untuk input besar. Inilah hasil dari
n = 17000
(membutuhkan 1-2 detik):http://pastebin.com/UZjgvUSW
sumber
lambda n:n**~-n+sum(i*n**(n+~i)for i in range(2,n))
n=r=input();k=2\nwhile k<n:r=r*n+k;k+=1\nprint r
JavaScript (ES6), 29 byte
sumber
J, 9 byte
Berdasarkan metode @Dennis .
Pemakaian
Penjelasan
Ada solusi alternatif berdasarkan penggunaan indeks permutasi. Mengingat masukan n , membuat daftar angka
[0, 1, ..., n]
, dan menemukan permutasi menggunakan indeks n !, Dan mengkonversi bahwa sebagai daftar basis- n digit. Solusi yang sesuai dalam J selama 12 bytesumber
[1,0,2,3,...,n-1]
?Ruby,
373534 byteJawaban untuk yang diberikan
n
mengambil bentuk10234...(n-1)
di dasarn
. Menggunakann=10
sebagai contoh:Mulai dengan
n
:10
Kalikan dengan
n
dan tambahkan 2:102
Mutliply oleh
n
dan tambahkan 3:1023
Dan seterusnya.
EDIT: Tampaknya lebih pendek untuk menggunakan peta.
EDIT 2: Terima kasih atas tipnya, m-chrzan!
sumber
(2...n)
akan lebih pendek satu byte.CJam , 9 byte
Cobalah online!
Penjelasan
sumber
CJam (9 byte)
Demo online
Pembedahan
Jelas angka terkecil dengan keragaman digital
n
ditemukan oleh konversi[1 0 2 3 ... n-1]
basis di basisn
. Namun, perhatikan bahwa built-in konversi basis tidak memerlukan digit berada dalam kisaran0 .. n-1
.Perhatikan bahwa dalam kasus khusus
n = 1
kita mendapatkan1 [0] 1 1 tb
memberikan1 [0 1] b
yang1
.sumber
Haskell, 31 byte
Mengubah daftar
[n,2,3,...,n-1]
menjadi pangkalann
menggunakan metode Horner melalui pelipatan. Versi yang kurang golf ini diberikan pada halaman OEIS .Terima kasih kepada nimi selama 3 byte!
sumber
f
?) Untuk menjadi solusi golf yang valid? (hanya sajaf
tidak direferensikan nanti dalam kode)\n->fold1...
, yang hanya selama penamaan itu. Anda dapat menulis fungsi bebas titik di mana variabel input tidak dinamai dengan menggabungkan subfungsi, tetapi itu akan mengerikan di sini dengan tiga referensin
.foldl
dan mulai dengann
:f n=foldl((+).(*n))n[2..n-1]
05AB1E , 9 byte
Cobalah online!
Penjelasan
n = 4
digunakan misalnya.sumber
C ++ -
18155Akan memposting solusi keren itu menggunakan
<numeric>
:dan kemudian saya menyadari bahwa ini jauh lebih mudah:
sumber
Perl 6 ,
34 3130 byteDiterjemahkan dari contoh Haskell di halaman OEIS .
[&(…)]
berubah…
menjadi operator infiks di tempat[…]
atas mengubah op infix menjadi lipatan (kiri atau kanan tergantung pada asosiasi operator)Diperluas:
Pemakaian:
sumber
Brain-Flak ,
8476 byteTerima kasih kepada Wheat Wizard untuk bermain golf 8 byte
Cobalah online!
Penjelasan
Program mendorong nilai dari
0
ken-1
ke tumpukan menggantikan bagian atas0
dan1
dengan1
dan0
. Kemudian itu mengalikan bagian atas tumpukan dengann
dan menambahkan nilai di bawahnya sampai hanya ada satu nilai yang tersisa di tumpukan.Pada dasarnya ia menemukan angka untuk angka terkecil di pangkalan
n
yang berisin
angka berbeda (untukn
> 1 selalu dalam bentuk1023...(n-1)
). Ini kemudian menghitung angka yang diberikan angka dan alas.Kode Beranotasi
sumber
{}{}(()(<()>))([][()])
dengan(<{}{}>)([(())][])
untuk menyimpan empat byte(<{}{}>)((()))
untuk menyimpan empat byte lagiJulia, 26 byte
Cobalah online!
sumber
ShapeScript , 25 byte
Input dalam unary, output dalam desimal. Cobalah online!
sumber
PHP, 78 Bytes
Versi Online
60 Bytes hanya berfungsi hingga n = 16 dengan ketepatan dalam testcases
Untuk n = 144 INF
n = 145 NAN
sumber
k, 12 byte
Didasarkan atas jawaban Dennis .
sumber
JavaScript (ES6), 39 byte
Tidak digunakan
=>
sumber