Ex4.pdf

‫بهنام خدا‬
‫تمرین چهارم برنامهنویسی درس »مقدّمهای بر هوش مصنوعی«‬
‫نیمسال بهار ‪۱۳۸۶-۸۷‬‬
‫روبات های شطرنج باز‬
‫موعد تحویل‪ :‬یکشنبه ‪ ۱۲‬خرداد ‪۱۳۸۷‬‬
‫پویا اسفندیار – ‪[email protected]‬‬
‫شهاب جباری ارفعی ‪[email protected] -‬‬
‫روباتهای شطرنج باز‬
‫مقدمه‬
‫قرار است مسابقه ای بین دانشکده ی ما و‬
‫دانشکده ی مهندسی برق و کامپیوتر دانشگاه‬
‫تهران برگزار شود )در مهرماه(‪ .‬شما به عنوان‬
‫تمرین چهارم برنامهنویسی تان باید یک عامل‬
‫‪۱‬‬
‫شطرنج باز بنویسید که بتواند به عنوان نماینده‬
‫ی دانشکده در این مسابقه شرکت کند‪ .‬توجه‬
‫کنید که این مسابقه یک مسابقه ی نیمه کاره‬
‫است‪ .‬بعبارتی دیگر‪ ،‬شما باید بازی را با توجه‬
‫به صفحه ای که دراختیار شما داده می شود‬
‫دنبال کنید و حرکت مورد نظرتان برای این صفحه ی نیمه کاره را به عنوان جواب برگردانید‪ .‬توابع الزم از‬
‫جمله تابع تشخیص حرکت های مجاز در اختیارتان قرار خواهد گرفت‪ ،‬بنابراین تمرکز اصلی شما باید روی‬
‫الگوریتم جستجو باشد‪.‬‬
‫نحوه دقیق برگزاری مسابقه درآینده ی نزدیک اعالم خواهد شد‪ ،‬اما کلیت آن بر این اساس است‪ :‬ابتدا تیم‬
‫ها به صورت داخل دانشکده ای با هم مسابقه می دهند و تنها تعداد محدودی از آنها برای مسابقه بین دانشکده‬
‫ای انتخاب می شوند‪ .‬متاسفانه احتمال تغییر جزیی در قوانین و شرایط مسابقه در آینده وجود دارد‪ ،‬بنابراین به‬
‫ای میل هایی که در گروه درس فرستاده می شوند توجه کنید‪.‬‬
‫قانون ها ی باز ی‬
‫‪۲‬‬
‫‪ .١‬قوانین عمومی شطرنج در این جا نیز برقرار هستند )به جز دو حرکت مربوط به قلعه رفتن‪ ۳‬و زدن پیاده‬
‫ی حریف وقتی دو حرکت رو به جلو انجام داده است و در خانه ی سمت چپ یا راست پیاده ی شما‬
‫‪Agent‬‬
‫‪2‬ﺑﺮﮔﺮﻓﺘﻪ ﺍﺯ ﺗﻮﺿﻴﺤﺎﺕ ﺩﺍﻧﺸﺠﻮﻳﺎﻥ ﺩﺍﻧﺸﮕﺎﻩ ﺗﻬﺮﺍﻥ‪ ،‬ﺑﺎ ﺗﺼﺮﻑ‬
‫‪ 3‬ﭼﻮﻥ ﻓﺮﺽ ﻣﻲ ﮐﻨﻴﻢ ﺑﺎﺯﻱ ﺍﺯ ﺍﺑﺘﺪﺍ ﻧﻴﺴﺖ ﻭﺷﺎﻩ ﺣﺘﻤﺎ ﻳﮏ ﺑﺎﺭ ﺣﺮﮐﺖ ﮐﺮﺩﻩ ﺍﺳﺖ‪.‬‬
‫‪2‬‬
‫‪1‬‬
‫قرار گرفته است‪ .۴‬همچنین فرض می کنیم که پیاده در صورت رسیدن به آخرین خانه فقط به مهره ی‬
‫وزیر تبدیل می شود(!‬
‫‪ .٢‬هر بازی به صورت رفت و برگشت با وضعیتهای اولیه یکسان و با تعدادی صفحه ی متمایز انجام می‬
‫شود )بنابراین هیچ نگرانی ای درمورد نحوه ی ارزشیابی عاملهایتان وجود نخواهد داشت(‪.‬عاملهایتان‬
‫برای هر صفحه ی خاص یک بار با مهره ی سفید بازی را ادامه می دهند ‪۵‬و بار دیگر در حالی که‬
‫حریف با مهره ی سفید برای همان صفحه بازی کرده است‪ ،‬با مهره ی سیاه بازی را ادامه می دهند‪.‬‬
‫‪ .٣‬در صورت لزوم می توانید فرض کنید که صفحه شروع بازی تقریب ًا در وضعیت پایانی قرار دارد‪ .‬به طوری‬
‫که غیر از شاه تعداد محدودی از مهره های دیگر برای هر بازیکن در صفحه قرار دارد‪ .‬بنابراین نگران‬
‫حالتهای بیشمار حرکتهای ممکن نباشید )همچنین شاخه ای با چند داده ی تستی در فایل های‬
‫ضمیمه با فرمت ورودی این مساله آمده است‪ .‬می توانید فرض کنید که شلوغی صفحه ی مسابقه از‬
‫نظر تعداد مهره ها مشابه شلوغی صفحه در این داده ها است‪ . .‬همچنین تمام این صفحات حالتی را‬
‫نشان می دهند که بازیکن سفید با بهترین بازی اش بعد از دو حرکت می تواند شاه سیاه را مات و‬
‫بازی را به پایان برساند(!‬
‫‪ .‬هر بازیکن برای هرحرکتش‪ ،‬حداکثر ‪ ۳‬ثانیه وقت دارد‪ ،‬اگر پس از ‪ ۳‬ثانیه حرکتی دریافت نشود‪ ،‬یک‬
‫حرکت به طور تصادفی برای او در نظر گرفته شده‪ ،‬و حرکتی که دیر دریافت شود‪ ،‬تاثیر داده نمی‬
‫شود)شما فعال باید این زمان را خودتان چک کنید(!‬
‫‪ .‬عالوه بر ماکزیمم زمان ‪ ۳‬ثانیه برای هر حرکت‪ ،‬یک محدودیت چند دقیقهای هم برای کل حرکات هر‬
‫بازیکن وجود داردوهر بازیکن می تواند به مدت یک دقیقه به بازی ادامه دهد‪ ۶.‬نحوه ی تعیین برنده و‬
‫امتیاز دهی در صورتی که وقت یکی از بازیکنان به پایان برسد‪ ،‬در ادامه آمده است‪ .‬معیار برنده شدن‬
‫در بازی مات کردن شاه است‪ .‬اما در حاالتی که زمان بازی پیش از مات کردن شاه به پایان برسد مهره‬
‫ها ی مانده ی هر بازیکن ارزش می یابند‪ .‬باید درنظر داشت برنده ی هر صفحه بعد از دو بازی با مهره‬
‫های به رنگ مختلف بر روی یک صفحه ی خاص به صورت زیر تعیین می شود‪:‬‬
‫‪ .a‬بازیکنی که در هر دو مسابقه به پیروزی رسیده باشد برنده ی آن صفحه است)یک امتیاز(‬
‫‪ .b‬بازیکنی که در یکی از صفحه ها برنده شده و بازی بعدی را نیز تا پایان زمان بازی نباخته است‬
‫برنده است )امتیاز بین نیم تا یک با توجه به مهره های باقی مانده در صفحه ای که بازی برنده‬
‫‪On pass on‬‬
‫‪4‬‬
‫‪5‬ﻓﺮﺽ ﺑﺮ ﺍﻳﻦ ﺍﺳﺖ ﮐﻪ ﺑﺎﺯﻱﻧﻴﻤﻪ ﮐﺎﺭﻩ ﻧﻴﺰ ﺗﻮﺳﻂ ﺳﻔﻴﺪ ﺁﻏﺎﺯ ﻣﻲ ﺷﻮﺩ!‪.‬‬
‫‪6‬ﻣﺘﺎﺳﻔﺎﻧﻪ ﺍﻣﮑﺎﻥ ﺗﻐﻴﻴﺮ ﺍﻳﻦ ﺍﻋﺪﺍﺩ ﻭﺟﻮﺩ ﺩﺍﺭﺩ ! ﭘﺲ ﺷﻤﺎ ﺑﺎﻳﺪ ﺩﺭﺍﻳﻦ ﺯﻣﺎﻥ ﺣﺪﺍﻗﻞ ‪ ۲۰‬ﺣﺮﮐﺖ ﺍﻧﺠﺎﻡ ﺩﻫﻴﺪ ﻭ ﺑﺎ ﺧﺎﺗﻤﻪ ﻳﺎﻓﺘﻦ ﻭﻗﺘﺘﺎﻥ )ﺩﺭ‬
‫ﺻﻮﺭﺗﻲ ﮐﻪ ﺍﺯ ﻭﻗﺖ ﺣﺮﻳﻒ ﺑﺎﻗﻲ ﻣﺎﻧﺪﻩ ﺑﺎﺷﺪ(ﺑﻪ ﺟﺎﻱ ﺷﻤﺎ ﺣﺮﮐﺎﺕ ﺗﺼﺎﺩﻓﻲ ﺑﻪ ﺳﺮﻭﺭ ﺑﺎﺯﻱ ﻓﺮﺳﺘﺎﺩﻩ ﻣﻲ ﺷﻮﺩ‬
‫‪3‬‬
‫ای در زمان معین شده نداشته است‪ .‬همچنین به بازیکن مقابل نیز به نسبت مهره های مانده‪-‬‬
‫روباتهای شطرنج باز‬
‫اش امتیاز داده می شود و بدیهی است که این امتیاز از نیم کمتر است!‪(۷‬‬
‫‪ .c‬بازیکنی که در هردو صفحه باخته است هیچ امتیازی نمیگیرد‪.‬‬
‫‪ .d‬اگر برای هیچ کدام از صفحه ها برنده ای نداشتیم بازیکن برای هر صفحه امتیازی کمتر از نیم‬
‫)بسته به تعداد مهره های باقی مانده از او در آن صفحه ( خواهد گرفت)امتیاز کلی هیچ کدام‬
‫از بازیکن ها در این حالت به یک نخواهد رسید(‪.‬‬
‫‪ .e‬این شیوه ی امتیاز دهی هر‬
‫چند بهترین روش ممکن‬
‫نیست‪ ،‬برای جلوگیری از‬
‫شطرنج بررهای وضع شده‬
‫است‪.‬‬
‫‪۸‬‬
‫‪ .‬اگر بازیکنی در نوبتش یک حرکت‬
‫غیرمجاز برگرداند‪ ،‬مانند بند ‪ ۳‬یک‬
‫حرکت تصادفی به جای حرکت‬
‫اشتباهش در نظر گرفته میشود‪.‬‬
‫‪ .٧‬در هر مرحله‪ ،‬سرور بازی‪ ،‬وضعیت بازی شامل چیدمان صفحه‪ ،‬آخرین حرکت انجام شده و موارد‬
‫دیگری که در زیر میآید را به صورت یک رشته ی ‪ ۷۱‬کاراکتری‪ ،‬از طریق ساکت ‪۹‬به بازیکن می‪-‬‬
‫فرستد‪ ،‬و بازیکن باید در پاسخ یک رشته ی ‪ ۴‬کاراکتری به عنوان حرکت برگرداند‪.‬‬
‫کاراکترهای فرستاده شده توسط سرور به شرح زیر است )برای آگاهی بیشتر به فایل‬
‫‪ChessState.java‬‬
‫مراجعه کنید( ‪:‬‬
‫‪ ۶۴ o‬کاراکتر اول‪ :‬وضعیت صفحه شطرنج )کاراکتر ’‪ ‘X‬نشاندهنده ی خانه ی خالی و‬
‫ال ‪ k‬برای شاه‬
‫کاراکترهای دیگر هر کدام نشاندهنده ی یکی از مهرههای شطرنج است‪ ،‬مث ً‬
‫‪ 7‬ﺍﺭﺯﺵ ﻣﻬﺮﻩ ﻫﺎ ﺑﻪ ﺷﺮﺡ ﺯﻳﺮ ﺍﺳﺖ‪:‬‬
‫ﻭﺯﻳﺮ ‪ ۹‬ﺍﻣﺘﻴﺎﺯ‪ ،‬ﺭﺥ ‪ ۵‬ﺍﻣﺘﻴﺎﺯ‪ ،‬ﻓﻴﻞ ﻭ ﺍﺳﺐ ﻫﺮﮐﺪﺍﻡ ‪ ۳‬ﺍﻣﺘﻴﺎﺯ ﻭ ﭘﻴﺎﺩﻩ ﻳﮏ ﺍﻣﺘﻴﺎﺯ‬
‫‪ 8‬ﺩﺭﺍﻳﻦ ﻧﻮﻉ ﺍﺯﺷﻄﺮﻧﺞ ﻫﺪﻑ ﻣﺎﺕ ﮐﺮﺩﻥ ﺷﺎﻩ ﻧﻴﺴﺖ ﻭ ﺻﺮﻓﺎ ﺑﺮ ﺩﺍﺷﺘﻦ ﻣﺠﻤﻮﻉ ﺍﺭﺯﺵ ﺑﻴﺸﺘﺮ ﺑﺮ ﺭﻭﻱ ﺻﻔﺤﻪ ﺍﺳﺖ‪.‬‬
‫ﺷﻤﺎ ﻣﻲ ﺗﻮﺍﻧﻴﺪ ﺍﺯ ﺍﻳﻦ ﺭﻭﺵ ﺑﺮﺍﻱ ﺗﺎﺑﻊ ﺍﺭﺯﺵ ﮔﺬﺍﺭﻱ ﺧﻮﺩ ﺍﺳﺘﻔﺎﺩﻩ ﮐﻨﻴﺪ ﻭﻟﻲ ﺑﺎﻳﺪ ﺑﻪ ﺍﻳﻦ ﻧﮑﺘﻪ ﺗﻮﺟﻪ ﺩﺍﺷﺘﻪ ﺑﺎﺷﻴﺪ ﮐﻪ ﭼﻮﻥ ﻗﻮﺍﻧﻴﻦ ﻣﻮﺟﻮﺩ ﺑﺎ‬
‫ﻗﻮﺍﻧﻴﻦ ﺷﻄﺮﻧﺞ ﺑﺮﺭﻩ ﺍﻧﺪﮐﻲ ﺗﻔﺎﻭﺕ ﺩﺍﺭﺩ‪ ،‬ﺍﺭﺯﺵ ﺑﻲ ﻧﻬﺎﻳﺖ ﺑﺮﺍﻱ ﻣﻬﺮﻩ ﻱ ﺷﺎﻩ ﺭﺍ ﻓﺮﺍﻣﻮﺵ ﻧﮑﻨﻴﺪ!‬
‫‪9‬‬
‫‪socket‬‬
‫‪4‬‬
‫سیاه و ‪ K‬برای شاه سفید‪ .‬لیست کامل این کاراکترها را میتوانید در ابتدای کالس‬
‫‪Chess‬‬
‫فایل ‪ Chess.java‬ببینید(‪.‬‬
‫‪ ۴ o‬کاراکتر بعدی مربوط به آخرین حرکت انجام شده است‪ .‬نام گذاری حرکات دقیقًا مانند قواعد‬
‫استاندارد شطرنج است‪ .‬به عنوان مثال حرکت‬
‫‪A2A4‬‬
‫در آغاز بازی‪ ،‬سمت چپترین سرباز‬
‫سفید را دو خانه به جلو میبرد‪) .‬دقت کنید که کاراکتر ها را با حروف بزرگ بفرستید(‬
‫‪ o‬کاراکتر بعدی مشخص کننده ی نوبت بازیکن است‪) .‬صفر برای سفید و ‪ ۱‬برای سیاه(‬
‫‪ o‬کاراکتر بعدی مشخص میکند که آیا در حرکت قبل مهرهای خورده شده یا خیر‪ ۱) .‬نشان‪-‬‬
‫دهنده ی خورده شدن مهره است(‬
‫‪ o‬کاراکتر آخرمشخص کننده ی این است که آیا شاه در وضعیت کیش است یا خیر‪).‬صفر برای‬
‫کیش بودن و ‪ ۱‬برای کیش نبودن(‬
‫کاراکترهای فرستاده شده توسط بازیکن‪:‬‬
‫‪ ۴ o‬کاراکتر مشخص کننده ی حرکت بعدی‬
‫‪ .٨‬کد بازی به هر زبانی قابل نوشتن است‪ .‬زبان جاوا امکانات الزم برای برنامه نویسی ساکت را دارد‪ ،‬اما اگر‬
‫با زبان‪ C/C++‬برنامه می نویسید باید توجه داشته باشید که در محیط ویندوز چنین امکانی وجود‬
‫ندارد )می توانید برنامه ای بنویسید که در محیط لینوکس کامپایل و اجرا شود(و شما باید از کتابخانه‬
‫های موجود بر روی شبکه اینترنت استفاده کنید‪ .‬ضمنا تابع های کمکی برای نوشتن عامل تنها برای‬
‫این دو زبان موجود است‪.‬‬
‫کد ها ی آماده ی برنامه‬
‫‪۱۰‬‬
‫قبل از هر چیز‪ ،‬برای اینکه آشنایی مختصری با این فایلها داشته باشید‪ ،‬متودهای ‪ main‬از کالسهای زیر‬
‫را به ترتیب اجرا کنید‪:‬‬
‫‪1.Server.ServerRunner‬‬
‫‪2.Viewer.ViewerRunner‬‬
‫‪10‬ﺑﺮﮔﺮﻓﺘﻪ ﺍﺯ ﺗﻮﺿﻴﺤﺎﺕ ﺩﺍﻧﺸﺠﻮﻳﺎﻥ ﺩﺍﻧﺸﮕﺎﻩ ﺗﻬﺮﺍﻥ‪ ،‬ﺑﺎ ﺗﺼﺮﻑ‬
‫‪5‬‬
‫‪3.Client.TestRunner‬‬
‫روباتهای شطرنج باز‬
‫‪4.Client.Testrunner‬‬
‫ال تصادفی انتخاب می شود‪.‬‬
‫چیزی که مشاهده خواهید کرد‪ ،‬بازیای است که حرکتهایش به طور کام ً‬
‫بنابراین میتوانید پس از نوشتن کدها‪ ،‬بازیها یتان را در این محیط تست کنید‪.‬‬
‫ابتدا فرض میکنیم که زبان برنامهنویسی شما جاواست‪ .‬در این صورت قسمتی که باید توسط شما پیاده‬
‫سازی شود‪ ،‬متود‬
‫‪doPlay‬‬
‫از کالس‬
‫‪Player‬‬
‫است‪ .‬این کالس از کالس‬
‫‪Client‬‬
‫مشتق شده و متود‬
‫‪abstract‬‬
‫این‬
‫کالس را پیادهسازی میکند‪ .‬نکته ی قابل توجه این است که شما باید درهنگام آزمایش برنامه یا ارسال برنامه‬
‫برای ما خط )‪ Thread.sleep(500‬را توضیح‪۱۱‬کنید زیرا این خط فقط برای تاخیر مجازی و امتحان سرور نوشته‬
‫شده است‪ .‬برای راحتی شما کلیه ی توابع الزم برای اعمال قوانین شطرنج در فایل ‪ Chess.java‬قرار داده‬
‫شده است‪ .‬مهمترین تابعی که شما به آن احتیاج خواهید داشت‪ ،‬تابع )‪ Chess.next_moves(ChessState‬است‬
‫که با گرفتن یک وضعیت بازی‪ ،‬حرکتهای مجاز بعدی را برمیگرداند‪.‬‬
‫وضعیت اولیه ی بازی در سازنده ی کالس ‪ ChessState‬قرار داده شده‪ .‬بنابراین برای تغییر چینش اولیه ی‬
‫بازی باید این قسمت را تغییر دهید‪.‬‬
‫ال واضح است‪ .‬در نهایت شما باید یک شی از کالس برگردانید که دارای همان ‪ ۴‬کاراکتر‬
‫سایر موارد کام ً‬
‫حرکت است و بقیه ی کارها یعنی فرستادن این حرکت به توسط کالس ‪ Client‬انجام میشود‪.‬‬
‫‪ o‬کسانی که دوست دارند با زبانی غیر از جاوا کد بزنند نیز نیاز به کار اضافی چندانی ندارند‪ ،‬فقط‬
‫باید عملیات فرستادن حرکت توسط ساکت را که در کالس ‪ Client‬پیادهسازی شده‪ ،‬به زبان‬
‫خود پیاده سازی کنند‪ .‬یک نسخه از کالس‬
‫میخواهند از‬
‫‪C/C++‬‬
‫‪Chess‬‬
‫به نام‬
‫‪Chess.cpp‬‬
‫هم برای کسانی که‬
‫استفاده کنند در اختیار شما قرار می گیرد‪.‬‬
‫نکات مهم‪:‬‬
‫‪comment‬‬
‫‪6‬‬
‫‪11‬‬
‫ به گروهی که این کار را تا روز دوشنبه ‪ ۳۰‬اردی بهشت ‪ ۱۳۸۷‬انجام دهد‪ ،‬نیم نمره ی اضافه تعلق می‬
‫گیرد‪.‬‬
‫ توصیه می کنیم که تا پیش از زمان ارسال تمرین‪ ،‬عاملتان را با عامل های دوستانتان مسابقه دهید‪ .‬این‬
‫کار باعث می شود که اشکاالت احتمالی در کدتان راحت تر قابل کشف باشند‪.‬‬
‫نمره ی خام‬
‫از آنجا که انجام این تمرین بخشی از نمره ی اصلی شما را دارد‪ ،‬شما می بایست عامل خود را با توجه به‬
‫الگوریتم های شرح داده شده در فصل ششم کتاب پیاده سازی کنید‪ .‬گزارش که شامل نحوه ی انتخاب کردن‬
‫حاالت و پیچیدگی زمان اجرای برنامه و مقایسه ی تکنیک های مختلف است‪ ،‬حدود ‪ %۵۰‬نمره ی شما را‬
‫دربرخواهد گرفت‪ .‬چون معیار ارزیابی این تمرین به صورت نسبی است و خوبی عامل شما در قیاس با عامل های‬
‫دوستانتان سنجیده می شود‪ %۵۰ ،‬دیگر نمره به عملکرد عامل شما نسبت به کل کالس اختصاص می یابد‪.‬‬
‫‪۱۲‬‬
‫نمره تشو ی ق ی‬
‫برای تیم هایی که بتوانند جز نیمه ی باالیی جدول رقابت های درون دانشکده ای باشند نمره ی اضافی در‬
‫نظر گرفته خواهد شد)طبیعی است که میزان این نمره برای تیم هایی که به مسابقات بین دانشکده ای فرستاده‬
‫می شوند بیشتر خواهد بود(‪.‬‬
‫همچنین ایده های منحصر بفرد مثال در مورد نحوه ی بررسی حاالت بعدی )که باید در گزارش ذکر شوند(‬
‫یا فرستادن مورد های تستی جالب نیز نمره ی اضافی خواهند داشت‪.‬‬
‫در صورت پیاده سازی مناسب و دقیق این موارد‪ ،‬ممکن است شانس ارایه ی گزارش آن فعالیت ها )به‬
‫کالس را( که نمره ی جداگانه ای از تمرین ها دارد را بدست آورید‪.‬‬
‫‪ 12‬ﺑﻪ ﺩﺍﻧﺸﺠﻮﻳﺎﻧﻲ ﮐﻪ ﻋﺎﻣﻠﺸﺎﻥ ﺩﺭ ﻣﺴﺎﺑﻘﻪ ﻱ ﺩﺭﻭﻥ ﺩﺍﻧﺸﮑﺪﻩ ﺍﻱ ﺩﺭ ﺭﺗﺒﻪ ﻱ ﻣﻴﺎﻧﻲ ﺟﺪﻭﻝ ﻗﺮﺍﺭ ﮔﻴﺮﺩ ﺗﻤﺎﻡ ‪ %۵۰‬ﻧﻤﺮﻩ ﺍﺧﺘﺼﺎﺹ ﺩﺍﺩﻩ‬
‫ﺧﻮﺍﻫﺪ ﺷﺪ ﻭ ﺑﻪ ﮔﺮﻭﻩ ﻫﺎﻱ ﺑﺎﻻﺗﺮ ﺩﺭ ﺟﺪﻭﻝ ﻧﻤﺮﻩ ﻱ ﺍﺿﺎﻓﻲ ﺩﺍﺩﻩ ﻣﻲ ﺷﻮﺩ‪.‬‬
‫‪7‬‬
‫روباتهای شطرنج باز‬
‫نمره ی منف ی‬
‫در صورت مشاهده ی هر گونه تخلف از جمله کپ)ی( از سایرین یا انجام تمرین بوسیله ی شخصی به غیر از‬
‫دانشجو یا متفاوت بودن کد پیاده سازی شده از توضیحات موجود در گزارش به شدت با آن برخورد خواهد شد و‬
‫عواقب مشکالت احتمالی به عهده ی دانشجو خواهد بود‪.‬‬
‫درصورت تاخیر تا یک هفته به ازای هر روز تاخیر ‪ %۷‬از نمره ی تمرین کسر خواهد شد )یعنی با یک هفته‬
‫تاخیر ‪ %۵۰‬نمره را از دست خواهید داد( و به تمرینهایی که بعد از یک هفته ارسال شوند هیچ نمره ای تعلق‬
‫نمیگیرد!‬
‫تحو ی ل‬
‫فایل ارسالی شما باید الزاما یک فایل با پسوند ‪ zip‬با نام ‪ Ex4-83101653-83100335‬باشد‬
‫)که ‪ ۸۳۱۰۱۶۵۳‬و ‪ ۸۳۱۰۰۳۳۵‬شماره ی دانشجویی افراد تشکیل دهنده ی گروه می باشد(‪ .‬الزم است فایل‬
‫ارسالی شامل کدها و گزارشی که با فرمت ‪ Pdf‬است باشد‪.‬‬
‫فایل ارسالی را تا موعد مقرر به ]‪ [[email protected]‬ارسال کنید‪ .‬عنوان نامه ی شما باید‬
‫مشابه نام فایل باشد‪.‬‬
‫اشکاالت ) احتمال ی (‬
‫توجه کنید که کدهایی که در اختیارتان قرار می گیرد )اگرچه پیش از این چندین مرحله آزمون شده اند(‬
‫احتماال عاری از خطا های برنامه نویسی نخواهند بود‪ .‬بنابراین از تذکر دادن آن ها و یا پیشنهاد برای بهتر کردن‬
‫سرور استقبال می شود‪ .‬اگر ایرادی در کد ها یافت شود از طریق گروه به اطالعتان می رسانیم‪ .‬قسمت اعظم کد‬
‫سرور توسط دانشجویان دانشگاه تهران نوشته شده است و توضیحات موجود در کد کافی به نظر می رسد‪ ،‬اما در‬
‫صورتی که سوالی در مورد آن داشتید در گروه منعکس کنید‪ .‬توجه داشته باشید که هنوز درباره نحوه دقیق‬
‫اجرای مسابقات تصمیم گیری نشده است‪.‬‬
‫‪8‬‬
‫کمک !‬
‫در صورت ابهام در مورد مساله یا مشکالت پیاده‬
‫سازی یا وجود ابهام و یا اشکال در کدهای فرستاده‬
‫شده با ]‪ [[email protected]‬تماس بگیرید‪.‬‬
‫پایان‬
‫‪9‬‬