+ محدودیت زمان: ۱ ثانیه
+ محدودیت حافظه: ۲۵۶ مگابایت
----------
با بوجود آمدن زبانهای برنامهنویسی متنوع بسیار با نامهای غیر قابل توصیف، "حاج اصغر" نیز تصمیم گرفت برای خود زبانی طراحی کند و آن را "ذله" (یا Zelle) نامید.
او نحوهی برنامهنویسی با زبانش را به جهانیان ارائه کرد تا همه بتوانند از زبان زیبایش استفاده کنند.
هر برنامه به زبان "ذله" به شکل زیر است:
+ یک برنامه شامل تعدادی "محدوده" یا "scope" است. در ابتدای هر scope یک سطر که شامل آکولاد باز (یا `{`) میشود آمدهاست و در انتهای آن یک سطر که شامل آکولاد بسته (یا `}`) میشود آمدهاست. یک محدوده میتواند شامل تعدادی محدوده شود؛ به این صورت که کل محدودهی داخلی بین شروع و پایان محدودهی خارجی قرار داشته باشد. برای مثال، برنامهی زیر ۳ محدوده دارد که یکی شامل ۲ تای دیگر میشود:
{
{
}
{
}
}
+ در هر محدوده تعدادی متغیر میتوان تعریف کرد که در آنها میتوان یک مقدار عددی نگهداشت. هر متغیر بصورت زیر تعریف میشود:
set name = value ;
که name برابر نام متغیر است و value یک عبارت است که نمایانگر مقدار اولیهی در این متغیر است. برای مثال:
set a = 24 + 18 - 10 ;
یک متغیر بهنام a تعریف میکند و مقدار آن را برابر ۳۲ قرار میدهد. نام یک متغیر باید رشتهای شامل تنها حروف کوچک انگلیسی باشد. همچنین نام یک متغیر نباید برابر set یا print باشد.
اگر متغیر در محدودهای تعریف شود، تنها در آن محدوده و تنها در سطرهای بعد از تعریفش قابل استفاده است. (دقت کنید که اگر محدودهای باشد که این محدوده شاملش شود و پس از تعریف این متغیر شروع شده باشد، این متغیر در آن محدوده نیز تعریف شدهاست. همچنین دقت کنید که وقتی محدودهای که متغیر در آن تعریفشده است تمام شود، متغیر در سطرهای بعدی آن تعریف شده نیست.)
میتوان مقدار یک متغیر را پس از تعریف آن بصورت زیر تغییر داد:
name = value ;
که name نام متغیری است که باید تغییر کند و value عبارتیاست که حاصلش مقدار جدید این متغیر است. برای مثال:
set a = 2 ;
set b = 5 ;
a = a - b ;
هنگام تعریف یک متغیر، نباید نام متغیر دیگری که در همین محدوده تعریف شدهاست برابر با نام متغیر جدید باشد. اگر یک متغیر در محدودهی دیگری که شامل محدودهی کنونی میشود تعریف شده باشد مشکلی ندارد که نام این دو متغیر برابر باشند. در این حالت وقتی که دو متغیر همنام موجود است، هرکجا به متغیری به آن نام اشاره شود متغیری که دیرتر تعریف شدهاست (یعنی در محدودهی کوچکتری تعریف شدهاست) در نظر گرفته میشود.
برای مثال، برنامهی زیر درست نیست:
{
set a = 5 ;
set a = 6 ;
}
اما برنامهی زیر درست است:
{
set a = 5 ;
{
set a = 6 ;
}
}
+ دستور print نیز یک عبارت را در خروجی برنامه مینویسد. نحوهی کار با این دستور به شکل زیر است:
print value ;
که value عبارتیاست که حاصلش باید در یک سطر از خروجی نوشته شود. برای مثال:
print a + b - c ;
+ هر برنامه باید یک scope اصلی داشته باشد که بقیه برنامه درون آن قرار بگیرد و قبل و بعد از این scope هم دستور یا scope دیگری وجود نداشته باشد.
+ یک عبارت در زبان "ذله" شامل تعدادی عدد/متغیر است که بینشان عملگر جمع یا تفریق به صورت + یا - ، همراه با فاصله آمده است. اعداد داخل یک عبارت همه صحیح و مثبت هستند.
+ در پایان هر خط دستوری یک کاراکتر ; با فاصله میآید.
همچنین نباید در عبارت هنگام تعریف یک متغیر از آن و یا متغیری همنام با آن استفاده کرد.
حال جهانیان از دیدن این زبان زیبا به وجد آمدهاند و تعداد زیادی برنامه به زبان "ذله" نوشتهشده است. اما حاج اصغر حواسش به این موضوع نبود که باید برای این زبان یک کامپایلر نیز بنویسد! حال او این وظیفه را به شما محول کرده است؛ شما باید برنامهای بنویسید که با ورودی گرفتن یک کد که به زبان "ذله" نوشتهشده، بگوید که آیا مشکلی در این برنامه وجود دارد و اگر وجود نداشت، بگوید گه این برنامه در خروجی چه مقادیری را مینویسد.
# ورودی
ورودی از تعدادی خط تشکیل شده است که برنامه را میسازند. میتوانید فرض کنید برنامه ورودی حداکثر از ۱۰۰ خط تشکیل شده که هر خط شامل یک دستور، آکولاد باز و یا آکولاد بسته است. همچنین ممکن است برای خواناتر شدن در برنامه از کاراکتر های فاصله (space یا tab) اضافه استفاده شده باشد و یا سطری خالی از دستور در برنامه باشد.
همچنین میتوانید فرض کنید در عبارت های داخل برنامه از حداکثر ۱۰ عدد/متغیر استفاده شده است و در طول اجرای برنامه مقدار قدر مطلق هیچ متغیری بیشتر از $10^6$ نمیشود. حداکثر طول نام متغیر ها ۱۰ کاراکتر است.
# خروجی
اگر در برنامه ورودی قواعد زبان برنامه نویسی ذله رعایت نشده بود باید عبارت "Zelle Error" در یک خط چاپ شود و اگرنه مقدار های مربوط به دستور های print باید به ترتیب در خط های جداگانه چاپ شوند.
# مثال
## ورودی نمونه ۱
```
{
set a = 3 ;
{
print a ;
set b = a + a + a ;
print b - 5 ;
}
}
```
## خروجی نمونه ۱
```
3
4
```
## ورودی نمونه ۲
```
{
set a = 3 ;
{
print a ;
set b = a + a + a ;
}
print b - 5 ;
}
```
## خروجی نمونه ۲
```
Zelle Error
```
## ورودی نمونه ۳
```
{
set a = 3 ;
set b = 5 ;
print a ;
print b ;
a = a + b ;
b = a - b ;
a = a - b ;
print a ;
print b ;
}
```
## خروجی نمونه ۳
```
3
5
5
3
```