वर्णमाला के ऊपर एक व्याकरण पर विचार करें { 0
, 1
, ?
, :
} द्वारा परिभाषित उत्पादन नियम
रों →
0
┃1
┃0
?
रों:
रों ┃1
?
रों:
रों
एस से उत्पन्न एक स्ट्रिंग को देखते हुए , इसे एक अभिव्यक्ति के रूप में पार्स करें जहां ?:
सही-सहयोगी है (उदाहरण के लिए, 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
नियम
- आप ऐसी भाषा में निर्मित भाषा का उपयोग नहीं कर सकते हैं जो कुछ प्रोग्रामिंग भाषा में कोड के रूप में स्ट्रिंग की व्याख्या करती है और इसे चलाती है (जैसे जावास्क्रिप्ट / पर्ल / रूबी / पायथन के
eval
)। - उस ने कहा, आपके कोड को वास्तव में पार्स नहीं करना है और फिर इनपुट स्ट्रिंग का मूल्यांकन करना है। आप किसी भी दृष्टिकोण को बराबर परिणाम प्राप्त कर सकते हैं और पिछले नियम का उल्लंघन नहीं कर सकते।
- आपके कार्यक्रम के खिलाफ जाँच की जाएगी
perl -le 'print eval<>'
। - सबसे छोटा कोड (बाइट्स में) जीतता है।
S → T | T ? S : S
, T → 0 | 1
, संबद्धता के बारे में बात करने के लिए की आवश्यकता नहीं पड़ती?