Hãy tưởng tượng tôi có vô số bài toán về nhà (!) Mỗi bài cho một số nguyên.
Ký hiệu vấn đề toán học là một ký hiệu để mô tả các tập hợp con của vấn đề bằng cách sử dụng các chỉ định vấn đề.
Biểu thức MPN có thể bao gồm một số điều:
- Một giá trị duy nhất. Điều này đại diện cho một bộ chứa số :
99 -> {99}
. - Một phạm vi đơn giản. Điều này thể hiện tập hợp chứa tất cả các số từ đầu đến cuối phạm vi :
10~13 -> {10, 11, 12, 13}
. Nếu bên trái hoặc bên phải bị thiếu, thì chúng được giả sử là -Infinity hoặc Infinity tương ứng :~10 -> {x|x ≤ 10}
;~ -> ℤ
. - Một biểu thức MPN, theo sau là "bỏ qua" và một biểu thức MPN khác. Điều này thể hiện sự khác biệt của hai bộ :
10~20 skip 12~14 -> {10, 11, 15, 16, 17, 18, 19, 20}
. - Hai biểu thức MPN, cách nhau bằng dấu phẩy. Điều này đại diện cho sự kết hợp của hai bộ :
1,8~9,15~17 -> {1,8,9,15,16,17}
.
Toán tử "bỏ qua" liên kết chặt chẽ hơn toán tử dấu phẩy, vì vậy 16,110~112 skip 16 -> {16,110,111,112}
(16 không được bao gồm trong tập hợp {110,111,112}
, vì vậy việc loại trừ 16 không thành vấn đề.)
Bạn cũng có thể đặt biểu thức trong ngoặc đơn để định hướng:
1~9 skip (2~8 skip (3~7 skip (4~6 skip 5))) -> {1,3,5,7,9}
Đây là ngữ pháp:
<expr> ::= "(" <expr> ")"
|| <number>
|| [<number>] "~" [<number>]
|| <expr> "skip" <expr>
|| <expr> "," <expr>
Nhiệm vụ của bạn là viết một chương trình có hai đầu vào:
- Biểu thức MPN
- Một số
và đưa ra một số giá trị trung thực hoặc falsey tùy thuộc vào vấn đề đó có nằm trong tập được mô tả bởi biểu thức MPN hay không.
Thông số kỹ thuật
- Bạn có thể giả sử rằng đầu vào đầu tiên là một biểu thức MPN được định dạng tốt (nghĩa là nó phù hợp với ngữ pháp trên)
- Các số trong biểu thức MPN luôn là số nguyên. Chúng có thể âm hoặc bằng 0, nhưng sẽ không bao giờ có phần phân số.
- Đây là môn đánh gôn , vì vậy bài nộp hợp lệ ngắn nhất (tính bằng byte) sẽ thắng.
- Bạn có thể sử dụng các ký tự khác nhau cho
~
và,
, nếu bạn muốn.
Các trường hợp thử nghiệm
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
~
và ,
, nhưng không cho skip
.
6 skip 6,~
mà tôi tin rằng tôi đã giải thích chính xác. Hai câu trả lời khác cho đến nay không thỏa mãn nó (một lần nữa, giả sử tôi đang giải thích chính xác). Nếu tôi hiểu nhầm xin vui lòng sửa nó và làm rõ, nhưng theo hiểu biết của tôi, nó sẽ phù hợp với bất cứ điều gì (đó là sự kết hợp của một tập hợp không có gì phù hợp với một tập hợp phù hợp với tất cả mọi thứ). Đây là những trường hợp tôi đã nói trước đó mà tôi nghĩ có thể giúp ích rất nhiều khi thử nghiệm các giải pháp của chúng tôi.