شما میتوانید نسخه pdf این مقاله را از این لینک + دانلود کنید.
سامانه داوری یا به اصطلاح Judge سامانهای است که کدهایی که شما به عنوان جواب یک مسئله ارسال میکنید را بررسی میکند و تشخیص میدهد که آیا کدِ ارسالی درست است یا خیر و در نهایت آن را Accept یا Reject خواهد کرد.
نحوه عملکرد این سامانه چگونه است؟
این سامانه تعدادی تِست کِیس test case در اختیار دارد. هر تست کیس یک ورودی برای مسئله و همچنین خروجی صحیح برای آن ورودی را شامل میشود. در واقع چون تست کردن کدها به ازای تمام ورودی های مجاز، غیر ممکن است سامانه داوری با تست کیسهای محدود ولی قوی که تضمین میکند کد شما صحیح است، کدتان را بررسی میکند.
زمانی که شما کدتان را ارسال میکنید، کدتان به سامانه داوری داده میشود. دقیقاً همانطور که شما دستی به کد خود ورودی میدهید و خروجی را مشاهده میکنید، این سامانه به ازای هر تست کیسی که در اختیار دارد، ورودی آن تست کیس را به عنوان ورودی به کد شما میدهد و خروجی کدتان را با خروجی آن تست کیس مقایسه میکند. اگر خروجیِ کد شما با خروجیِ آن تست کیس برابر بود نمره آن تست کیس را دریافت میکنید و سامانه داوری به سراغ تست کیس بعدی میرود. در صورتی که تمام تست کیس ها را درست باشد سوال شما Accept خواهد شد.
اشتباه رایج 1
فرض کنید سوالی داریم که از شما خواسته است تا یک عدد را به عنوان ورودی دریافت کنید و دو برابر آن عدد را چاپ کنید. تست کیسهای موجود در سامانه داوری هم برای مثال دو تست کیس زیر هستند:
Input |
1 |
Output |
2 |
Input |
3 |
Output |
6 |
حال فرض کنید الگوریتم ما به صورت زیر عمل کند:
- ابتدا در خروجی چاپ کند enter a number:
- ورودی را از کاربر دریافت کند.
- عدد را دو برابر کند.
- عدد بدست آمده را چاپ کند.
آیا این الگوریتم جواب را به اشتباه محاسبه میکند؟ خیر.
آیا این الگوریتم مورد قبول سامانه داوری میباشد و نمره کامل را دریافت میکند؟ خیر!
چرا؟ در ادامه علت این موضوع را میبینید.
خروجی های الگوریتم بالا به صورت زیر خواهد بود:
Input |
1 |
Output |
enter a number: 2 |
Input |
3 |
Output |
enter a number: 6 |
همانطور که مشاهده میکنید، خروجی الگوریتمِ ما با خروجی تست کیسها متفاوت است و در enter a number: اختلاف دارند.) در نتیجه سامانه داوری خروجی های این الگوریتم را اشتباه تشخیص میدهد و آن را Reject خواهد کرد)
اشتباه رایج 2
در ورودی سوالات، محدودیتهایی مشخص میشوند. نیازی نیست این محدودیتها را بررسی کنید. در واقع این محدودیتها صرفاً برای اطلاع شما بهعنوان برنامهنویس است. یعنی تضمین کردهایم که تست کیسهایی که به برنامه شما ورودی داده میشود شرایط گفته شده را دارد و الگوریتم و کد خود را طوری تنظیم کنید که با محدودیتهای موجود، خروجی درست را ارائه دهد.