Bagaimana, Anda tidak dapat mengingat nomor telepon 6 atau 7 digit yang muncul di layar TV sebentar ?! Dengan menggunakan teknik khusus yang dijelaskan di bawah ini, Anda akan berubah menjadi buku telepon berjalan!
Jelas, angkanya 402
lebih mudah diingat daripada angkanya 110010010
, dan angkanya 337377
lebih mudah diingat daripada angkanya 957472
. Ini berarti bahwa angka yang dihafal, di satu sisi, harus mengandung digit sesedikit mungkin, dan di sisi lain, diinginkan bahwa nomor tersebut mengandung angka berulang sebanyak mungkin.
Sebagai kriteria untuk kesulitan mengingat, kita mengambil jumlah dari jumlah digit dalam jumlah dan jumlah digit dalam jumlah yang berbeda. Nomor yang dihafal dapat ditulis dalam sistem angka lain, mungkin kemudian akan lebih mudah diingat. Misalnya, angka 65535
dalam notasi heksadesimal terlihat sepertiFFFF
.
Tugas
Anda perlu menulis sebuah program untuk memilih basis sistem bilangan untuk meminimalkan kriteria kompleksitas. Basis sistem angka harus dipilih dalam kisaran 2 hingga 36, kemudian angka 0-9
dan huruf InggrisA-Z
dapat digunakan untuk mewakili angka.
Memasukkan
Input berisi bilangan bulat desimal dari 1 hingga 999999999.
Keluaran
Keluaran harus mengandung dasar sistem angka (dari 2 hingga 36), meminimalkan kriteria kompleksitas menghafal, dan angka dalam sistem angka yang dipilih, dipisahkan oleh satu ruang. Jika beberapa pangkalan memberikan nilai yang sama untuk kriteria tersebut, maka pilihlah yang terkecil di antara mereka.
Catatan
- Huruf-hurufnya harus huruf besar (
A-Z
).
Uji Kasus
Input output
1
2 1
2
3 2
65535
16 FFFF
123
12 A3
sumber
a-z
bukanA-Z
?A-Z
?Jawaban:
Python 2 ,
150149127144 byteCobalah online!
Python 3 , 136 byte
Cobalah online!
Python 3.8 (pra-rilis) , 131 byte
Cobalah online!
c
mengkonversi nomor basis 10 ke basis apa pun (2-36), dan fungsi pertama (anonim) menemukan hasil terkecil.sumber
05AB1E ,
1614 byte-1 byte terima kasih kepada Kevin Cruijssen
Cobalah online!
Atau tambahkan R) »di akhir untuk menyesuaikan persis dengan format output yang ditentukan, tetapi sebagian besar jawaban lain tidak mengganggu.
Penjelasan:
sumber
₆L©B®ø
bukan₆LεBy‚}
ā
, sepertinya Anda selalu melupakan yang itu.Perl 6 ,
5554 byte-1 byte terima kasih kepada Jo King.
Cobalah online!
sumber
@$_
bukannya.[*]
minus satu byteJavaScript (ES6),
87 85101 byteSunting: +16 byte tidak berguna untuk mematuhi format output yang ketat
Cobalah online!
sumber
Japt v2.0a0
-gS
,2423 byteTidak cantik, tetapi berhasil. +2 byte untuk persyaratan yang sama sekali tidak perlu bahwa output huruf besar.
Cobalah
sumber
PHP ,
124119 byteCobalah online!
Sayang sekali tentang +12 byte di PHP untuk huruf besar output ... tapi ... pokoknya.
sumber
Zsh , 85 byte
Untuk jumlah pernyataan di dalam for loop ini, menggunakan
...&&...&&...
lebih pendek dari{...;...;...;}
.Cobalah online!
Inilah solusi 81-byte yang mencetak dalam bentuk
[base]#[num]
sebagai gantinya:Cobalah online!
sumber
J , 67 byte
Cobalah online!
sumber
Arang , 38 byte
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:
Masukkan bilangan bulat.
Konversikan dari basis 2 ke basis 36 ...
... deduplicate, concatenate, dan mengambil panjangnya.
Ambil indeks kompleksitas minimum dan tambahkan 2 untuk mendapatkan basis.
Cetak alas dan bilangan bulat yang dikonversi ke alas itu dalam huruf besar.
sumber
Stax , 19 byte
Jalankan dan debug itu
Tidak ada algoritma mewah, hanya kekuatan kasar langsung. Sekitar sepertiga dari program ini adalah format-perselisihan untuk aturan keluaran yang tepat.
Program bonus: Output untuk [1..1000]
sumber
Jelly , 25 byte
Cobalah online!
Tautan monadik mengambil integer sebagai argumennya dan mengembalikan string Jelly dari format yang diinginkan. Jika daftar dua item adalah output yang dapat diterima (sesuai dengan sebagian besar tantangan), dapat menghemat 2 byte. Jika basis 1 dapat diterima untuk kasus tepi 1 sebagai input, dapat menyimpan 2 byte lebih lanjut.
sumber
Brachylog , 44 byte
Cobalah online!
Ini agak menyakitkan untuk menulis.
sumber
Perl 5 , 161 byte
Cobalah online!
sumber
Python 2 ,
140135 byteCobalah online!
sumber
Perl 5
-Minteger -MList::Util=uniq,first -ap
,123112 byteCobalah online!
sumber
Bahasa Wolfram (Mathematica) ,
109111 byte+2: diperbaiki. Terima kasih atas tangkapan @Roman
OrderingBy
diperkenalkan di Mathematica 12.0, yang TIO tampaknya belum diperbarui.sumber
OrderingBy
Tidak sesuai dengan persyaratan ini.MinimalBy
, seperti ini ?123
, solusi Anda mencetak36 3F
alih-alih yang diperlukan12 A3
. DariOrderingBy[123~IntegerDigits~Range@36, Tr[1^#] + Tr[1^Union@#] &]
saya mendapatkan jawabannya{36, 35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 6, 5, 11, 10, 9, 8, 7, 4, 3, 2, 1}
, sehingga asumsi biasa untuk tidak memesan ulang entri yang setara tampaknya diabaikan di sini. My$Version
adalah "12.0.0 untuk Mac OS X x86 (64-bit) (7 April 2019)".C (dentang) , 165 byte
Cobalah online!
n // masukan
, i = 2 // iterator dari base 2 hingga 36
, j // kompleksitas saat ini
, p = 99 // kompleksitas terbaik
, r // result = iterator
, m // temp copy n
, x; // m% i
char * g // ptr string saat ini
, * _ // str str terbaik
, b [74] [37]; // buffer
/ * [37 + 37] = [string diperoleh + tes untuk karakter yang digunakan] * /
t (n) {
untuk (; g = b [i], // gerakkan ptr
untuk (j = 0, m = n; m; m / = i, // ekstrak digit
j + = b [i + 36] [x = m% i] ++? 1: 2; // kenaikan byte relatif ke karakter
// dan jika 0 penambahan j oleh 2: 1 untuk karakter baru yang digunakan dan 1 untuk jumlah digit
// selain itu, hanya digit yang dihitung + pindahkan pointer
// printf ("% s -", g); // test
// printf ("r% ip% ij% i \ n", r, p, j); // test
}
printf ("% i,% s", r, _); // output
}
sumber
Japt v2.0a0, 31 byte
Cobalah
sumber