برمجة تنافسية

البرمجة التنافسية (المعروفة أيضًا باسم البرمجة الرياضية) هي رياضة ذهنية تُقام عادةً عبر الإنترنت أو عبر شبكة محلية، وتشمل المشاركين الذين يحاولون البرمجة وفقًا للمواصفات المقدمة. يشار إلى المتسابقين باسم مبرمجي الرياضة أو مبرمجين تنافسيين. يتم الاعتراف بالبرمجة التنافسية ودعمها من قبل العديد من شركات البرمجيات متعددة الجنسيات وشركات الإنترنت، مثل غوغل وفيسبوك.

تتضمن مسابقة البرمجة التنافسية عمومًا قيام المنضم بتقديم مجموعة من المشكلات المنطقية أو الرياضية، والمعروفة أيضًا باسم الألغاز أو التحديات، إلى المتسابقين (الذين يمكن أن يختلف عددهم من عشرات أو حتى مئات إلى عدة آلاف). يُطلب من المتسابقين كتابة برامج كمبيوتر تتولى حل هذه المشكلات. يعتمد التحكيم في الغالب على عدد المشكلات التي تم حلها والوقت المستغرق لكتابة الحلول الناجحة، ولكنه قد يشمل أيضًا عوامل أخرى (جودة المخرجات المنتجة، ووقت التنفيذ، وكفاءة استخدام الذاكرة، وحجم البرنامج، وما إلى ذلك).

 تاريخ 
واحدة من أقدم المسابقات المعروفة هي مسابقة البرمجة الجماعية الدولية (ICPC) التي نشأت في السبعينيات، ونمت لتشمل 88 دولة في نسختها لعام 2011.

من عام 1990 إلى عام 1994 ، أدار أوين أستراشان وفيفك خيرا وديفيد كوتز واحدة من أولى مسابقات البرمجة الموزعة على الإنترنت المستوحاة من مسابقة البرمجة الجماعية الدولية.

نما الاهتمام بالبرامج التنافسية على نطاق واسع منذ عام 2000 إلى عشرات الآلاف من المشاركين وهو مرتبط بقوة بنمو الإنترنت مما يسهل إجراء المسابقات الدولية عبر الإنترنت، مما يلغي المشكلات الجغرافية.

 ملخص 
الهدف من البرمجة التنافسية هو كتابة الكود المصدري لبرامج الكمبيوتر القادرة على حل مشاكل معينة. الغالبية العظمى من المشاكل التي تظهر في مسابقات البرمجة هي رياضية أو منطقية بطبيعتها. تنتمي هذه المهام النموذجية إلى إحدى الفئات التالية: التوافقية، ونظرية الأعداد، ونظرية الرسم البياني، ونظرية اللعبة الخوارزمية، والهندسة الحسابية، وتحليل السلاسل، وهياكل البيانات. المشاكل المتعلقة بالبرمجة القيدية والذكاء الاصطناعي شائعة أيضًا في بعض المسابقات.

بغض النظر عن فئة المشكلة، يمكن تقسيم عملية حل المشكلة إلى خطوتين رئيسيتين: بناء خوارزمية فعالة، وتنفيذ الخوارزمية بلغة برمجة مناسبة (تختلف مجموعة لغات البرمجة المسموح بها من مسابقة إلى أخرى). هاتان هما أكثر المهارات التي يتم اختبارها شيوعًا في مسابقات البرمجة.

في معظم المسابقات، يتم التحكيم تلقائيًا بواسطة الأجهزة المضيفة، المعروفة باسم الحكام. يتم تشغيل كل حل يقدمه المتسابق على القاضي ضد مجموعة من حالات الاختبار (السرية عادةً). في العادة، تشتمل مشكلات المسابقة على نظام تصحيح الكل أو لا شيء، مما يعني أن الحل "مقبول" فقط إذا كان ينتج عنه نتائج مرضية في جميع حالات الاختبار التي يديرها الحكم ويقع رفضه بطريقة أخرى. ومع ذلك، قد تسمح بعض مشكلات المسابقة بالتسجيل الجزئي، اعتمادًا على عدد حالات الاختبار التي تم اجتيازها، أو جودة النتائج، أو بعض المعايير المحددة الأخرى. تتطلب بعض المسابقات الأخرى فقط أن يقدم المتسابق المخرجات المقابلة لبيانات الإدخال المحددة، وفي هذه الحالة يتعين على القاضي فقط تحليل بيانات الإخراج المقدمة.

الحكام عبر الإنترنت هم بيئات عبر الإنترنت يتم فيها إجراء الاختبار. لدى الحكام عبر الإنترنت قوائم ترتيب تُظهر المستخدمين الذين لديهم أكبر عدد من الحلول المقبولة و/أو أقصر وقت تنفيذ لمشكلة معينة.Programming Challenges (Skiena & Revilla) ,  

 مسابقات بارزة 

 مسابقات الخوارزمية 
+اسم المسابقة  المنظمون جمهور وصف عدد المشاركين موقع إلكتروني مسابقة Google Code Jam (GCJ) جوجل مفتوح مسابقة سنوية نظمتها ورعتهاجوجل من عام 2003 حتى إلغائها في عام 2023. 32702 (2022)  https://codingcompetitions.withgoogle.com/codejam  مسابقة البرمجة الجماعية الدولية (ICPC)  مؤسسة ICPC طالب جامعي مسابقة جماعية لطلاب الجامعات ، تتكون المسابقة من العديد من الجولات الإقليمية التي تختتم بنهائي عالمي يتم تنظيمه سنويًا. تتكون الفرق من ثلاثة طلاب من نفس الجامعة ويسمح لهم باستخدام جهاز كمبيوتر واحد فقط. 50000+ (2022)  https://icpc.global/ الأولمبياد الدولي للمعلوماتية (IOI) IOI طلاب المدارس الثانوية مسابقة دولية لطلاب المدارس الثانوية. ينظم سنويا منذ عام 1989. يمكن لكل دولة إرسال 4 مشاركين كحد أقصى للمنافسة. 349 من 88 دولة (2022)  https://ioinformatics.org/ كأس Meta Hacker ( كأس Facebook Hacker سابقًا) منصات ميتا يفتح تقام المسابقة السنوية منذ عام 2011. منظمة وبرعاية Meta ( Facebook سابقًا). 27604 (2022)  https://www.facebook.com/codingcompetitions/hacker-cup Topcoder Open (TCO) توب كودر يفتح أقيمت مسابقة الخوارزمية السنوية من عام 2001 حتى إلغائها في عام 2023  https://www.topcoder.com/community/member-programs/topcoder-open/
في معظم المسابقات المذكورة أعلاه، عادة ما يتم تنظيم المسابقات في عدة جولات. عادة ما تبدأ بجولات عبر الإنترنت، والتي تنتهي في الجولة النهائية في الموقع. يحصل أصحاب الأداء الأفضل في IOI و ICPC على ميداليات ذهبية وفضية وبرونزية. في المسابقات الأخرى، يتم منح جوائز نقدية لأفضل المتسابقين. تجذب المسابقات أيضًا اهتمام القائمين بالتوظيف من العديد من شركات البرامج والإنترنت، والتي غالبًا ما تصل إلى المنافسين الذين لديهم عروض عمل محتملة.

 ذكاء اصطناعي وتعلم الآلة 

 Kaggle - مسابقات علوم البيانات والتعلم الآلي.
 CodeCup - مسابقة الذكاء الاصطناعي للعبة اللوحة التي تقام سنويًا منذ عام 2003. يتم نشر قواعد اللعبة في سبتمبر وتقام البطولة النهائية في يناير.Lasse Hakulinen. Survey on Informatics Competitions: Developing Tasks – Olympiads in Informatics, 2011, Vol. 5, 12–25. Wevers, Lesley (2014). (PDF). University of Twente. Archived from the original (PDF) on 13 April 2017. Retrieved 16 September 2018.
 Google AI Challenge - مسابقات نصف سنوية للطلاب استمرت من 2009 إلى 2011.
 Halite  - تحدٍ لبرمجة الذكاء الاصطناعي برعاية Two Sigma و Cornell Tech و  وجوجل.
 كأس روسيا للذكاء الاصطناعي - مسابقة برمجة ذكاء اصطناعي مفتوحة.
 CodinGame - تستضيف مسابقات برمجة الروبوتات الموسمية.

 مسابقات تركز على تقنيات المصادر المفتوحة 
اسم المسابقة الراعي الرئيسي وصف يعمل منذ الوقت المعتاد دورة التطبيق التالية حالة مسابقة البرمجة متعددة الوكلاء جامعة كلاوستال للتكنولوجيا بالاشتراك مع ورش العمل الموجهة للوكيل مسابقة البرمجة الدولية السنوية لتحفيز البحث في مجال تطوير وبرمجة الأنظمة متعددة الوكلاء . 2005 سبتمبر سبتمبر 2011 نشيط Google Summer of Code شركة جوجل. برنامج سنوي تُمنح من خلاله جوائز Google لمئات الطلاب الذين أكملوا بنجاح مشروع برمجيات مجانية / برمجيات مفتوحة المصدر مطلوبة خلال فصل الصيف. 2005 مارس-أغسطس 23 مارس - 3 أبريل نشيط مسابقة المشاركة المفتوحة للغاية من Google شركة جوجل. مسابقة أجرتها Google في 2007-8 تستهدف طلاب المدارس الثانوية. تم تصميم المسابقة لتشجيع طلاب المدارس الثانوية على المشاركة في مشاريع مفتوحة المصدر. 2007 نوفمبر-فبراير مجهول مجهول

 منصات على الإنترنت 
قام مجتمع البرمجة حول العالم بإنشاء وصيانة العديد من موارد الإنترنت المخصصة للبرمجة التنافسية. يقدمون مسابقات قائمة بذاتها مع أو بدون جوائز بسيطة. كما تعد المحفوظات السابقة للمشكلات موردًا شائعًا للتدريب على البرمجة التنافسية. هناك العديد من المنظمات التي تستضيف مسابقات البرمجة على أساس منتظم. وتشمل هذه:
اسم وصف موقع إلكتروني ازدحام أكبر منصة برمجة تنافسية مقرها في أمريكا اللاتينية. يحتوي على أكثر من 2300 من تحديات البرمجة في 3 لغات مختلفة (الإنجليزية والبرتغالية والإسبانية) ، مصنفة في 9 فئات و 10 مستويات مختلفة من الصعوبة. تستضيف مسابقات متكررة برعاية الشركات وأنفسهم. كان يُعرف سابقًا باسم URI Online Judge. www.beecrowd.com.br كود شيف  تحتفظ بها Unacademy ، تستضيف مسابقة لمدة 3 أيام واثنين من المسابقات القصيرة كل شهر (واحدة على غرار IOI تسمى Lunchtime وأخرى على غرار ICPC تسمى Cook-Off) ، وتوفر منصة استضافة المسابقة للمؤسسات التعليمية مجانًا. الفائزان الأوائل في المسابقة الطويلة يفوزان بجوائز نقدية بينما يحصل العشرة الأوائل على قميص.  كودكوب مسابقة برمجة الذكاء الاصطناعي السنوية للعبة اللوحة الدولية التي تنظمها الأولمبياد الهولندي للمعلوماتية منذ عام 2003.  الرموز Bloomfield, Aaron; Sotomayor, Borja. "A Programming Contest Strategy Guide" (PDF). SIGCSE '16: Proceedings of the 47th ACM Technical Symposium on Computing Science Education. مورد روسي ، تحتفظ به جامعة ITMO ، والذي يقدم في الغالب مسابقات قصيرة متكررة (تصل إلى مرتين في الأسبوع). ميزات خاصة: جميع الحلول مفتوحة المصدر ، والقدرة على التحقق من صحة حلول المتسابقين الآخرين خلال "مرحلة القرصنة" ، والمسابقات الافتراضية ، والتدريب ، إلخ.  لعبة الترميز الألغاز (الصعوبة المتزايدة) ، لعبة غولف الكود . يستضيف مسابقات منتظمة عبر الإنترنت (تحديات الذكاء الاصطناعي ، مشاكل التحسين ).  هاكر إيرث  بنغالور ، شركة مقرها الهند تقدم مسابقة عبر الإنترنت مثل البيئة التي تهدف إلى توفير حلول تقييم التوظيف.  هاكر رانك يقدم HackerRank مشاكل البرمجة في مجالات مختلفة من علوم الكمبيوتر. كما أنها تستضيف مطبوعات Codesprints السنوية التي تساعد على ربط المبرمجين والشركات الناشئة في Silicon Valley.  مشروع أويلر  مجموعة كبيرة من مسائل الرياضيات الحسابية (أي لا ترتبط مباشرة بالبرمجة ولكنها تتطلب غالبًا مهارات البرمجة لحلها).  Topcoder  شركة موارد وشركات أمريكية ، التي تنظم المسابقات وتوفر أيضًا المشكلات الصناعية كنوع من العمل الحر ؛ تقدم العشرات من المسابقات القصيرة والعديد من المسابقات الطويلة ("الماراثون") كل عام. ميزة محددة - المشاركون لديهم فرصة للتحقق من صحة حلول المتسابقين الآخرين بعد مرحلة الترميز وقبل الاختبار التلقائي النهائي (ما يسمى "مرحلة التحدي").  قاضي UVa عبر الإنترنت  يحتوي على أكثر من 4500 مشكلة للممارسة. يستضيف مسابقات منتظمة عبر الإنترنت. تم افتتاحه في عام 1995 ، وهو أحد أقدم مواقع الويب من هذا القبيل.  SPOJ  نظام القاضي البولندي عبر الإنترنت الذي يوفر الكثير من المشاكل للتدريب ، ويوفر منصة للمنظمين الآخرين لاستضافة مسابقات البرمجة الخاصة بهم.  افتح كاتيس نسخة عامة من نظام إدارة مسابقة كاتيس ، مع أرشيف لأكثر من 2600 مشكلة. تم تطوير Kattis لمساعدة دورات علوم الكمبيوتر ، ولكنها تستخدم أيضًا لاستضافة مسابقات مرموقة ، مثل نهائيات ICPC العالمية.  أتكودير مقرها في اليابان ، تقدم AtCoder مسابقات برمجة عبر الإنترنت على أساس أسبوعي. يتم تقديم المسابقات باللغتين اليابانية والإنجليزية.
اعتبارًا من عام 2020 ، تعد واحدة من أكثر المنصات شعبية من نوعها.  تيموس يحتوي على مشاكل من مسابقات في منطقة الأورال.  VJudge يحتوي على مشاكل من العديد من القضاة عبر الإنترنت.  Baekjoon OJ قاضي كوري اون لاين.  LeetCode يحتوي LeetCode على أكثر من 2300 سؤال تغطي العديد من مفاهيم البرمجة المختلفة ويقدم مسابقات أسبوعية ونصف أسبوعية. يتم تقديم مهام البرمجة باللغتين الإنجليزية والصينية. leetcode.com

 الفوائد والنقد 
قد تؤدي المشاركة في مسابقات البرمجة إلى زيادة حماس الطلاب لدراسات علوم الكمبيوتر. كما تعمل المهارات المكتسبة في مسابقات البرمجة الشبيهة بلجنة الكابلات الدولية على تحسين الآفاق الوظيفية، حيث تساعد في اجتياز "المقابلات الفنية"، والتي تتطلب غالبًا من المرشحين حل مشكلات البرمجة المعقدة والخوارزميات في الحال.

كانت هناك أيضًا انتقادات للبرمجة التنافسية، خاصة من مطوري البرامج المحترفين. إحدى النقاط المهمة هي أن العديد من مسابقات البرمجة سريعة الخطى تعلم المنافسين عادات البرمجة السيئة وأسلوب الكود (مثل الاستخدام غير الضروري لوحدات الماكرو، ونقص تجريد البرمجة كائنية التوجه والتعليقات، واستخدام أسماء متغيرة قصيرة، إلخ. ). أيضًا ، من خلال تقديم ألغاز خوارزمية صغيرة فقط مع حلول قصيرة نسبيًا ، فإن مسابقات البرمجة مثل ICPC و IOI لا تعلم بالضرورة مهارات وممارسات هندسة البرمجيات الجيدة ، حيث تحتوي مشاريع البرامج الحقيقية عادةً على عدة آلاف من أسطر التعليمات البرمجية ويتم تطويرها بواسطة فرق كبيرة على مدى فترات طويلة من الزمن. صرح بيتر نورفيج أنه بناءً على البيانات المتاحة ، فإن كونك فائزًا في مسابقات البرمجة يرتبط سلبًا بأداء المبرمج في وظيفته في Google (على الرغم من أن الفائزين في المسابقة لديهم فرص أعلى في التوظيف). صرح نورفيج لاحقًا أن هذا الارتباط لوحظ في مجموعة بيانات صغيرة ، ولكن لا يمكن تأكيده بعد فحص مجموعة بيانات أكبر.

هناك شعور آخر مفاده أنه بدلاً من "إضاعة" وقتهم في التنافس المفرط من خلال حل المشكلات باستخدام الحلول المعروفة، ينبغي على المبرمجين البارزين استثمار وقتهم في حل مشكلات العالم الحقيقي.Smith, Duncan (December 2, 2015). "The Competitive Programming Debate".

 في الأدب 

 حليم ، س ، حليم ، ف. (2013). البرمجة التنافسية 3: الحد الأدنى الجديد لمسابقات البرمجة . لولو.
 لاكسونن ، أ. (2017). دليل البرمجة التنافسية (موضوعات البكالوريوس في علوم الكمبيوتر). شام: Springer International Publishing.
 كوستكا ، ب. (2021). البرمجة الرياضية في الممارسة. جامعة فروتسواف.

 انظر أيضًا 
 هاكاثون

 مراجع 

 روابط خارجية 

 أداة مفتوحة المصدر استخدمت لإدارة والتحكم في الأولمبياد الدولي للمعلوماتية.

تصنيف:برمجة