Menulis angka adalah salah satu dari dunia pemrograman Hello, seringkali angka 1-10.
Saya ingin menulis banyak angka! Banyak, banyak angka. Tetapi berapa banyak angka yang harus saya tulis?
Tugas
Diberikan input integer, berikan angka sebagai output yang akan memberi saya jumlah digit yang akan berada dalam string yang berisi semua angka integer dalam kisaran dari 0 hingga input, inklusif. Pengidentifikasi negasi ("-") dihitung sebagai satu karakter.
Contoh I / Os
Input: 8
Ditulis: 0,1,2,3,4,5,6,7,8
Output: 9
Input: 101
ditulis: 0,1,2,3 ...., 99,100,101
Output: 196
Input: 102
ditulis: 0,1,2,3 ...., 100,101,102
output: 199
Input -10
Ditulis: 0, -1, -2, -3, -4, -5, -6, -7, -8, -9, -10
output: 22
Ini adalah kode-golf . Jumlah byte terendah menang!
Utilitas Bash + OS X (BSD),
2422 byteTerima kasih kepada @seshoumara karena telah menghemat 2 byte.
Tes berjalan di Mac OS X:
Ini versi GNU:
Bash + coreutils,
4038 byteSekali lagi, 2 byte disimpan berkat @seshoumara.
Cobalah online!
sumber
fold -1|wc -l
untuk melakukan penghitungan? Itu lebih pendek.Python 2,
83,7864 byteversi terpendek:
versi ini menghemat 5 byte, terima kasih kepada @numbermaniac:
Cobalah online!
yang ini saya buat sendiri setelah itu (jumlah byte yang sama):
Cobalah online!
sumber
map
pada baris kedua untuk 78 byte:print len(''.join(map(str,(range(x+1)if x>0 else range(0,x-1,-1)))))
. Anda mungkin bisa lebih berhemat dengan menjadikannya lambda.print sum(map(len,map(str,(range(x+1)if x>0 else range(0,x-1,-1)))))
lambda x:sum(map(len,map(str,(range(x+1)if x>0 else range(0,x-1,-1)))))
untuk 71 byteJava 7, 74 byte (rekursif - termasuk parameter default kedua)
Penjelasan (1):
Java 7,
8179 byte (loop - parameter tunggal)Jika memiliki parameter kedua default
0
untuk pendekatan rekursif ini tidak diizinkan karena beberapa alasan, untuk-loop seperti ini dapat digunakan sebagai gantinya:Penjelasan (2)
Kode uji:
Coba di sini.
Keluaran:
sumber
RProgN 2 , 5 byte
Penjelasan
Solusi sederhana, bekerja seperti pesona.
Cobalah online!
sumber
Brachylog , 5 byte
Cobalah online!
Buat rentang [0, masukan], ubah setiap angka menjadi string, gabungkan menjadi satu string dan kembalikan panjang hasilnya
sumber
Z
; Ada apa dengan itu? Haruskah itu masuk hitungan?Z
kepada juru bahasa Brachylog menyuruhnya untuk menambahkan pembungkus yang sesuai untuk membuat fungsi dapat diuji. (Jika Anda menjalankannya sebagai program lengkap, itu tidak akan menghasilkan output apa pun.) Kami mengizinkan pengiriman program atau fungsi di sini, sehingga tidak boleh dihitung terhadap jumlah byte, karena itu sebenarnya bukan bagian dari pengiriman.PHP,
5960 byteDiungguli oleh Roberto06 - https://codegolf.stackexchange.com/a/112536/38505
Terima kasih kepada roberto06 karena memperhatikan versi sebelumnya tidak berfungsi untuk angka negatif.
Cukup susun array angka, masukkan ke string, lalu hitung digit (dan tanda minus)
Jalankan contoh:
php -f 112504.php 8
sumber
join
bukanimplode
karena itu adalah alias.[--9]
Haskell ,
3938 byteCobalah online! Sunting: disimpan 1 byte berkat @xnor!
Penjelasan:
Di Haskell untuk angka
a
danb
[a..b]
rentang daria
hinggab
dalam 1-kenaikan atau 1-pengurangan, tergantung pada apakahb
lebih besara
. Jadi untuk yang positifn
daftar pertama[0..n]++[n..0]
adalah[0,1,2,...,n]
dan yang kedua kosong. Untuk negatifn
rentang hasil kedua[0,-1,-2,...,n]
dan yang pertama kosong. Namun jikan=0
kedua rentang menghasilkan daftar[0]
, maka rangkaian[0,0]
akan menghasilkan hasil yang salah2
. Itu sebabnya0
ditangani sebagai kasus khusus.The
=<<
-operator pada daftar adalah samaconcatMap
, sehingga setiap nomor diubah menjadi string denganshow
dan semua string yang akan digabungkan dalam satu string panjang yanglength
akhirnya dikembalikan.Sebelum tip xnor saya gunakan
[0,signum n..n]
bukan[0..n]++[n..0]
.signum n
adalah-1
untuk angka negatif,0
untuk nol dan1
untuk angka positif dan berbagai bentuk[a,b..c]
membangun daftar angka daria
sampaic
dengan kenaikanb
. Dengan demikian[0,signum n..n]
membangun rentang[0,1,2,...,n]
untuk positifn
dan[0,-1,-2,...,n]
negatifn
. Untukn=0
itu akan membangun daftar tak terbatas[0,0,0,...]
sehingga kita perlu menangani0
sebagai kasus khusus juga.sumber
[0..n]++[n..0]
harus lakukan untuk[0,signum n..n]
.PHP,
4135 byteDisimpan 6 byte berkat pengguna59178
Karena jawaban ʰᵈ salah untuk input negatif, saya mengambilnya sendiri untuk membangun solusi baru:
Fungsi ini:
0
ke$argv[1]
(alias input)Coba di sini!
sumber
preg_match()
:(range()
jika itu bukan solusi Anda, saya kira kita genap;)join()
alih-alihimplode()
. ini adalah alias untuk hal yang sama. php.net/manual/en/function.join.phpimplode
, tapi saya tidak tahu saya bisa menghilangkan parameter gue. Terima kasih!Ruby ,
20 2629 byteCobalah online!
sumber
R,
2620 bytesum(nchar(0:scan()))
Pendekatan yang sangat mendasar:
Buat vektor 0: x
Hitung karakter di setiap nilai (akan dipaksa ke string secara otomatis)
Tidak yakin apakah ada trik untuk mengurangi definisi fungsi?6 byte disimpan berkat Giuseppe, dengan mengambil input dari stdin sebagai gantinya.sumber
sum(nchar(0:scan()))
sebagai gantinya dan membacan
dari stdin sebagai gantinya.Mathematica,
484746 byte-1 byte terima kasih kepada Martin Ender !
Fungsi anonim, mengambil nomor sebagai argumen.
Solusi lebih pendek oleh Greg Martin , 39 byte
sumber
Sign@#
untuk#/Abs@#
.1-#~Min~0+Tr@IntegerLength@Range@Abs@#&
.1
Akun awal untuk digit 0, sedangkan-#~Min~0
akun untuk semua tanda negatif jika input negatif.Batch, 110 byte
Menghitung
sum(min(0,abs(n)+1-10^k),k=0..9)+(n<0?1-n:1)
. (Saya hanya perlu naik9
karena keterbatasan aritmatika integer Batch.)sumber
Python 2 , 68 byte
Cobalah online!
Lebih lama tetapi berbeda dari solusi Python lainnya. Mendefinisikan fungsi rekursif yang disebut sebagai eg
f(10)
sumber
MATL , 11 byte
Cobalah online!
sumber
PowerShell , 23 byte
Cobalah online! (akan muntah di TIO untuk input sangat besar (absolut))
Menggunakan
..
operator jangkauan untuk membangun rentang dari0
ke input$args
(ditampilkan sebagai string untuk mengkonversi dari array input). Itu-join
ed bersama menjadi string (misalnya,01234
) dan kemudianLe
ngth diambil darinya. Yang tersisa pada pipa dan output tersirat.sumber
Perl 6 , 18 byte
Cobalah
Diperluas:
sumber
QBIC , 25 byte
Penjelasan:
sumber
JavaScript, 50 byte
Berkolaborasi dengan @ETHproductions
sumber
Bash + GNU coreutils, 28
Cobalah online .
sumber
Retina , 28 byte
Cobalah online!
Penjelasan
Ubah nomornya menjadi unary, pertahankan tanda itu tidak tersentuh.
Setiap 1 diganti oleh semuanya hingga dirinya sendiri ditambah baris baru. Dengan ini kita mendapatkan rentang dari 1 ke n jika n positif, dari -1 ke n dengan tambahan
-
di awal jika negatif. Semua angka dalam unary dan dipisahkan oleh baris baru.Ubah setiap urutan yang menjadi angka desimal yang sesuai.
Letakkan
0
di awal, ganti ekstra-
jika ada.Hitung jumlah karakter (non-baris baru).
sumber
Emacs, 20 byte
Perintah itu sendiri adalah 20 penekanan tombol, tetapi saya perlu klarifikasi tentang bagaimana ini harus dihitung sebagai byte. Saya beralasan bahwa menghitung setiap keystroke sebagai 1 byte akan menjadi yang paling adil. Perintah di atas ditulis secara konvensional agar lebih mudah dibaca.
Penjelasan
Mulailah mendefinisikan makro keyboard.
Buat penghitung makro baru. Menulis
0
ke buffer; nilai penghitung sekarang 1.Akhiri definisi makro keyboard.
Setelah menekan META, ketikkan nomor input Anda. The
C-x e
kemudian mengeksekusi makro yang berkali-kali.Setel tanda ke awal buffer (yang memilih semua teks yang dihasilkan).
Jalankan penghitungan karakter pada wilayah yang dipilih. Jumlah karakter akan dicetak dalam minibuffer.
Contoh
Permintaan maaf untuk warna highlight yang mengerikan. Ini adalah contoh dari menggunakan perintah ini dengan input 100. Outputnya ada di minibuffer di bagian bawah layar.
sumber
Lua, 52 byte
Iterate melalui for for dari 0-input, ubah integer
i
menjadi string dan tambahkan panjang stringt
sebelum mencetakt
sumber
Perl 5 , 32 byte
31 byte kode +
-p
bendera.Cobalah online!
sumber
C #,
7773 byte-4 byte terima kasih kepada @Kevin Cruijssen
Fungsi lambda:
Tidak disatukan dan dengan kasus uji:
sumber
while
tofor
untuk menyimpan beberapa byte:(r)=>{var l="";for(int i=0,s=r<0?-1:1;i!=r+s;i+=s)l+=i;return l.Length;};
( 73 byte )Func<int, int>
Anda dapat memanggil fungsi inginr=>...
menyimpan 2 byte (mungkin bisa melakukan ini pula).JavaScript, 44 byte
sumber
REXX, 56 byte
sumber