موضوع مقاله: برنامه‌نویسی مسابقه‌ای | مخاطب: عمومی | لحن: دانشنامه‌ای | ساختار: عنوان، مقدمه، 3 بخش، جمع‌بندی | مقاله: | # برنامه‌نویسی مسابقه‌ای | مقدمه: اصلی‌ترین رقابت‌های برنامه‌نویسی مسابقه‌ای توسط شرکت‌های بزرگی همچون گوگل، فیس بوک برگزار می‌شوند. | ## بخش 1: برنامه‌نویسی مسابقه‌ای | البته وبگاه‌هایی مانند کدفورسز نیز وجود دارند که به‌طور منظم و هفتگی مسابقات برنامه‌نویسی برگزار می‌کنند. یک رقابت برنامه‌نویسی معمولاً شامل مجموعه‌ای از سوالات منطقی یا ریاضیاتی است (که می‌تواند از نظر تعداد شرکت‌کننده از چند ده نفر تا چند ده هزار نفر متفاوت باشد) که در آن شرکت‌کنندگان ملزم به نوشتن برنامه‌های رایانه‌ای هستند که قادر به حل سوالات داده شده باشند. قضاوت بیشتر بر اساس تعداد سوالات حل شده و زمان صرف شده برای نوشتن راه‌حل‌های موفقیت‌آمیز است، اما ممکن است شامل فاکتورهای دیگری مثل کیفیت خروجی، زمان اجرای برنامه و تعداد خطوط کد راه‌حل نیز باشد. تاریخچه یکی از قدیمی‌ترین رقابت‌های برنامه‌نویسی شناخته شده، مسابقه بین‌المللی برنامه‌نویسی دانش‌جویی است که از ۱۹۷۰ شروع شد و تا جایی پیش رفته‌است که در سال ۲۰۱۱ شرکت‌کنندگانی از ۸۸ کشور مختلف جهان در آن شرکت کردند. از سال ۲۰۰۰ به بعد علاقه به برنامه‌نویسی رقابتی بسیار زیاد شده‌است و می‌توان گفت با رشد اینترنت مرتبط است چون برگزاری راحت‌تر مسابقات برنامه‌نویسی از طریق اینترنت به شرکت‌کننده اجازه می‌دهد بدون محدودیت جغرافیایی در مسابقه شرکت کند. بررسی هدف برنامه‌نویسی رقابتی نوشتن کد منبع برنامه‌های رایانه‌ای است که قادر به حل سوالات داده شده باشند. اکثریت قریب به اتفاق سوالات مطرح‌شده در مسابقات برنامه‌نویسی مرتبط با ریاضیات یا منطق است. اینگونه سوالات معمولاً از یکی از حیطه‌های زیر طرح می‌شود: ترکیبیات، نظریه اعداد، نظریه گراف، هندسه، کار با رشته‌ها و ساختمان داده‌ها. | ## بخش 2: برنامه‌نویسی مسابقه‌ای | صرف نظر از دسته‌بندی مسائل، فرایند حل مسئله می‌تواند به دو مرحله کلی تقسیم شود: طراحی یک الگوریتم بهینه و پیاده‌سازی الگوریتم با یک زبان برنامه‌نویسی مناسب (مجموعهٔ زبان‌های برنامه‌نویسی مجاز از مسابقه‌ای به مسابقهٔ دیگر متفاوت است). هر راه‌حل ارائه شده توسط یک شرکت‌کننده روی تست‌های ورودی متعددی (معمولاً مخفی) توسط قاضی اجرا می‌شوند. به‌طور معمول، قاضی برخط به صورت همه یا هیچ نمره‌دهی می‌کند، به این معنی که راه‌حل «پذیرفته شده» است تنها در صورتی که در مقابل تمامی ورودی‌ها پاسخ درست خروجی دهد و در غیر این صورت رد می‌شود. با این وجود، ممکن است در برخی از مسابقات بسته به نوع سؤال و با توجه به تعداد تست‌هایی که درست پاسخ‌دهی می‌شوند امتیازدهی به‌صورت جزئی از امتیاز کامل سؤال انجام شود. در برخی از سوالات هم خروجی به ازای یک تست مشخص یکتا نیست و ممکن دو راه‌حل درست دو خروجی متفاوت ارائه دهند که در این‌صورت قاضی برخط خروجی را با توجه به ورودی داده شده تجزیه و تحلیل و درستی آن را بررسی می‌کند. مسابقات معروف دو قالب کلی کوتاه‌مدت و بلندمدت برای مسابقات برنامه‌نویسی وجود دارد. کوتاه‌مدت مسابقه بین‌المللی برنامه‌نویسی دانشگاهی (ICPC) - یکی از قدیمی‌ترین مسابقات برنامه‌نویسی برگزار شده، برای دانشجویان دانشگاه‌ها و در قالب گروه‌های ۳ نفره گوگل کدجم - مسابقه‌ای که از سال ۲۰۰۳ هر سال توسط گوگل برگزار می‌شود. فیس‌بوک هکرکاپ - مسابقه‌ای که از سال ۲۰۱۱ هر سال برگزار می‌شود، توسط فیس بوک برگزار می‌شود. | ## بخش 3: برنامه‌نویسی مسابقه‌ای | هکررنک - انواع و اقسام مختلفی از مسابقات برنامه‌نویسی توسط افراد و ارگان‌های مختلف کدفورسز - معمولاً دوساعته و هفته‌ای ۲–۳ بار مسابقه برنامه‌نویسی IEEEXtreme - رقابت سالانه برای اعضای انجمن IEEE که از سال ۲۰۰۶ توسط IEEE برگزار می‌شود. IOI - یکی از قدیمی‌ترین مسابقات، برای دانش آموزان دوره متوسطه که از هر کشور ۴ نماینده در آن حضور پیدا می‌کنند. (در ایران معاونت دانش‌پژوهان جوان وزارت آموزش و پرورش متولی اعزام دانش‌آموزان است) مسابقات آزاد تاپ‌کدر (TCO) - مسابقه‌ای که از سال ۲۰۰۴ در وبگاه Topcoder به‌صورت ماهانه برگزار می‌شود. المپیاد ملی انفورماتیک چین - مسابقه‌ای که از سال ۱۹۸۴ در چین با هدف گلچین کردن دانش‌آموزان برای المپیاد جهانی کامپیوتر برگزار می‌شود. طولانی مدت هفته‌کد HackerRank مسابقه برنامه‌نویسی ICFP - مسابقه‌ای سالانه که در ۳ روز برگزار می‌شود و اولین دورهٔ آن به سال ۱۹۸۸ بر می‌گردد که توسط کنفرانس بین‌المللی برنامه‌نویسی کاربردی برگزار می‌شود. کدکاپ - مسابقه هوش‌مصنوعی برای بازی‌های تخته‌ای است که از سال ۲۰۰۳ به‌صورت سالانه برگزار می‌شود. | ## جمع‌بندی | هالیت - یک چالش برنامه‌نویسی هوش‌مصنوعی که توسط سیگما، کرنل تک و گوگل برگزار می‌شود.