พิจารณาไวยากรณ์กว่าอักษร{ 0
, 1
, ?
, :
}กำหนดโดยกฎการผลิต
s →การ
0
┃1
┃0
?
s:
s ┃1
?
s:
s
รับสตริงที่สร้างจากs , แยกมันเป็นนิพจน์ที่?:
เป็นความสัมพันธ์ที่ถูกต้อง (ตัวอย่างเช่นa?B?X:Y:c?d:e?f:g
หมายถึงa?(B?X:Y):(c?d:(e?f:g))
) และประเมินด้วยความหมายต่อไปนี้:
eval(0) = 0
eval(1) = 1
eval(0?a:b) = eval(b)
eval(1?a:b) = eval(a)
ถ้าผลลัพธ์เป็น0ให้เอาท์พุทค่าคงที่บางค่า ถ้าผลลัพธ์คือ1ให้เอาท์พุทค่าคงที่ที่ต่างออก ระบุค่าผลลัพธ์ที่คุณเลือก (เช่น0
/ 1
หรือFalse
/ True
) ในคำตอบของคุณ
กรณีทดสอบ
0 -> 0
1 -> 1
0?0:1 -> 1
0?1:0 -> 0
1?0:1 -> 0
1?1:0 -> 1
0?1?0:1:1 -> 1
1?0?1:1:1 -> 1
1?0:1?0:1?1:1 -> 0
1?1?1:0?1?0:0:0:0 -> 1
1?0:1?0?1:1?1:0:1?1?1:1:1?0:1 -> 0
1?1?1:0?0?1:1:0?1:0:1?1?0?0:0:1?1:0:0?1?0:1:1?0:1 -> 1
0?0?1?0?0:1:0?0:0:0?0?1:1:1?0:1:0?0?0?1:0:0?1:1:1?1?0:1:1 -> 0
กฎระเบียบ
- คุณไม่สามารถใช้ภาษาในตัวที่ตีความสตริงเป็นรหัสในภาษาการเขียนโปรแกรมบางส่วนและเรียกใช้ (เช่น JavaScript / Perl / Ruby / Python
eval
) - ที่กล่าวว่ารหัสของคุณไม่จริงต้องแยกแล้วประเมินสายป้อน คุณสามารถใช้วิธีการใด ๆ เพื่อให้ได้ผลลัพธ์ที่เทียบเท่าและไม่ละเมิดกฎก่อนหน้า
perl -le 'print eval<>'
โปรแกรมของคุณจะได้รับการตรวจสอบกับ- รหัสที่สั้นที่สุด (เป็นไบต์) ชนะ
S → T | T ? S : S
, T → 0 | 1
เอาความต้องการที่จะพูดคุยเกี่ยวกับการเชื่อมโยงกัน?