পটভূমি
প্রতিটি পিপিসিজি চ্যালেঞ্জ জয়ের জন্য অ্যালিস এবং বব একটি গল্ফিং ভাষা তৈরি করছে। অ্যালিস> <> এর মতো একটি দ্বি-মাত্রিক ভাষা তৈরি করতে চায় তবে বব জে-র মতো একটি উপসর্গ-ইনফিক্স সিনট্যাক্স পছন্দ করে a পার্সারটি লেখার জন্য একটি ব্যথা এবং তাদের আপনার সহায়তা প্রয়োজন!
সিনট্যাক্স স্পেসিফিকেশন
অ্যালিস এবং ববের ভাষায়, ভেরিয়েবলগুলি রয়েছে , যা ছোট হাতের ASCII বর্ণগুলি a-z
এবং ফাংশনগুলি দ্বারা উপস্থাপিত হয়, যা বড় হাতের ASCII অক্ষর দ্বারা প্রতিনিধিত্ব করা হয় 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)))
উপযুক্ত হবে বা বিন্যাস ঠিক আছে?