Pendahuluan:
Saya ingin melatih membuat test case, jadi saya akan mencobanya dengan mudah.
Tantangan:
Ambil input (string) apa saja (dalam rentang ASCII yang terlihat) dan simpulkan jika itu adalah angka dan hasilkan sesuatu yang dapat digunakan untuk mengevaluasi.
Aturan:
- Angka hanya akan berisi karakter
-0123456789,.
- Jawaban hanya diperlukan untuk mengenali angka antara -1000000000 dan 1000000000 (eksklusif), tetapi dapat mengenali angka besar secara sewenang-wenang.
- Anda dapat menulis program atau fungsi lengkap.
- Jika suatu angka, kembalikan apa pun yang dapat digunakan untuk membedakannya dan mendokumentasikan output dalam deskripsi (mis.
My program outputs T if a number, F if not.
). - Input akan berupa jumlah karakter apa pun dalam rentang ASCII atau kosong (jika kosong mengembalikan apa pun yang Anda hasilkan jika bukan angka).
- Angka bisa termasuk titik desimal (mis.
3.14
). Jika ya, mereka harus memiliki setidaknya satu digit sebelum titik desimal dan setidaknya satu setelahnya. - Angka bisa memiliki nol di depan atau di belakang (mis.
000001.00000
). - Bagian integer dari angka dapat dibagi untuk dibaca menjadi potongan tiga digit dengan koma (mis.
1,000.23456
). Dalam hal ini mereka harus dibagi setiap tiga digit dari kanan ke kiri (ex.1,234,567
,10,000.202
,123,234.00
,0,123.293
). - Angka negatif ditunjukkan oleh pemimpin
-
(mis.-1.23
). Arahan+
untuk menunjukkan angka positif tidak diizinkan, dan harus menghasilkan output palsu. - Pengecualian TIDAK dihitung sebagai output yang valid dan dapat dilihat (kecuali ketika mereka dapat meneruskan output ke stream out standar (mis.
Exception on line N [...]
Dapat dimasukkan sebagai output untuk nomor / bukan nomor jika string dimasukkan ke stream out standar.
Kasus uji:
(dengan asumsi My program outputs T if a number, F if not.
versinya)
123 -> T [on integer]
-123 -> T [negative numbers need to be handled]
0 -> T [on zero]
123.456 -> T [on floating point]
123,456.789 -> T [on evenly divided by 3 digits with comas]
123456789 -> T [thousand separators are not required]
0000001.00000 -> T [on leading/trailing zeros]
00.00 -> T [on zero and leading/trailing zeros]
999999999.9999999999999999999999999999999999999999999999999999 -> T [on close to the maximum value]
-999999999.9999999999999999999999999999999999999999999999999999 -> T [on close to the minimum value]
-> F [on empty]
lolz -> F [on non-number value]
n4melyh4xor -> F [on non-number with digits]
1.2 -> F [on space-padded]
9.3 1.3 -> F [on anyhow separated multiple numbers]
1e5 -> F [no scientific notation]
50cl05e.buty3ts0f4r -> F [on input with letters obscuring the number]
1,2,3,4.5678 -> F [on badly readability-divided number]
1,234.5,678 -> F [on readability-divided floating point part]
.234 -> F [on no leading zero]
+1 -> F [no leading + sign]
1.234.3 -> F [only one decimal point]
12345,678 -> F [on separator stopping mid-way]
kode-golf , karakter paling tidak adalah pemenangnya.
code-golf
number
decision-problem
n4melyh4xor
sumber
sumber
-123
OK, bagaimana dengan+456
-> baik atau buruk. Atau tidak ikut serta+
dalam pesta?Jawaban:
Retina ,
2829314034 byteKeluaran
1
jika benar,0
sebaliknya. Sejauh yang saya mengerti, dalam hal ini Retina menampilkan jumlah kecocokan yang dimiliki regex pada input.Cobalah online!
Test Suite
Suntingan
RegExplanation
sumber
m
dang
) di Retina?`
di depan regex, dan kemudian pengubah pergi di depannya, misalnyam`^.$
.g
tidak ada di .NET, kecocokan bersifat global secara default.JavaScript,
4649 byteIni adalah port langsung dari jawaban Retina saya. Satu-satunya alasan saya menggunakan JS adalah agar ada cara mudah untuk menguji regex menggunakan Snack Snippet di bawah ini
sumber
isNaN(+prompt())
untuk 16 karakter. Begitulah hidup, saya kiraPerl 6 , 42 byte
Cobalah
Diperluas:
sumber
PHP, 62 byte
Builtin tidak dapat menangani koma dan menerima notasi ilmiah; jadi saya harus berjalan di jalan regex.
<?=is_numeric($argv[1]);
akan menjadi 24 byte.sumber
alat bash / Unix, 64 byte
Simpan ini sebagai file, dan berikan string untuk diuji sebagai argumen pertama ke perintah.
Output adalah 0 untuk non-angka, 1 untuk angka.
Jika Anda bersedia menerima input dari stdin dan jika Anda dapat menjamin bahwa input hanya terdiri dari satu baris, maka Anda dapat menghapus <<< "$ 1" di bagian akhir, menghasilkan 57 byte .
Adapun kode itu sendiri, opsi -c untuk egrep menghitung jumlah baris yang cocok (yang akan 0 atau 1).
sumber
Pyth, 25 karakter
Mengompresi regex Kritixi Lithos .
Cobalah online. Menggunakan karakter Unicode di luar Basic Multilingual Plane, yang TIO tampaknya tidak bisa atasi? Aplikasi kecil ini melaporkan ukuran yang salah untuk string. Penghitung karakter / byte ini membuatnya benar.
sumber
C89, 195 byte
Tidak Disatukan:
sumber
Python 2, 79 byte
Solusi Regex
Cobalah online
sumber
c #, 75 byte
sumber