Tantangan
Diberikan bilangan bulat, Q
dalam kisaran -(2^100) ≤ Q ≤ 2^100
, output jumlah digit dalam angka itu (di basis 10).
Aturan
Ya, Anda dapat mengambil nomor sebagai string dan menemukan panjangnya.
Semua fungsi matematika diizinkan.
Anda dapat mengambil input di basis apa pun, tetapi output harus panjang dari angka di basis 10.
Jangan hitung tanda minus untuk angka negatif. Angka tidak akan memiliki titik desimal.
Nol dapat memiliki satu atau nol digit.
Asumsikan input akan selalu berupa bilangan bulat yang valid.
Contohnya
Input > Output
-45 > 2
12548026 > 8
33107638153846291829 > 20
-20000 > 5
0 > 1 or 0
Kemenangan
Kode terpendek dalam byte menang.
Taksi , 1118 byte
Cobalah online!
Tidak Disatukan:
Penjelasan:
sumber
Zoom Zoom
di setiap lingkaranplan "r"
. Saya baru mengujinya hingga 100.000 digit dan tidak pernah kehabisan bensin. Saya tidak menghitungnya tetapi saya kira dibutuhkan lebih dari cukup ongkos untuk membayar gas yang digunakannya sehingga mengisi tangki di setiap putaran.Mathematica, 13 byte
Ada built-in ... pengembalian
0
untuk0
.sumber
There's a built-in
: Kapan tidak ada?dc, 3
Perhatikan bahwa biasanya
dc
membutuhkan angka negatif untuk diberikan_
daripada yang lebih biasa-
. Namun, dalam hal ini, keduanya dapat digunakan. Jika-
diberikan, makadc
perlakukan ini sebagai pengurangan pada tumpukan kosong, lempardc: stack empty
, dan kemudian lanjutkan dengan sisa nomor; Dengan demikian hasilnya tidak berbeda.Cobalah online .
sumber
Z
sebagai pengiriman fungsi?dc
Ini adalah bahasa concatenative dengan kutipan + dup + operator eval, karena itu dapat menggunakan kembali string kode sewenang-wenang.Retina , 2 byte
Cobalah online!
Retina tidak benar-benar tahu nomor apa, sehingga input diperlakukan sebagai string dan kami hanya menghitung karakter digit.
sumber
05AB1E , 2 byte
Cobalah online! atau Coba Semua Tes!
sumber
Ä
ya Bukanþ
? Cukup adil.Ä
dulu, tetapiþ
akan menangani titik desimal, jadi saya kira sedikit lebih baik.Alice , 16 byte
Cobalah online!
Penjelasan
Menemukan tata letak setengah layak untuk ini cukup sulit. Saya masih tidak terlalu senang dengan itu karena ruang,
<
dan;
, tetapi ini adalah yang terbaik yang bisa saya lakukan untuk saat ini.Panjang string adalah salah satu dari built-in yang sangat umum yang tidak ada di Alice, karena inputnya adalah string dan outputnya adalah integer (dan semua perintah Alice adalah integer ketat ke integer atau string ke string). Kita dapat mengukur panjang string dengan menuliskannya ke kaset dalam mode Ordinal dan kemudian menemukan akhir dalam mode Cardinal.
Saya juga mencoba mengurus tanda minus dalam mode Kardinal dengan
H
(nilai absolut), tetapi sakelar mode tambahan selalu berakhir dengan lebih mahal dalam upaya saya.sumber
PHP, 23 Bytes
Cobalah online!
log basis 10 dari nilai absolut ditambah satu pemeran ke int
untuk nol sebagai input input10 memberikan kembali
INF
yang ditafsirkan sebagai salahCara yang lebih baik adalah mengganti
$argn
dengan$argn?:1
+3 BytesPHP, 27 Bytes
panjang string dikurangi boolean lebih rendah dari nol
+2 Bytes untuk perbandingan string
$argn<"0"
Cobalah online!
PHP, 32 Bytes
Cobalah online!
Regex menghitung semua digit
35 Bytes
Cobalah online!
panjang string dikurangi hitungan
-
strspn
sumber
10
, karena^
memiliki prioritas lebih rendah. Anda dapat memperbaikinya dengan-~
.<?=strlen(abs($argn));
?$argn?:1
? Itu akan menjadi 26 byte denganlog10()
danabs()
.-~$x
setara dengan((int)$x)+1
.<?=-~log10(abs($argn?:1));
sepertinya berhasil.Fortran 95 (gfortran),
1219695 bytePenjelasan:
Kurangi indeks tanda '-' dari panjang argumen.
Array mulai dari 1 di Fortran, dan index () mengembalikan 0 jika simbol tidak ditemukan.
Sunting: Beralih ke integer implisit "i", juga pengambil argumen terkonsolidasi.
Sunting: -1 byte berkat @Tsathoggua
sumber
PowerShell, 24 Bytes
melemparkan nilai "absolut" input input ke string dan mendapatkan properti 'panjang' dari itu.
1 byte lebih pendek dari
"".Length
sampai seseorang menemukan cara yang lebih baik untuk mendapatkan abs dari angka di PS ini mungkin sependek yang akan didapat.
sumber
"$args".trim('-')|% Le*
? :)05AB1E , 2 byte
Cobalah online!
sumber
brainfuck , 37 byte
Output adalah dengan nilai byte.
Cobalah online!
Penjelasan
sumber
Ruby,
1511 + 1 =1612 byteMenggunakan
-n
bendera.Cobalah online!
Penjelasan
sumber
Jelly , 2 byte
Cobalah online!
Ini benar-benar melakukan apa yang diminta:
sumber
D
bekerja pada desimal? Akankah-1.2
output[-1,-0.2]
? Mencobanya sendiri, tidak.654.321D
akan menghasilkan[6,5,4.321]
(sebenarnya sebenarnya[6.0,5.0,4.321000000000026]
)[-6.0, -5.0, -4.321000000000026]
, sebenarnya, rupanya.CJam , 5 byte
Berbasis string.
Cobalah online!
9 byte untuk solusi murni berbasis matematika:
Atau 5 lainnya dengan konversi basis:
sumber
rizs,
.Japt , 5 byte
Cobalah online!
Penjelasan
sumber
RProgN 2 , 2 byte
Cobalah online!
Cukup dapatkan nilai absolut dari input, dan hitung digitnya.
sumber
JavaScript (ES6),
27262524 byteMengambil input sebagai string.
sumber
s=>`${s>0?s:-s}`.length
!JavaScript (ES6), 23 byte
Pendekatan berbeda terhadap jawaban Shaggy .
sumber
s=>s.length-(s<0)
menghemat 6 byteJava,
3024 byteAsumsinya
i
adalah aBigInteger
. Juga, jenisnya dikontekstualisasikan, jadi tidak diperlukan impor, seperti yang ditunjukkan dalam kode pengujian.Uji
Menghemat
sumber
+""
bukan.toString()
?i
jawaban Anda. Saya pikir lebih banyak jawaban lambda harus melakukan ini.Python 2 ,
3122 byte-9 byte terima kasih kepada Rod.
Cobalah online!
sumber
len(`abs(s)`)
dengan nomor sebagai input lebih pendeklen∘repr∘abs
.Brain-Flak , 63 byte
Cobalah online!
Ini adalah 62 byte kode dan +1 byte untuk
-a
flag.Saya mencoba dua pendekatan lain, tetapi sayangnya keduanya lebih panjang:
Ini harus menjadi jawaban yang sangat singkat. Bahkan, jika kita tidak harus mendukung angka negatif, kita bisa melakukan:
Tetapi kita harus membandingkan input pertama dengan 45 (ASCII
-
) terlebih dahulu, yang merupakan jumlah byte paling banyak dari jawaban ini.Solusi aritmatika mungkin lebih pendek.
sumber
([{}]((((()()()()())){}{})){}{})({(<()>)}{}[]<>)
Ruby, 20 byte
sumber
->a{a.abs.to_s.size}[-95]
->a{a.abs.to_s.size}.call(-92)
Pyth, 4 byte
Cobalah online!
Semua uji kasus
sumber
R, 18 byte
sumber
Alice , 10 byte (tidak bersaing)
Cobalah online!
Ini adalah solusi yang tidak bersaing, karena pada saat tantangan ini diposting, perintahnya
c
disadap oleh penerjemah resmi (dan hanya: D). Sementara itu Martin Ender memperbaikinya, jadi ini sekarang berfungsi.Penjelasan
Penunjuk instruksi melewati dua mirror (
/
) beberapa kali, jadi mungkin agak sulit untuk diikuti. Saya akan mencoba menjelaskannya sejelas mungkin, menggunakan arah mata angin (mis. N naik, SW turun ke kiri ...). Saya akan memanggil/1
cermin paling kiri, dan/2
yang paling kanan.sumber
GNU Make , 78 byte
Gaya imperatif:
Gaya fungsional, 113 byte:
Pure Make, 83 byte:
sumber
C ++,
8076 byteMencetak panjang argumen, minus 1 jika karakter pertama adalah minus karena
bool
menjamin konversi ke1
jikatrue
atau0
jikafalse
<46
bukan=='-'
, dan untuk menghormati array bukan[]
sumber
c[1][0]=='-'
dengan*c[1]<46
karena kita dapat mengasumsikan input akan selalu menjadi bilangan bulat yang valid. (Kecuali jika awalan selain '-' diizinkan ...)TI-Basic (TI-84 Plus CE, OS 5.2+), 6 byte
TI-Basic adalah bahasa tokenized;
length(
dantoString(
masing-masing dua byte.Ans
digunakan sebagai input implisit; nilai baris terakhir (hanya) dikembalikan secara implisit.Cukup sederhana, mengambil nilai absolut untuk menghilangkan tanda minus, mengubahnya menjadi string, mengembalikan panjang string.
Pendekatan matematika 6-byte yang tidak bekerja untuk 0:
sumber
toString(
?Pari / GP , 13 byte
Cobalah online!
sumber