इस कार्य में आपको एक प्रोग्राम लिखना होता है जो एक रेगुलर एक्सप्रेशन पढ़ता है और दूसरा प्रोग्राम तैयार करता है जो उस रेगुलर एक्सप्रेशन द्वारा इनपुट स्ट्रिंग को स्वीकार करता है या नहीं। आउटपुट आपके प्रस्तुतिकरण के रूप में उसी भाषा में लिखा गया प्रोग्राम होना चाहिए।
इनपुट
इनपुट एक रेगुलर एक्सप्रेशन है आर निम्नलिखित ABNF (प्रारंभिक उत्पादन नियम है मिलान REGEX
):
REGEX = *( STAR / GROUP / LITERAL / ALTERNATIVE )
STAR = REGEX '*'
GROUP = '(' REGEX ')'
LITERAL = ALPHA / DIGIT
ALTERNATIVE = REGEX '|' REGEX
यदि इनपुट इस व्याकरण से मेल नहीं खाता है, तो आपके प्रोग्राम का व्यवहार अपरिभाषित है।
व्याख्या
एक नियमित अभिव्यक्ति के रूप में इनपुट की व्याख्या करें, जहां *
क्लेन-स्टार (मतलब दोहरा हुआ तर्क शून्य या अधिक बार दोहराएं ), |
एक विकल्प है, (
और )
समूह और कोई भी ऑपरेटर नहीं है। समूहन स्टार से अधिक पूर्वता लेता है, तारा संगति पर पूर्वता लेता है, संगति विकल्प से अधिक पूर्वता लेता है।
एक स्ट्रिंग को स्वीकार किया जाता है यदि रेगेक्स पूरे स्ट्रिंग से मेल खाता है।
उत्पादन
कार्यक्रम के उत्पादन है कि एक स्ट्रिंग पढ़ता आपके सबमिशन रूप में एक ही भाषा में लिखे गए एक अन्य कार्यक्रम है रों रनटाइम पर एक कार्यान्वयन परिभाषित रास्ते में, आउटपुट चाहे आर स्वीकार करता रों और उसके बाद समाप्त हो जाता है। आउटपुट उपयोगकर्ता-परिभाषित तरीके से किया जा सकता है, हालांकि स्वीकृत और अस्वीकृत कार्यक्रमों के लिए केवल दो अलग-अलग आउटपुट होने चाहिए।
आप मान सकते हैं कि आपके आउटपुट प्रोग्राम का इनपुट 2 16 -1 बाइट्स से अधिक लंबा नहीं है ।
प्रतिबंध
न तो आपका सबमिशन और न ही आपके सबमिशन से उत्पन्न कोई प्रोग्राम बिलिन फंक्शनलिटी या लाइब्रेरीज़ का इस्तेमाल कर सकता है
- मैच रेग्जेस
- नियमित अभिव्यक्ति को बदलना
- नियमित अभिव्यक्ति संकलित करें
- एक व्याकरण से पार्सर उत्पन्न करते हैं
- समस्या को इस तरह से सरल बनाएं कि आपका सबमिशन तुच्छ हो जाए
स्कोरिंग
आपके सबमिशन का स्कोर वर्णों की संख्या है। सबसे कम स्कोर के साथ सबमिशन जीत जाता है।
परीक्षण के मामलों
सभी टेस्टकेस में एक नियमित अभिव्यक्ति, स्वीकृत स्ट्रिंग्स का एक सेट, अस्वीकृत स्ट्रिंग्स का एक सेट और C99 में एक उदाहरण कार्यक्रम होता है जो कि (hyptothetical) C99 सबमिशन का एक मान्य आउटपुट है।
(खाली नियमित अभिव्यक्ति)
स्वीकार किए जाते हैं तार
- (खाली इनपुट)
तार हटा दिए
- foo
- बार
- baz
- quux
उदाहरण कार्यक्रम
#include <stdio.h>
int main() {
char input[65536];
gets(input);
return input[0] != 0;
}
(b|)(ab)*(a|)
( a
और b
बारी - बारी से)
तार स्वीकार किए जाते हैं
a
ba
abababababa
abab
अस्वीकार किए गए तार
afba
foo
babba
उदाहरण कार्यक्रम
#include <stdio.h>
int main() {
char input[65536];
int state = 0;
for (;;) switch (state) {
case 0: switch (getchar()) {
case 'a': state = 1; break;
case 'b': state = 2; break;
case EOF: return 0;
default: return 1;
} break;
case 1: switch (getchar()) {
case 'b': state = 2; break;
case EOF: return 0;
default: return 1;
} break;
case 2: switch (getchar()) {
case 'a': state = 1; break;
case EOF: return 0;
default: return 1;
} break;
}
(0|1(0|1)*)(|A(0|1)*1)
(बाइनरी फ्लोटिंग पॉइंट नंबर)
तार स्वीकार किए जाते हैं
- 10110100
- 0
- 1A00001
अस्वीकार किए गए तार
- 011
- 10:00 पूर्वाह्न
- 1A00
- 100A010
return (regex.match(stdin) is not null)
अनुमति नहीं है।