Angka pandigital adalah bilangan bulat yang berisi setiap digit dari 0 hingga 9 setidaknya satu kali. 1234567890, 1902837465000000, dan 9023289761326634265 semuanya pandigital. Untuk keperluan tantangan ini, angka-angka seperti 123456789 bukan pandigital, karena angka-angka tersebut tidak mengandung angka 0, walaupun 123456789 = 0123456789.
Sebuah beragam sepasang bilangan bulat adalah sepasang bilangan bulat sehingga adalah Pandigital. disebut eksponen diversifikasi .
Tantangan: Dengan bilangan bulat , temukan eksponen diversifikasi yang sesuai terkecil . Ini adalah kode-golf , sehingga program terpendek dalam byte menang.
(Anda dapat berasumsi bahwa ada eksponen seperti itu, yaitu, program Anda tidak akan diberi input yang tidak valid, seperti kekuatan 10.)
Solusi Anda harus mampu menangani minimal kasus uji yang diberikan, tetapi harus secara teoritis menangani semua input yang valid.
Ini adalah A090493 pada OEIS.
Uji kasus
2 -> 68
3 -> 39
4 -> 34
5 -> 19
6 -> 20
7 -> 18
8 -> 28
9 -> 24
11 -> 23
12 -> 22
13 -> 22
14 -> 21
15 -> 12
16 -> 17
17 -> 14
18 -> 21
19 -> 17
20 -> 51
21 -> 17
22 -> 18
23 -> 14
24 -> 19
25 -> 11
26 -> 18
27 -> 13
28 -> 11
29 -> 12
30 -> 39
31 -> 11
32 -> 14
33 -> 16
34 -> 14
35 -> 19
36 -> 10
1234567890 -> 1
1234567890 -> 1
.123456789
dihitung sebagai pandigital? Itu sama dengan0123456789
, yang pasti pandigital.Jawaban:
Brachylog (v2), 9 byte
Cobalah online!
Ini adalah pengiriman fungsi. TIO Link berisi pembungkus yang membuat fungsi menjadi program lengkap.
Penjelasan
sumber
Python 2 , 44 byte
Input harus panjang, karena
`k`
berperilaku berbeda untuk jangka panjang dan int.Cobalah online!
sumber
Perl 6 , 32 byte
Cobalah online!
Cukup jelas.
Penjelasan
sumber
JavaScript (Node.js) ,
51 4643 byteMengambil input sebagai literal BigInt. Mengembalikan nilai true sebagai ganti 1 .
Cobalah online!
sumber
Ruby , 41 byte
Cobalah online!
sumber
Haskell, 50 byte
Cobalah online!
Jumlah byte yang sama:
sumber
J , 25 byte
Cobalah online!
Kata kerja monadik tunggal. Input harus bilangan bulat dengan presisi yang diperluas (mis
2x
.).Bagaimana itu bekerja
sumber
(]+10>#@=@":@^)^:_*
Tcl , 82 byte
Cobalah online!
sumber
llength
82 byteRacket ,
11096 byte-14 byte, terima kasih kepada UltimateHawk!
Cobalah online!
sumber
(define(f n[b 1])(if(= 10(length(remove-duplicates(string->list(~v(expt n b))))))b(f n(+ b 1))))
Python 3 ,
5247 byteterima kasih kepada @BMO
Cobalah online!
sumber
05AB1E (warisan) ,
109 byteDisimpan 1 byte berkat Tn. Xcoder
Cobalah online!
Penjelasan
sumber
1µINmÙgTQ
- Cobalah online!N
saat itu. Terima kasih!Arang , 19 byte
Cobalah online!Tautan adalah untuk mengucapkan versi kode. Penjelasan:
Dorong berulang kali string kosong ke daftar kosong hingga tidak ada digit yang tidak dapat diisi oleh kekuatan input hingga panjang daftar.
Cetak panjang daftar.
sumber
K (ngn / k) , 76 byte
Cobalah online!
{
}
berfungsi dengan argumenx
|(99#10)\x
kami mewakili angka sebagai daftar terbalik dari 99 digit desimal - lakukan itu pada argumena::
tetapkan ke variabel globala
(k tidak memiliki penutup. kita harusa
global agar kita dapat menggunakannya dalam subfungsi){
}{
}\
sementara fungsi pertama mengembalikan falsey, terus menerapkan fungsi kedua (alias while loop), menjaga hasil antaraa*\:x
masing-masinga
digit dikalikan dengan masing-masingx
digit ("produk luar")99 99#a*\:x,0
menambahkan kolom ekstra 0s dan membentuk kembali lagi menjadi 99x99, ini menggeser baris ke-i dengan item ke kanan, menyisipkan 0s di sebelah kiri (ini berfungsi untuk pengujian, untuk input yang lebih besar, 99x99 dapat menyebabkan meluap)+/
jumlah{+/2 99#,/|0 10\x,0}/
diperbanyak membawa:{
}/
tetap terapkan sampai konvergensi0 10\x
divmod by 10 (sepasang daftar)|0 10\x
moddiv oleh 102 99#,/|0 10\x,0
moddiv oleh 10, dengan bagian "div" bergeser 1 digit ke kanan+/
jumlah{10>#?(+/|\0<|x)#x}
- periksa pandigital (tidak):|x
membalikkanx
0<
digit mana yang bukan nol|\
maxima parsial+/
jumlah - ini menghitung jumlah 0 di awalx
10>
apakah jumlahnya kurang dari 10?#
panjang urutan kekuatan - ini adalah hasilnyasumber
PowerShell , 107 byte
Cobalah online!
Cukup mudah, hanya rasa malu yang perlu kita gunakan di
[bigint]
mana-mana. Kami mengambil input$a
, lalu mengaturfor
loop dengan penginisialisasi$b=1
.Setiap iterasi yang kita tambahkan
$b
setelah memeriksa apakah$a ^ $b
(viapow
) mengirimt
oCharArray
,sort
ed dengan-u
flag nique, kemudian-join
diedit bersama menjadi string-n
atau tidake
sesuai dengan range0..9
juga-join
ed ke dalam string.Itu seteguk. Misalnya, ini akan dibandingkan
7 ^ 5 = 16807 --> "01678"
dengan"0123456789"
, menentukan mereka tidak sama, dan melanjutkan loop.Setelah kami keluar dari loop, kami telah menentukan
$b
input yang sesuai dengan kami, dan biarkan di jalur pipa. Output tersirat.sumber
Java, 108 byte
Cobalah online!
Penjelasan
Brute force, putar a ^ b hingga menemukan string dengan 10 (atau lebih, tapi itu tidak mungkin karena hanya akan ada 0 sampai 9) karakter unik.
BigDecimal
diperlukan baik karenaMath.pow
tidak cukup akurat (gagal pada kasus11
), dan juga karena mengonversi aDouble
ke String secara default menunjukkan notasi ilmiah, yang memecah metode ini untuk menemukan nomor pandigital.sumber
new java.math.BigDecimal(a).pow(++b).toString()
ke(new java.math.BigDecimal(a).pow(++b)+"")
(dan trailing semi-colon tidak harus dihitung untuk fungsi lambda). Cobalah onlinePyth,
108 byteCobalah online di sini .
Disimpan 2 byte berkat FryAmTheEggman, kode sebelumnya
fq;l{j^QT;
sumber
T
operasi daya.Jeli ,
1211 byteCobalah online!
Bagaimana itu bekerja
sumber
Bersih ,
107101 byteCobalah online!
Mengambil input sebagai
Integer
, mengembalikanInt
sumber
Bahasa Wolfram (Mathematica) , 48 byte
Cobalah online!
sumber
Atase , 27 byte
Cobalah online!
Penjelasan
Alternatif
28 byte:
${Generate{Unique@S[x^_]@9}}
29 byte:
${Generate{Unique[S[x^_]]@9}}
30 byte:
${Generate{#Unique[S[x^_]]>9}}
31 byte:
Generate@${{#Unique[S[x^_]]>9}}
32 byte:
${Generate[{#Unique[S[x^_]]>9}]}
33 byte:
${If[#Unique[x^y]>9,y,x&$!-~y]}&0
34 byte:
${If[#Unique[x^y]>9,y,$[x,y+1]]}&0
sumber