Diberikan ekspresi infiks, tentukan apakah semua konstanta memiliki tipe yang sama.
Operator hanya akan terdiri dari operator diad ini :+-/*
Program atau fungsi Anda harus mengambil string ekspresi yang valid sebagai input, dan menampilkan nilai kebenaran jika konstanta dalam ekspresi adalah waktu yang sama, dan nilai falsey sebaliknya.
Ekspresi hanya akan terdiri dari konstanta, dan dapat berisi salah satu dari jenis berikut:
- String, dari bentuk
"String"
(Selalu kutip ganda, dapat kosong, tanpa karakter pelarian, dapat berisi teks ASCII) - Integer, dari formulir
14
(Selalu positif atau nol) - Float, dari bentuk
7.3f
(Selalu positif atau nol, selalu memiliki komponen desimal, misalnya14.0f
) - Byte, dari formulir
0x42
(0-255
, Selalu 2 karakter heksadesimal) - Boolean, dari bentuk
true
(true
ataufalse
, case-sensitive)
Ekspresi tidak akan mengandung tanda kurung, karena urutan operasi tidak mempengaruhi tipe ketika tidak ada tipe paksaan.
Satu-satunya konstanta tanpa operator adalah ekspresi yang valid.
Ekspresi kosong bukanlah ekspresi yang valid.
Anda dapat mengasumsikan bahwa string ekspresi tidak mengandung spasi putih di luar string literal.
Catatan: Atau Anda dapat mengasumsikan bahwa akan selalu ada ruang antara konstanta dan operator, seperti yang terlihat di dalam testcases. Jika Anda membuat asumsi ini, sebutkan seperti dalam jawaban Anda
Anda tidak harus menangani ekspresi tidak valid seperti 1 +
.
Mencetak gol
Ini kode-golf , byte paling sedikit menang!
Uji kasus
(Whitespace ditambahkan untuk dibaca)
2 + 3
True
"Hello" / "World"
True
true * false
True
"Hello" + 4
False
"Hello" + "4"
True
3 + 2.4f / 8
False
0xff * 0xff
True
0xff + 2
False
6
True
" " + ""
True
"4 + false" + "word"
True
sumber
truE+fALSe
.). Jika tidak, saya dapat menyimpan dua byte dalam solusi saya.Jawaban:
JavaScript (ES6),
79 7775 byteDisimpan 2 byte berkat @ExpiredData
Mengharapkan ruang kosong di sekitar operator. Mengembalikan nilai Boolean.
Cobalah online!
Bagaimana?
/".*?"/g
/0x../g
/\S+f/g
/\d/
; jika kita menemukannya, setidaknya harus ada satu bilangan bulat"e"
atau"E"
dengan/e/i
; jika kita menemukannya, setidaknya harus ada satu nilai BooleanSemua ekspresi yang dihapus sebenarnya diganti dengan koma, yang tidak berbahaya.
Kami memfilter ekspresi reguler yang menyebabkan tidak ada perubahan pada string input dan menguji apakah kurang dari dua dari mereka tetap pada akhir proses.
sumber
true
danfalse
ditandai sebagai tidak sensitif huruf, saya pikir itu berarti Anda harus membuat huruf besar-besar abaikan saat mencarit
dans
(saya bisa salah).Perl 5
-p
, 73 byteCobalah online!
Bagaimana?
Coba hapus string, float, hex, boolean, dan integer, dalam urutan itu. Hentikan segera setelah sesuatu dihapus. Setelah berhenti, periksa untuk melihat apakah string yang tersisa hanya terdiri dari operator dan spasi putih. Jika ya, pemeriksaan trype benar; jika tidak, itu salah.
Upaya pertama: Perl 5
-MList::Util=all
-p
, 99 byteCobalah online!
sumber
$_=/^[+\/* -]*$/
dapat diubah oleh$_=!y#-+/* ##c
, dan....?e
oleh.*e
Jelly ,
3023 byteCobalah online!
Tautan monadik yang menggunakan string sebagai input dan mengembalikan 1 untuk true dan 0 untuk false (nilai boolean Jelly). Mengharapkan ruang kosong di sekitar operator.
Saya telah menambahkan beberapa test case baru ke TIO termasuk satu dengan tiga operator dan satu dengan case campuran untuk boolean.
Penjelasan
sumber
C # (Visual C # Interactive Compiler) ,
113111109 bytePort jawaban javascript Arnauld . Adalah 72 byte dengan bendera
/u:System.Text.RegularExpressions.Regex
.Cobalah online!
sumber
Japt
-!
, 36 byteCobalah
sumber
05AB1E ,
5024 byte-26 byte dengan membuat port dari jawaban Jelly @NickKennedy , jadi pastikan untuk membesarkannya !!
Mengharapkan input dengan spasi di operan.
Cobalah online atau verifikasi semua (ditambah beberapa lagi) kasus uji .
Penjelasan:
sumber
Python 2 , 102 byte
Cobalah online!
Tidak sepenuhnya yakin bagaimana mewakili beberapa tipe ini dengan Python. Misalnya, 0xff dan 2 sama-sama diperlakukan sebagai bilangan bulat. Dan 2.4f bukan tipe yang valid dalam Python, saya pikir. Dikapitalisasi Benar dan Salah untuk menguji Boolean.
Edit: Tata Bahasa
sumber
true * false
.Stax , 26 byte
Jalankan dan debug itu
Program ini mengharapkan ruang di sekitar operator. Secara umum, ini bekerja dengan menerapkan beberapa transformasi pada input sehingga karakter maksimum untuk setiap jenis ekspresi berbeda.
Dibongkar, tidak diserang, dan dikomentari, sepertinya ini.
Jalankan yang ini
sumber
Haskell, 140 Bytes
sumber
f x=let z=...in ...
bisaf x|z<-...=...
.