Tulis kode untuk mengevaluasi apakah rantai ketidaksetaraan itu benar atau salah. Contoh input adalah string
3<=4!=9>3==3
Ini benar karena masing-masing komponennya benar:
(3<=4) and (4!=9) and (9>3) and (3==3)
Memasukkan:
String yang mewakili rantai satu atau lebih ketidaksetaraan. Operator perbandingan yang diizinkan adalah
== equals
!= does not equal
> is greater than
>= is greater than or equal to
< is less than
<= is less than or equal to
Nomor diperbolehkan adalah nomor satu digit 0
melalui 9
. Tidak akan ada spasi, tanda kurung, atau simbol lainnya.
Keluaran:
Ketepatan ketidaksetaraan sebagai nilai Kebenaran atau Falsey yang konsisten . Konsisten berarti setiap output Kebenaran adalah sama dan setiap output Falsey adalah sama.
Larangan:
Maksud dari tantangan ini adalah bagi Anda untuk menulis kode yang memproses ketidaksetaraan, daripada meminta mereka untuk mengevaluasinya sebagai kode, bahkan untuk satu ketidaksetaraan dalam rantai. Dengan demikian, metode seperti Python eval
dan exec
yang mengevaluasi atau mengeksekusi kode dilarang. Begitu juga fungsi yang mencari metode atau operator yang diberi nama sebagai string. Juga tidak diperbolehkan meluncurkan proses atau program untuk melakukan evaluasi untuk Anda.
Kasus uji:
3<=4!=9>3==3
True
3<=4!=4
False
5>5
False
8==8<9>0!=2>=1
True
Jawaban:
Ruby, 71 + 1 = 72
Dengan bendera baris perintah
-n
, jalankanMenghasilkan semua kemungkinan ekspresi reguler yang gagal, dan memeriksa apakah string input cocok dengan salah satu dari mereka. Keluaran
true
jika tidak ada yang melakukannyafalse
. Mengambil input melalui STDIN, dipisahkan oleh baris baru.Trik:
a<=>b
, yang mengembalikan -1,0, atau 1 kurang dari, sama dengan, atau lebih besar. Ini semua mengiris elemen yang berbeda dari array tiga-string, menemukan ekspresi reguler untuk perbandingan yang tidak cocok.sumber
Perl, 82
Mencetak 1 saat true dan baris kosong ketika false, karena string kosong adalah nilai falsey utama Perl.
Loop sementara melewati string yang cocok dengan regex
\d(.)(=?)
. Kemudian variabel$1
dan$2
sesuai dengan karakter operator, dan variabel khusus$&
dan$'
akan berperilaku sebagai dua operan dalam konteks numerik. Operan dibandingkan dengan<=>
dan hasilnya cocok dengan karakter pertama operator. Kemudian persamaan dan ketidaksetaraan ditangani secara khusus.sumber
CJam, 60 byte
Kode ini tampak agak jelek dan berpotensi tidak sepenuhnya dioptimalkan, tetapi itu yang terbaik yang saya dapatkan sejauh ini.
Cobalah online.
Penjelasan
sumber
JavaScript (ES6) 110
116Mudah: string pindai, c adalah digit saat ini, l adalah digit terakhir, o adalah operator.
Uji di Firefox / konsol FireBug
sumber
Haskell, 156 byte
Contoh penggunaan:
Versi tidak disatukan:
eval
membutuhkan dua argumen: string ke parse (dimulai selalu dengan operator perbandingan) dan angkai
yang merupakan argumen kiri untuk perbandingan (dan argumen yang tepat di babak sebelumnya). Operator dikembalikan olehlookup2
jika itu adalah operator dua karakter (periksa hanya karakter pertama, karena karakter kedua selalu=
) danlookup1
jika itu hanya karakter tunggal.eval
panggilan itu sendiri secara rekursif dan menggabungkan semua nilai kembali dengan logis dan&&
.sumber
Gangguan Umum -
300185169165Contoh
Penjelasan
ppcre:split
terbagi dua; sebagai contoh:Perhatikan string kosong pertama, yang dibuang menggunakan
cdr
Pemetaan
read-from-string
ke daftar ini memanggilread
fungsi untuk setiap string, yang mengembalikan simbol dan angka.loop for (a op b) on '(3 < 5 > 2) by #'cddr
iterates atas daftar dengan langkah 2 dan dengan demikian mengikata
,op
danb
sebagai berikut, untuk setiap operan berturut-turut.always
memeriksa apakah ungkapan berikutnya selalu benar: apakah operatornyanil
(lihat di atas) atau hasil dari perbandingan berlaku (lihat di bawah).yang
case
menyeleksi Common-Lisp fungsi perbandingan, menurut simbol sebelumnya baca; karena beberapa operator identik dalam Lisp dan bahasa yang diberikan kita dapat dengan mudah kembalio
dalam kasus default.sumber
Python 2,
95102Loop adalah lintasan langsung ke string karakter satu per satu. Bagian
t&=...
inilah tempat keajaiban terjadi. Pada dasarnya, saya hash operator bersama dengan nilaicmp(lhs,rhs)
(-1, 0, atau 1 tergantung pada apakahlhs
kurang, sama, atau lebih besar darirhs
). Hasilnya adalah kunci ke dalam tabel pencarian yang memberikan 0 atau 1 tergantung pada apakah angka membandingkan dengan benar diberikan operator itu. Tabel pencarian apa, Anda bertanya? Itu angka 627 =0001001110011
dalam biner. Operator bitwise melakukan sisanya.Ini bekerja pada empat kasus uji yang diberikan; beri tahu saya jika Anda menemukan kesalahan untuk kasus lain. Saya belum mengujinya dengan sangat ketat.
sumber
a
sebagai masukan.Javascript 101 byte
pendekatan yang berbeda dari solusi js yang diposting di sini
sumber
Java 8, 283 byte
Penjelasan:
Coba di sini.
sumber