برنامه‌نویسی مسابقه‌ای

برنامه‌نویسی مسابقه‌ای یک ورزش ذهنی است؛ که معمولاً از طریق اینترنت یا یک شبکه محلی برگزار می‌شود. اصلی‌ترین رقابت‌های برنامه‌نویسی مسابقه‌ای توسط شرکت‌های بزرگی همچون گوگل،[۱][۲] فیس بوک[۳] برگزار می‌شوند. البته وبگاه‌هایی مانند کدفورسز نیز وجود دارند که به‌طور منظم و هفتگی مسابقات برنامه‌نویسی برگزار می‌کنند.

پتر و گنادی کوروتکویچ درحال فکر کردن روی سوالات مسابقهٔ برنامه‌نویسی یاندکس ۲۰۱۳

یک رقابت برنامه‌نویسی معمولاً شامل مجموعه‌ای از سوالات منطقی یا ریاضیاتی است (که می‌تواند از نظر تعداد شرکت‌کننده از چند ده نفر تا چند ده هزار نفر متفاوت باشد) که در آن شرکت‌کنندگان ملزم به نوشتن برنامه‌های رایانه‌ای هستند که قادر به حل سوالات داده شده باشند. قضاوت بیشتر بر اساس تعداد سوالات حل شده و زمان صرف شده برای نوشتن راه‌حل‌های موفقیت‌آمیز است، اما ممکن است شامل فاکتورهای دیگری مثل کیفیت خروجی، زمان اجرای برنامه و تعداد خطوط کد راه‌حل نیز باشد.

تاریخچه ویرایش

یکی از قدیمی‌ترین رقابت‌های برنامه‌نویسی شناخته شده، مسابقه بین‌المللی برنامه‌نویسی دانش‌جویی است که از ۱۹۷۰ شروع شد و تا جایی پیش رفته‌است که در سال ۲۰۱۱ شرکت‌کنندگانی از ۸۸ کشور مختلف جهان در آن شرکت کردند. از سال ۲۰۰۰ به بعد علاقه به برنامه‌نویسی رقابتی بسیار زیاد شده‌است و می‌توان گفت با رشد اینترنت مرتبط است چون برگزاری راحت‌تر مسابقات برنامه‌نویسی از طریق اینترنت به شرکت‌کننده اجازه می‌دهد بدون محدودیت جغرافیایی در مسابقه شرکت کند.

بررسی ویرایش

هدف برنامه‌نویسی رقابتی نوشتن کد منبع برنامه‌های رایانه‌ای است که قادر به حل سوالات داده شده باشند. اکثریت قریب به اتفاق سوالات مطرح‌شده در مسابقات برنامه‌نویسی مرتبط با ریاضیات یا منطق است. اینگونه سوالات معمولاً از یکی از حیطه‌های زیر طرح می‌شود: ترکیبیات، نظریه اعداد، نظریه گراف، هندسه، کار با رشته‌ها و ساختمان داده‌ها. در مسابقاتی خاص سوالاتی از هوش مصنوعی هم مطرح می‌شود.

صرف نظر از دسته‌بندی مسائل، فرایند حل مسئله می‌تواند به دو مرحله کلی تقسیم شود: طراحی یک الگوریتم بهینه و پیاده‌سازی الگوریتم با یک زبان برنامه‌نویسی مناسب (مجموعهٔ زبان‌های برنامه‌نویسی مجاز از مسابقه‌ای به مسابقهٔ دیگر متفاوت است).

در بیشتر مسابقات، داوری به‌طور کاملاً خودکار و توسط یک قاضی برخط انجام می‌شود. هر راه‌حل ارائه شده توسط یک شرکت‌کننده روی تست‌های ورودی متعددی (معمولاً مخفی) توسط قاضی اجرا می‌شوند. به‌طور معمول، قاضی برخط به صورت همه یا هیچ نمره‌دهی می‌کند، به این معنی که راه‌حل «پذیرفته شده» است تنها در صورتی که در مقابل تمامی ورودی‌ها پاسخ درست خروجی دهد و در غیر این صورت رد می‌شود. با این وجود، ممکن است در برخی از مسابقات بسته به نوع سؤال و با توجه به تعداد تست‌هایی که درست پاسخ‌دهی می‌شوند امتیازدهی به‌صورت جزئی از امتیاز کامل سؤال انجام شود. در برخی از سوالات هم خروجی به ازای یک تست مشخص یکتا نیست و ممکن دو راه‌حل درست دو خروجی متفاوت ارائه دهند که در این‌صورت قاضی برخط خروجی را با توجه به ورودی داده شده تجزیه و تحلیل و درستی آن را بررسی می‌کند.

قاضیان برخط معمولاً شامل یک جدول رده‌بندی از کاربران هستند که شامل تعداد سوالات حل‌شده و زمان صرف‌شده برای حل هر سؤال توسط شرکت‌کنندگان در آن درج می‌شود.[۴] البته معمولاً در دقایق پایانی مسابقات حضوری و برای افزودن به هیجان رقابت، جدول به اصطلاح فریز (freeze) می‌شود و محتوای آن بروزرسانی نمی‌شود تا در مراسمی پس از مسابقه برندگان اعلام شوند.

مسابقات معروف ویرایش

دو قالب کلی کوتاه‌مدت و بلندمدت برای مسابقات برنامه‌نویسی وجود دارد. هر دور از یک مسابقهٔ کوتاه‌مدت بین ۱ تا ۵ ساعت به طول می‌انجامد. مسابقات طولانی‌مدت می‌توانند از چند روز تا چند ماه ادامه داشته باشند.

کوتاه‌مدت ویرایش

  • مسابقه بین‌المللی برنامه‌نویسی دانشگاهی (ICPC) - یکی از قدیمی‌ترین مسابقات برنامه‌نویسی برگزار شده، برای دانشجویان دانشگاه‌ها و در قالب گروه‌های ۳ نفره
  • گوگل کدجم - مسابقه‌ای که از سال ۲۰۰۳ هر سال توسط گوگل برگزار می‌شود.
  • فیس‌بوک هکرکاپ - مسابقه‌ای که از سال ۲۰۱۱ هر سال برگزار می‌شود، توسط فیس بوک برگزار می‌شود.
  • هکررنک - انواع و اقسام مختلفی از مسابقات برنامه‌نویسی توسط افراد و ارگان‌های مختلف[۵]
  • کدفورسز - معمولاً دوساعته و هفته‌ای ۲–۳ بار[۶]
  • مسابقه برنامه‌نویسی IEEEXtreme - رقابت سالانه برای اعضای انجمن IEEE که از سال ۲۰۰۶ توسط IEEE برگزار می‌شود.
  • IOI - یکی از قدیمی‌ترین مسابقات، برای دانش آموزان دوره متوسطه که از هر کشور ۴ نماینده در آن حضور پیدا می‌کنند. (در ایران معاونت دانش‌پژوهان جوان وزارت آموزش و پرورش متولی اعزام دانش‌آموزان است)
  • مسابقات آزاد تاپ‌کدر (TCO) - مسابقه‌ای که از سال ۲۰۰۴ در وبگاه Topcoder به‌صورت ماهانه برگزار می‌شود.
  • المپیاد ملی انفورماتیک چین - مسابقه‌ای که از سال ۱۹۸۴ در چین با هدف گلچین کردن دانش‌آموزان برای المپیاد جهانی کامپیوتر برگزار می‌شود.

طولانی مدت ویرایش

هوش مصنوعی و یادگیری ماشین ویرایش

  • کگل - مسابقات یادگیری ماشین.
  • کدکاپ - مسابقه هوش‌مصنوعی برای بازی‌های تخته‌ای است که از سال ۲۰۰۳ به‌صورت سالانه برگزار می‌شود. قوانین بازی در ماه سپتامبر منتشر می‌شوند و مسابقات نهایی در ژانویه برگزار می‌شود.[۸][۹]
  • AI Challenge - مسابقات سالانه دانشجویی که توسط گوگل در حد فاصل سال‌های ۲۰۰۹ و ۲۰۱۱ برگزار شد.
  • هالیت[۱۰] - یک چالش برنامه‌نویسی هوش‌مصنوعی که توسط سیگما، کرنل تک[۱۱] و گوگل برگزار می‌شود.[۱۲]
  • جام AI روسیه - مسابقه برنامه‌نویسی هوش مصنوعی.

جستارهای وابسته ویرایش

منابع ویرایش

  1. "Google Code Jam". google.com. Archived from the original on 19 February 2016. Retrieved 2016-02-20.
  2. "TCO12 Sponsor: Google - TCO 12". topcoder.com. Archived from the original on February 16, 2012.
  3. "Facebook Hacker Cup". Facebook. Retrieved 2016-02-20.
  4. Programming Challenges (Skiena & Revilla) شابک ‎۰۳۸۷۰۰۱۶۳۸, شابک ‎۹۷۸−۰۳۸۷۰۰۱۶۳۰
  5. "Programming problems and Competitions :: HackerRank". HackerRank. Retrieved 2016-02-20.
  6. "Codeforces contests". Retrieved 2018-10-12.
  7. "Programming problems and Competitions :: HackerRank". HackerRank. Retrieved 2016-02-20.
  8. Lasse Hakulinen. Survey on Informatics Competitions: Developing Tasks – Olympiads in Informatics, 2011, Vol. 5, 12–25.
  9. Wevers, Lesley (2014). "Monte-Carlo Tree Search for Poly-Y" (PDF). University of Twente. Archived from the original (PDF) on 13 April 2017. Retrieved 16 September 2018.
  10. "Halite Artificial Intelligence Programming Challenge". www.halite.io.
  11. "Two Sigma Announces Public Launch of Halite". tech.cornell.edu.
  12. "Halite helps students and developers compete to build better AI on Google Cloud Platform". Archived from the original on 31 January 2023. Retrieved 13 September 2019.

پیوند به بیرون ویرایش

پروژه‌ای متن‌باز برای اجرای مسابقات