Diberikan bilangan bulat positif n
, output basis terkecil di b >= 2
mana representasi n
dalam basis b
tanpa nol terkemuka tidak mengandung a 0
. Anda dapat mengasumsikan bahwa b <= 256
untuk semua input.
Uji Kasus
1 -> 2 (1)
2 -> 3 (2)
3 -> 2 (11)
4 -> 3 (11)
5 -> 3 (12)
6 -> 4 (12)
7 -> 2 (111)
10 -> 4 (22)
17 -> 3 (122)
20 -> 6 (32)
50 -> 3 (1212)
100 -> 6 (244)
777 -> 6 (3333)
999 -> 4 (33213)
1000 -> 6 (4344)
1179360 -> 23 ([12, 9, 21, 4, 4])
232792560 -> 23 ([15, 12, 2, 20, 3, 13, 1])
2329089562800 -> 31 ([20, 3, 18, 2, 24, 9, 20, 22, 2])
69720375229712477164533808935312303556800 -> 101 ([37, 17, 10, 60, 39, 32, 21, 87, 80, 71, 82, 14, 68, 99, 95, 4, 53, 44, 10, 72, 5])
8337245403447921335829504375888192675135162254454825924977726845769444687965016467695833282339504042669808000 -> 256 ([128, 153, 236, 224, 97, 21, 177, 119, 159, 45, 133, 161, 113, 172, 138, 130, 229, 183, 58, 35, 99, 184, 186, 197, 207, 20, 183, 191, 181, 250, 130, 153, 230, 61, 136, 142, 35, 54, 199, 213, 170, 214, 139, 202, 140, 3])
9
tidak masalah, karena tidak0
.Jawaban:
Pyth , 6 byte
Verifikasi semua kasus uji.
Bagaimana itu bekerja
Meskipun Pyth
f
beroperasi pada1, 2, 3, 4, ...
(mulai dari 1), Pyth memperlakukan angka dalam basis 1 (unary) sebagai sekelompok nol, sehingga basis 1 diabaikan.sumber
0 -> Falsy; > 0 -> Truthy
. Apakah itu disengaja yang0
bersifatTruthy
danFalsy
dalam situasi itu?>
tanda di depan yang kedua0
, yang berarti segala sesuatu yang lebih tinggi dari 0 adalah benar.C,
5250 byteCobalah online!
C (gcc),
4745 byteCobalah online!
Dua byte disimpan berkat saran @ Nevay pada jawaban @Kevin Cruijssen!
sumber
k%i
adalah cek ternary di sini. Sebuah varian lebih mudah dibaca akank=(k%i?k:n*++i);
atau bahkan lebih jelas:if(k%i){k=k;}else{k=n*++i;}
.i,k;f(n){for(i=2,k=n;k;)k=k%i++?k/--i:n;return i;}
dani,k;f(n){for(i=2,k=n;k;)k=k%i++?k/--i:n;n=i;}
. Semua kredit jatuh ke @Nevay yang memposting saran ini pada jawaban Java 8 porting saya .i, k;
danf(n)
ada dalam versi kuno C (K&R), tetapi hanya di era ketikareturn
diperlukan tanda kurung bundar di sekelilingnya. argumen. Jika Anda ingin menggunakan K&Ri,k;
, Anda juga harus menggunakannyareturn(i);
. Di atas mungkin gnuc, tetapi bukan C.Haskell ,
565248 byteCobalah online!
Cukup mendasar tetapi tidak bisa memikirkan cara yang baik untuk mempersingkatnya
EDIT: Terima kasih kepada Laikoni karena telah menyelamatkan saya 4 byte! Tidak tahu mengapa saya tidak pernah memikirkannya
!!0
. Saya mungkin harus mencoba menghapus tanda kurung itu tetapi saya memiliki kenangan samar-samar dari beberapa kesalahan aneh ketika Anda mencoba untuk menggunakan||
dan&&
bersama - sama. Mungkin saya bingung dengan operator kesetaraan.EDIT 2: Terima kasih @Lynn karena telah mencukur 4 byte lagi! Tidak tahu bagaimana saya tidak pernah tahu
until
sebelumnya.sumber
!!0
lebih pendek darihead
dan saya pikir Anda bisa drop kurung di#
.until :: (a → Bool) → (a → a) → a → a
menghemat empat byte:f n=until(#n)(+1)2
Bahasa Wolfram (Mathematica) , 33 byte
Cobalah online!
sumber
Sekam , 7 byte
Cobalah online!
Penjelasan
sumber
Python 2 , 57 byte
Cobalah online!
Ini satu byte lebih pendek dari fungsi rekursif:
sumber
Jelly , 7 byte
Cobalah online!
sumber
05AB1E , 6 byte
-4 byte terima kasih kepada Adnan
Cobalah online!
sumber
[¹NÌDŠвPĀ#
1µNвPĀ
bekerja selama 6 byteLB0.å0k
adalah metode lain seluruhnya> _>.Sekam , 9 byte
Cobalah online!
Penjelasan
sumber
Java 8,
615654 byteCoba di sini.
Penjelasan:
Saya punya perasaan ini bisa golf dengan menggunakan pendekatan aritmatika.Memang bisa, dengan porta jawaban @Steadybox 'C , dan kemudian di-golf 2 byte berkat @Nevay .Lama (Jawaban 61 byte ):
Coba di sini.
Penjelasan:
sumber
n->{int b=2,t=n;for(;t>0;)t=t%b++<1?n:t/--b;return b;}
Japt , 8 byte
Cobalah online!
Penjelasan
Kembalikan angka pertama (
X
) untuk melewati fungsi, mulai dari2
Ubah nomor input menjadi array
X
angka dasar .Periksa apakah semua digit benar.
sumber
10
?JavaScript (ES6),
434137 byteUji kasus
Tampilkan cuplikan kode
sumber
Brachylog , 11 byte
Cobalah online!
Penjelasan
sumber
Python 2 , 57 byte
Cobalah online!
-1 terima kasih kepada Felipe Nardi Batista .
-2 Terima kasih kepada Lynn (dan sekarang ini adalah tiruan dari solusinya: D)
sumber
a,b=a+c,d
kea+=c;b=d
while m>1
denganwhile m
(dan kemudian kami terikat!)APL (Dyalog) ,
2019 byteCobalah online!
Seperti biasa, terima kasih kepada @ Adám karena telah membantu dalam obrolan dan membuat kode berfungsi di TIO. Juga, menghemat 1 byte.
Ini tradfn ( trad itional f unctio n ) tubuh. Untuk menggunakannya, Anda harus menetapkannya nama (yang ada di bidang header TIO), lampirkan dalam
∇
s (satu sebelum nama dan satu di bidang footer TIO), lalu panggil menggunakan namanya. Karena menggunakan quad (⎕
) untuk mengambil input pengguna, itu disebut sebagaif \n input
bukan yang biasaf input
Bagaimana?
Fungsi kemudian mengembalikan basis yang dihasilkan.
sumber
n←⎕
akan menjadi angka sederhana dan Anda perlu1
sebagai argumen awal untuk sisa kode, Anda bisa menghitung jumlah elemen dalamn
(yaitu 1), dengan mengganti1⊣
dengan≢
. Cobalah online!Proton , 40 byte
Cobalah online!
sumber
2..x
memeriksa pangkalan dalam interval[2, x)
, maka gagal untuk kasus uji1
dan2
.R ,
7971666365 byteCobalah online!
Jawaban ini didasarkan pada pengaturan ulang Giuseppe dalam satu loop tunggal.
Disimpan 8 byte berkat JDL, dan 6 byte berkat Giuseppe.
sumber
b
untukT
, yang dimulai didefinisikan sebagaiTRUE == 1
, menghilangkan kebutuhanb=1
. Demikian pula Anda dapat subF
untukk
(F
adalahFALSE
)m%/%T
(divisi integer) bukan(m-m%%T)/T
MATL ,
1312 byteCobalah online!
-1 byte terima kasih kepada Luis Mendo. Program ini tidak menangani testcases lebih besar dari 2 ^ 53 (
flintmax
, integer maksimum berturut-turut diwakili oleh tipe floating point), karena tipe data defaultdouble
dalam MATL. Namun, ia harus dapat menemukan pangkalan nir-sembarang sewenang-wenang di bawah angka itu.sumber
YA
menggunakan ganda secara internal, sehingga hanya dapat menangani input hingga integer maksimum berturut-turut yang diwakili oleh ganda (lihatflintmax
). Apakah ini membatalkan jawaban? Pada prinsipnya algoritma bekerja untuk basis sewenang-wenang, saya telah secara eksplisit bekerja di sekitar perintah lain yang hanya akan melakukan hingga basis 36.PHP, 59 +1 byte
menggunakan builtin , basis maks 36:
tidak ada builtin,
6360 +1 byte , basis apa pun:Jalankan sebagai pipa dengan
-nR
atau coba online .sumber
Sebenarnya ,
1211 byteCobalah online!
Gunakan konsensus ini . Terima kasih kepada Mego untuk bantuan penghematan byte dalam obrolan .
sumber
J, 26 byte
Ingin tahu jika ini bisa diperbaiki.
Kata kerja utama adalah frasa diad:
yang diberi input di sebelah kiri dan konstanta 2 di sebelah kanan. Frasa kata kerja utama itu kemudian menggunakan J's Do.. Sementara membangun, menambah argumen y kanan selama 0 adalah elemen dari
e.
.Cobalah online!
sumber
Lua ,
7776 byteCobalah online!
sumber
Bimasakti , 38 byte
pemakaian:
./mw base.mwg -i 3
Penjelasan
Saya yakin ini bisa disingkat menggunakan while-loop bukan for loop, tapi saya tidak bisa membuatnya bekerja.
sumber
Ditumpuk , 23 byte
Cobalah online!
Peningkatan ini (
[1+]
) J mulai dari dua (2
) sedangkan representasi basis J dari input tidak memiliki nol (all
danuntil
).sumber
Perl 5 , 52 + 2 (
-pa
) = 54 byteCobalah online!
sumber