Bayangkan saya memiliki banyak masalah pekerjaan rumah (!) Yang masing-masing diberi angka integer.
Notasi Masalah Matematika adalah notasi untuk menggambarkan himpunan bagian dari masalah menggunakan penentu masalah.
Ekspresi MPN dapat terdiri dari beberapa hal:
- Nilai tunggal. Ini merupakan set yang berisi nomor:
99 -> {99}
. - Kisaran yang sederhana. Ini merupakan set yang berisi semua angka dari awal sampai akhir rentang:
10~13 -> {10, 11, 12, 13}
. Jika sisi kiri atau kanan hilang, maka mereka diasumsikan -infinity atau Infinity masing-masing:~10 -> {x|x ≤ 10}
;~ -> ℤ
. - Ekspresi MPN, diikuti oleh "lewati" dan ekspresi MPN lainnya. Ini merupakan selisih dari dua set:
10~20 skip 12~14 -> {10, 11, 15, 16, 17, 18, 19, 20}
. - Dua ekspresi MPN, dipisahkan oleh koma. Ini merupakan penyatuan dua set:
1,8~9,15~17 -> {1,8,9,15,16,17}
.
Operator "lewati" mengikat lebih ketat daripada operator koma, jadi 16,110~112 skip 16 -> {16,110,111,112}
(16 tidak termasuk dalam set {110,111,112}
, sehingga 16 yang tidak termasuk tidak menjadi masalah.)
Anda juga dapat menaruh ekspresi dalam tanda kurung untuk disambiguasi:
1~9 skip (2~8 skip (3~7 skip (4~6 skip 5))) -> {1,3,5,7,9}
Ini adalah tata bahasanya:
<expr> ::= "(" <expr> ")"
|| <number>
|| [<number>] "~" [<number>]
|| <expr> "skip" <expr>
|| <expr> "," <expr>
Tugas Anda adalah menulis sebuah program yang membutuhkan dua input:
- Ekspresi MPN
- Sebuah angka
dan menghasilkan beberapa nilai true atau falsey tergantung pada apakah masalah itu dalam set yang dijelaskan oleh ekspresi MPN.
Spesifikasi
- Anda dapat mengasumsikan bahwa input pertama adalah ekspresi MPN yang terbentuk dengan baik (yaitu cocok dengan tata bahasa di atas)
- Angka dalam ekspresi MPN selalu bilangan bulat. Mereka bisa negatif atau nol, tetapi tidak akan pernah memiliki bagian fraksional.
- Ini adalah kode-golf , sehingga pengiriman terpendek yang valid (diukur dalam byte) menang.
- Anda dapat menggunakan karakter yang berbeda untuk
~
dan,
, jika Anda mau.
Uji Kasus
10~20 14 -> True
10~20 20 -> True
10~20 skip 14~18 17 -> False
~ skip 6 8 -> True
16,17 skip 16 16 -> True
(16,17) skip 16 16 -> False
~10,5~ 8 -> True
~10,5~ 4 -> True
6 skip 6,~ 6 -> True
~
dan ,
, tetapi tidak untuk skip
.
6 skip 6,~
yang saya yakin telah saya artikan dengan benar. 2 jawaban lainnya sejauh ini tidak memuaskan (sekali lagi, dengan asumsi saya menafsirkan dengan benar). Jika saya salah paham, mohon perbaiki dan klarifikasi, tetapi dari pemahaman saya, itu harus cocok dengan apa pun (penyatuan set yang tidak cocok dengan set yang cocok dengan segalanya). Ini adalah jenis kasus yang saya bicarakan sebelumnya yang saya pikir dapat banyak membantu ketika menguji solusi kami.