Saya perlu menyiapkan angka yang terbuat dari karton untuk menampilkan beberapa nomor ( contoh ). Saya tidak tahu sebelumnya nomor mana yang harus saya tampilkan - satu-satunya yang saya tahu adalah tidak lebih besar dari itu n
.
Berapa banyak angka karton yang harus saya siapkan?
Contoh: n = 50
Untuk menampilkan nomor apa pun dalam kisaran 0 ... 50, saya perlu digit berikut:
- A nol, untuk menampilkan angka 0, atau angka bulat lainnya
- Dua salinan digit 1, 2, 3 dan 4, untuk menampilkan nomor yang sesuai
- Satu salinan dari angka 5, 6, 7 dan 8, untuk kasus mereka muncul sebagai digit paling tidak penting dalam nomor
- Digit 9 tidak pernah diperlukan, karena saya bisa menggunakan digit 6 terbalik
Total: 13 digit
Test case (setiap baris adalah test case dalam format "input; output")
0 1 1 2 9 9 11 10 50 13 99 17 100 18 135 19 531 22 1000 27 8192 34 32767 38
Jawaban:
Jelly , 9 byte
Cobalah online!
Bagaimana itu bekerja
sumber
0rDŒr€ẎQṪÞẎḟ9ĠẎL
.Python 2 , 49 byte
Cobalah online!
Formula aritmatika yang kikuk. Anggap itu
n
cocok di dalamint
sehinggaL
tidak ditambahkan.Terima kasih kepada Neil karena telah menghemat 5 byte dengan menunjukkan bahwa 9 yang tidak digunakan dapat ditangani dengan melakukan
n*9+8
alih - alihn*9+9
, sehingga, katakanlah,999*9+8=8999
tidak masuk ke 9000.sumber
33333
membutuhkan lima 3 tetapi22222
hanya membutuhkan empat.n*9
[0] menggoda, tetapi gagal untuk angka yang dimulai dengan1
dan kurang dari itu111..
.(n*9+8)/10**len(`n`)
untuk menghindari penggunaanmin
.Haskell ,
11711410895898887848263 byte6 byte disimpan berkat Laikoni
146 byte disimpan berkat nimiCobalah online!
sumber
maximum[a,b]
sama denganmax a b
. 2.) Pemahaman daftar seringkali lebih pendek darifilter
:max d$sum[1|x<-show a,x==b]
g
dengan fungsi pointfree literal:sum.(#[-9..])
.length[x|x<-...]
itusum[1|x<-...]
.g=
(tetapi mungkin Anda ingin memasukkannya dalam versi TIO).Mathematica, 49 byte
sumber
JavaScript (ES6),
6053 byteSemacam solusi rekursif hacky. Ini menghasilkan angka-angka yang membutuhkan penambahan digit:
dan kemudian menghitung berapa banyak yang kurang dari input. Dengan mukjizat yang bahagia, menghapus digit
9
sebenarnya menghilangkan beberapa byte dari fungsi, karena urutannya kemudian dapat dihasilkan seperti itu (dengan asumsi pembagian bilangan bulat):Kita harus memperhitungkan fakta bahwa angka di bawah 10 masih membutuhkan nol, tapi ini sesederhana menambah
n > 9 ? 0 : 1
hasilnya.Uji kasus
Tampilkan cuplikan kode
sumber
n>9^1
mungkin bisan<10
true
masukan0
, jadi saya agak ragu untuk melakukan itu.0>9
salah,false^1
apakah 1 ...?true
sebagai pengganti nomor tersebut1
.Batch, 67 byte
Dalam perumusan standar masalah ini, Anda perlu angka
6
dan9
angka yang terpisah , tetapi Anda tidak diharuskan untuk menampilkannya0
. Ketika nilai maksimum yangn
diperlukan meningkat, jumlah angka yang diperlukan meningkat setiap kali Anda mencapai repdigit (karena Anda tidak memiliki cukup angka itu) dan setiap kali Anda mencapai kekuatan10
(ketika Anda membutuhkan nol tambahan). Secara total masing-masing kekuatan10
membutuhkan10
lebih banyak angka daripada yang sebelumnya, yang dapat dihitung sebagaifloor(log10(n))*10
. Untuk nilai-nilai din
antara kekuatan 10, jumlah repdigits menengah kemudian dapat dihitung sebagaifloor(n/((10**floor(log10(n))*10-1)/9))
atau sebagai alternatiffloor(n*9/(10**floor(log10(n))*10-1))
.Saya menghitung
floor(log10(n))
melalui loop pada baris pertama. Setiap kali,%2
dapatkan ekstra0
dan%3
dapatkan ekstra-~
. Ini berarti apa10%2
adanya10*10**floor(log10(n))
dan apa%30
adanyafloor(log10(n))
.Duplikasi
6
dan9
memiliki dua efek: pertama, hanya ada9
angka yang diperlukan untuk masing-masing kekuatan10
, dan kedua deteksi repdigit perlu mengabaikan9
repdigits. Untungnya karena mereka satu kurang dari kekuatan 10 ini dapat dicapai dengan mengubah rumus untuk menghasilkanfloor((n*9+8)/(10**floor(log10(n))*10))
.Berurusan dengan nol cukup sederhana: ini hanya membutuhkan angka tambahan ketika
n<10
, yaitufloor(log10(n))==0
.sumber
Mathematica, 83 byte
sumber
Python 3 , 75 byte
Cobalah online!
sumber
PHP , 60 byte
Cobalah online!
sumber