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

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

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

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

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

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

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

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

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

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

### طولانی مدت
* هفته‌کد HackerRank
* مسابقه برنامه‌نویسی ICFP - مسابقه‌ای سالانه که در ۳ روز برگزار می‌شود و اولین دورهٔ آن به سال ۱۹۸۸ بر می‌گردد که توسط کنفرانس بین‌المللی برنامه‌نویسی کاربردی برگزار می‌شود.
* مسابقات ماراتن تاپ‌کدر

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

## جستارهای وابسته
* کد گلف

## منابع

## پیوند به بیرون
; پروژه‌ای متن‌باز برای اجرای مسابقات
* سیستم مدیریت مسابقه ابزاری متن باز به زبان پایتون برای اجرا و مدیریت یک مسابقه برنامه‌نویسی که در المپیاد جهانی کامپیوتر مورد استفاده است.
رده:مسابقات برنامه‌نویسی