Tantangan Anda adalah menentukan apakah input yang diberikan adalah integer, string, atau desimal.
Aturan
- String adalah input apa pun yang bukan bilangan bulat atau float
- Integer harus hanya berisi karakter numerik dan tidak boleh dimulai dengan nol
- Desimal adalah input apa pun yang berisi titik (
.
) dan titik tersebut dikelilingi oleh karakter numerik.
Catatan: .01 tidak dianggap sebagai desimal yang valid.
- Program harus menampilkan string mentah baik "string", "integer", atau "desimal".
- Anda dapat mengasumsikan hanya karakter ASCII yang dapat dicetak yang digunakan
Kasus:
asdf -> string
asdf3.4 -> string
2 -> integer
2.0 -> decimal
02 -> string
40. -> string
. -> string
.01 -> string
0.0 -> decimal
.9.9.9 -> string
[empty space] -> string
EDIT: Memperbaiki kesalahan ketik. Maksud saya .01 tanpa nol di depan, bukan dengan. Jika itu membuatnya tidak jelas, ini sudah diperbaiki sekarang!
Ini kode-golf , jadi jawaban tersingkat menang.
02
tidak dianggap sebagai bilangan bulat karena sebagian besar bahasa memangkas angka nol di depan ketika jenisnya adalahinteger
tetapi tetap angka nol di depan ketika disimpan sebagaistring
. Meskipun, saya dengan @isaacg bahwa jika0.0
dianggap desimal, maka0.01
harus juga demikian..01
tidak masuk akal, saya kira ...Jawaban:
Pyth, 33 byte (39 tanpa string yang dikemas)
Beberapa byte dilucuti karena penurunan harga. Kode resmi dan test suite.
Tanpa string yang dikemas:
Itu melewati semua kasus uji di atas. Pada dasarnya, untuk memeriksa apakah suatu string bilangan bulat atau desimal, ia memeriksa apakah string tersebut dapat dievaluasi sebagai python literal (
v
), dan jika demikian, jika Anda dapat menambahkan 0 ke dalamnya dan rahasia kembali ke representasi stringnya, dan mendapatkan string input. Jika demikian, itu adalah bilangan bulat atau desimal. Jika Anda juga bisa melemparkannya ke int dan masih mendapatkan string asli kembali, itu adalah integer.sumber
Javascript,
11212187 byteTerima kasih kepada @ edc65 untuk menghemat 34 byte dengan mengonversi kode asli (dalam penjelasan) ke ES6. Saya tidak mengubah penjelasan karena itu menunjukkan logika yang lebih baik.
Ini pada dasarnya mengubah aturan untuk bilangan bulat dan desimal dalam pertanyaan menjadi pemeriksaan regex, dan mengujinya terhadap input yang diberikan. Jika input tidak cocok, maka itu harus berupa string. Itu melewati semua tes yang diberikan dalam pertanyaan.
Penjelasan + tidak dikelompokkan
}
sumber
01.23
.b("0.123")
koper. Maaf tentang itu, karena hanya secara eksplisit disebutkan dalam pertanyaan bahwa bilangan bulat tidak dapat memiliki angka nol, saya berasumsi itu tidak berlaku untuk desimal.a=>/^[1-9]\d*$/.test(a)?"integer":/^([1-9]\d+|\d)\.\d+$/.test(a)?"decimal":"string"
... toh bukan yang sesingkat mungkinb=
agar berfungsi di Chrome. Bagi saya, ini menunjukkan yang asli yang Anda posting menjadi 85 byte, bukan 83, ditambah 2 byte dengan total 87.b=
) tidak dihitung. Dan sisanya adalah 83, waspadalah terhadap karakter aneh yang tidak terlihat yang dimasukkan oleh editor komentar - ada beberapa di komentar saya sebelumnya antara "str" dan "ing"Java, 133 byte
sumber
JavaScript (ES6), 74
75Edit 1 byte disimpan thx Zequ
Uji
sumber
[^0\D]
dalam pertandingan regex ke[1-9]
Perl 5, 59 byte
Dengan
-p
argumen pada baris perintah (yang dihitung ke dalam jumlah byte):sumber
.0
. Untuk apachop
?Perl 6 , 61 byte
Pemakaian:
sumber
Python 2, 148 byte
sumber
JavaScript ES6,
7470 bytesumber
02
?/^\d+$/
menjadi^[1-9]\d*
(75 byte)