पृष्ठभूमि
एलिस और बॉब हर एक पीपीसीजी चुनौती को जीतने के लिए एक गोल्फ भाषा का निर्माण कर रहे हैं। ऐलिस दो आयामी भाषा बनाना चाहता है, जैसे> <>, लेकिन बॉब जे में एक उपसर्ग-इन्फिक्स सिंटैक्स पसंद करता है जैसे कि एक समझौता के रूप में, वे दो आयामी प्रीफिक्स-इन्फिक्स भाषा बनाने का निर्णय लेते हैं। पार्सर लिखने के लिए एक दर्द है, और उन्हें आपकी मदद की ज़रूरत है!
सिंटेक्स विनिर्देशन
ऐलिस और बॉब की भाषा में, चर होते हैं , जो निचले एस्केसी अक्षरों द्वारा दर्शाए जाते हैं a-z
, और फ़ंक्शन , जो अपरकेस एएससीआईआई पत्रों द्वारा दर्शाए जाते हैं A-Z
। एक फ़ंक्शन को एक या दो तर्कों के साथ लागू किया जा सकता है। एक प्रोग्राम अक्षरों a-zA-Z
और स्थानों का एक आयताकार ग्रिड है , और ऊपरी बाएं कोने में एक स्थान नहीं होना चाहिए। यह एक वैध कार्यक्रम का एक उदाहरण है:
F Gy
H
R x
जब कार्यक्रम पार्स किया गया है, यह एक सी शैली भाषा (सी, जावा, पायथन ...) प्रारूप में एक अक्षर चर और समारोह कॉल युक्त की अभिव्यक्ति के रूप में तब्दील है <func>(<arg>)
या <func>(<arg1>,<arg2>)
। उदाहरण के लिए, उपरोक्त कार्यक्रम इस अभिव्यक्ति का परिणाम है:
F(H(R(x)),G(x,y))
पार्सिंग प्रक्रिया का विवरण इस प्रकार है:
- रिक्त स्थान केवल भराव हैं, इसलिए वे पार्स नहीं हैं।
- प्रत्येक चर
a-z
हमेशा की तरह अपने आप में पार्स होता है। - प्रत्येक फ़ंक्शन
A-Z
को फ़ंक्शन कॉल के रूप में पार्स किया जाता है। इसके तर्क इसके नीचे और ग्रिड में इसके दाईं ओर सबसे निकटतम भाव हैं, इस क्रम में। यदि इनमें से केवल एक ही मौजूद है, तो इसे एकमात्र तर्क के रूप में दिया गया है। आप मान सकते हैं कि सभी कार्यों में ग्रिड में कम से कम एक तर्क है।
उपरोक्त उदाहरण में, चर x
और y
स्वयं के रूप में पार्स किए गए हैं। फ़ंक्शन के R
नीचे और x
इसके दाईं ओर कुछ भी नहीं है, इसलिए इसे एक-तर्क आह्वान के रूप में पार्स किया गया है R(x)
। इसी तरह, इसे नीचे के H
रूप में पार्स H(R(x))
किया R
गया है। फ़ंक्शन G
के x
नीचे और y
इसके दाईं ओर है, इसलिए इसे के रूप में पार्स किया गया है G(x,y)
, और इसी तरह के लिए F
। शीर्ष बाएं कोने में पार्स की गई अभिव्यक्ति पार्सिंग प्रक्रिया का परिणाम है।
इनपुट और आउटपुट
आपका इनपुट वर्णों का एक गैर-रिक्त आयताकार सरणी है। यह हमेशा ऐलिस और बॉब की भाषा में एक मान्य कार्यक्रम होगा, लेकिन इसमें ऐसे भाव हो सकते हैं जो आउटपुट में उपयोग नहीं किए जाते हैं। उपरोक्त प्रक्रिया के परिणामस्वरूप आपका आउटपुट पार्स अभिव्यक्ति होगी।
नियम और स्कोरिंग
आप किसी फंक्शन का पूरा प्रोग्राम लिख सकते हैं। सबसे कम बाइट गिनती जीतता है, और मानक खामियों को रोक दिया जाता है।
परीक्षण के मामलों
ये प्रारूप में दिए गए हैं grid <newline> expression
, ---
मामलों के बीच हाइफ़न के साथ । एसई प्रारूप कुछ लाइनों को खाली छोड़ देता है, लेकिन उन्हें रिक्त स्थान से भरा होना चाहिए।
x
x
---
x y
z
x
---
Fx
F(x)
---
Fx
y
F(y,x)
---
ABu
A(B(u))
---
G
H
k
G(H(k))
---
ABCA
x xs
DFk
A(x,B(D(F(k)),C(x,A(s))))
---
A B
C D x
A(C(D(x)),B(D(x)))
---
RT Hq
I xR k
R(I(x),T(H(R(k),q)))
---
A A A a
S A b
B C Dx
d X u f
A(B(d,C(D(f,x))),A(X(u),A(u,a)))
(A (B (D x)) (C (D x)))
उपयुक्त होगा या क्या प्रारूप तय किया गया है?