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

رجلان يجلسان على مكتبين، أحدهما مزود بجهاز كمبيوتر والآخر عليه أوراق مبعثرة.
بيتر ميتريتشيف (يسار) وجينادي كورتكيفيتش (يمين)، اثنان من أبرز مبرمجي المسابقات خلال بطولة ياندكس للخوارزميات لعام 2013

البرمجة التنافسية ، أو البرمجة الرياضية، هي رياضة ذهنية يتنافس فيها المشاركون على برمجة تطبيقات وفقًا لمواصفات محددة. تُقام المسابقات عادةً عبر الإنترنت أو شبكة محلية . تحظى البرمجة التنافسية باعتراف ودعم العديد من شركات البرمجيات والإنترنت متعددة الجنسيات، مثل جوجل [ 1 ] [ 2 ] وميتا [ 3 ] .

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

تاريخ

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

في الفترة من 1990 إلى 1994، أدار كل من أوين أستراشان وفيفيك خيرا وديفيد كوتز واحدة من أوائل مسابقات البرمجة الموزعة عبر الإنترنت والمستوحاة من مسابقة البرمجة الدولية للهواة (ICPC). [ 5 ]

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

ملخص

The aim of competitive programming is to write computer programs which are able to solve given problems. A vast majority of problems appearing in programming contests are mathematical or logical in nature. Typical such tasks belong to one of the following categories: combinatorics, number theory, graph theory, algorithmic game theory, computational geometry, string analysis, discrete mathematics and data structures.[6] Problems related to constraint programming and artificial intelligence are also popular in certain competitions.

Irrespective of the problem category, the process of solving a problem can be divided into two broad steps: constructing an efficient algorithm, and implementing the algorithm in a suitable programming language (the set of programming languages allowed varies from contest to contest). These are the two most commonly tested skills in programming competitions.

In most contests, the judging is done automatically by host machines, commonly known as judges. Every solution submitted by a contestant is run on the judge against a set of (usually secret) test cases. Normally, contest problems have an all-or-none marking system, meaning that a solution is "Accepted" only if it produces satisfactory results on all test cases run by the judge, and is rejected otherwise. However, some contest problems may allow for partial scoring, depending on the number of test cases passed, the quality of the results, or some other specified criteria. Some other contests only require that the contestant submit the output corresponding to given input data, in which case the judge only has to analyze the submitted output data.

Online judges are online environments in which testing takes place. Online judges have rank lists showing users with the biggest number of accepted solutions and/or shortest execution time for a particular problem.[7]

Notable competitions

Algorithm competitions

Name of the competition[8]OrganizersAudienceDescriptionNumber of participants
Google Code Jam (GCJ)GoogleopenAnnual competition organized and sponsored by Google from 2003 until its cancellation in 2023.[9]32,702 (2022)[10]
International Collegiate Programming Contest (ICPC)[11]ICPC Foundationuniversity studentsمسابقة فرق لطلاب الجامعات، تتألف من جولات إقليمية عديدة تختتم بنهائي عالمي يُنظم سنوياً. يتكون كل فريق من ثلاثة طلاب من الجامعة نفسها، ويُسمح لهم باستخدام جهاز كمبيوتر واحد فقط. [ 12 ]50,000+ (2022) [ 13 ]
الأولمبياد الدولي للمعلوماتية (IOI)IOIطلاب ما قبل الجامعةمسابقة دولية لطلاب المدارس الثانوية. تُنظم سنوياً منذ عام 1989. يمكن لكل دولة إرسال 4 مشاركين كحد أقصى للمنافسة.349 من 88 دولة (2022) [ 14 ]
كأس ميتا هاكر ( كأس فيسبوك هاكر سابقاً )منصات ميتايفتحمسابقة سنوية تقام منذ عام 2011. يتم تنظيمها ورعايتها من قبل ميتا ( فيسبوك سابقًا ).27604 (2022) [ 15 ]
توبكودر أوبن (TCO)توبكودريفتحمسابقة الخوارزميات السنوية التي أقيمت من عام 2001 حتى إلغائها في عام 2023 [ 16 ]

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

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

  • قد تكون القائمة غير مكتملة
اسمالمنظمون الرئيسيونوصفحالة
كاغلجوجلمنصة ومجمع إلكتروني لمسابقات علوم البيانات والتعلم الآلي والتحسين الرياضي.نشيط
تحدي الذكاء الاصطناعيجامعة واترلومسابقة دولية لبرمجة الذكاء الاصطناعي أقيمت في الفترة من 2009 إلى 2011.غير نشط
مسابقة هاليت لبرمجة الذكاء الاصطناعيتو سيجما، كورنيل تكمسابقة برمجة حاسوبية حيث يقوم المشاركون ببناء روبوتات بلغة البرمجة المطلوبة للتنافس في ساحة معركة ثنائية الأبعاد.مجهول
كأس الذكاء الاصطناعي الروسيمجموعة Mail.Ru، My.comمسابقة سنوية لبرمجة الذكاء الاصطناعي.مجهول

مسابقات تركز على تقنيات المصادر المفتوحة

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

المنصات الإلكترونية

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

اسموصف
ظهور البرمجةمسابقة برمجة سنوية تُقام خلال فترة المجيء ، حيث يُطرح لغزان جديدان كل يوم حتى يوم عيد الميلاد. يبقى اللغز الثاني مغلقًا حتى إتمام الجزء الأول، وعادةً ما يكون متتابعًا منطقيًا. توجد لوحات متصدرين عالمية وخاصة لكل عام، حيث تُحدد المراكز بناءً على من يحل اللغز أولًا.
CodeChef [ 17 ] [ 18 ]تُشرف أكاديمية Unacademy على هذه المنصة، التي تستضيف مسابقةً تستمر ثلاثة أيام، بالإضافة إلى مسابقتين قصيرتين شهريًا (إحداهما على غرار مسابقة IOI بعنوان Lunchtime، والأخرى على غرار مسابقة ICPC بعنوان Cook-Off)، كما توفر منصةً لاستضافة المسابقات للمؤسسات التعليمية مجانًا. يحصل الفائزان الأول والثاني في المسابقة الطويلة على جوائز نقدية، بينما يحصل أفضل عشرة متسابقين على مستوى العالم على قميص.
Codeforces [ 19 ] [ 17 ]منصة روسية، تُشرف عليها جامعة ITMO ، تُتيح مسابقات متكررة (حتى مسابقتين أسبوعيًا) لمدة ساعتين إلى ثلاث ساعات (متوفرة باللغتين الإنجليزية والروسية). يُمكن للمستخدمين أيضًا المشاركة في المسابقات التي ينشرها مستخدمون آخرون في قسم "التدريب"، وإضافة حالات اختبارية لتحليل حلول المنافسين الآخرين أثناء المسابقات، وكتابة مدونات لتبادل التقنيات، والاطلاع على شفرة المصدر لحلول المستخدمين الآخرين. قد يحصل المتسابقون الذين يحققون تصنيفًا عاليًا على مزايا إضافية، مثل إضافة وسوم للمسائل واقتراح مجموعات مسائل للمسابقات الرسمية.
لعبة البرمجةألغاز (تزداد صعوبتها)، لعبة غولف البرمجة . تستضيف مسابقات منتظمة عبر الإنترنت (ألعاب برمجة وتحديات برمجة).
حروب البرمجةمنصة تفاعلية مجتمعية ضمن بيئة تطوير متكاملة عبر الإنترنت ، حيث يحلّ المستخدمون تحديات برمجية صغيرة ( كاتا ) بلغات برمجة متنوعة. يحصل المستخدمون على رتب وجوائز تقديرية عند إتمام التحديات وإنشاء تحديات جديدة. تركز المنصة على التعلم من خلال الممارسة ومراجعة الأقران، مع توفير الحلول والمناقشات بعد إتمام كل تحدٍ.
HackerEarth [ 17 ]شركة مقرها بنغالور ، الهند ، تقدم بيئة شبيهة بالمسابقات عبر الإنترنت بهدف توفير حلول تقييم التوظيف.
هاكر رانكيُقدّم موقع HackerRank مسائل برمجية في مختلف مجالات علوم الحاسوب. كما يستضيف فعاليات Codesprints السنوية التي تُساعد على ربط المبرمجين بالشركات الناشئة في وادي السيليكون .
LeetCodeيضم موقع LeetCode أكثر من 2300 سؤال تغطي العديد من مفاهيم البرمجة المختلفة، ويقدم مسابقات أسبوعية ونصف شهرية. وتُقدم مهام البرمجة باللغتين الإنجليزية والصينية.
مشروع أويلر [ 18 ]مجموعة كبيرة من مسائل الرياضيات الحسابية (أي غير مرتبطة مباشرة بالبرمجة، ولكنها تتطلب غالبًا مهارات برمجية لحلها). على عكس منصات التحكيم الإلكترونية الأخرى، لا يتطلب تقديم الحلول كتابة الكود المصدري. بدلًا من ذلك، تتطلب كل مسألة إجابة عددية فقط (وهي عادةً ما تكون كبيرة جدًا بحيث يصعب تخمينها أو حسابها يدويًا)، مما يسمح للمستخدمين باستخدام أي طريقة يرونها مناسبة لحل المسائل، بما في ذلك اختيار لغة البرمجة من عدمه.
SPOJ [ 17 ]نظام التحكيم الإلكتروني البولندي الذي يوفر الكثير من المشاكل للتدريب، ويوفر منصة للمنظمين الآخرين لاستضافة مسابقات البرمجة الخاصة بهم.
توبكودر [ 19 ] [ 17 ]شركة أمريكية متخصصة في الموارد، تنظم مسابقات وتوفر حلولاً لمشاكل صناعية كنوع من العمل الحر؛ تقدم الشركة عشرات المسابقات القصيرة وعدة مسابقات طويلة ("ماراثونية") كل عام. ومن مميزاتها الفريدة أن المشاركين لديهم فرصة للتحقق من صحة حلول المتسابقين الآخرين بعد مرحلة البرمجة وقبل الاختبار الآلي النهائي (ما يسمى "مرحلة التحدي").
قاضي جامعة فرجينيا عبر الإنترنت [ 19 ] [ 17 ]يحتوي على أكثر من 4500 مسألة للتدريب. ويستضيف مسابقات منتظمة عبر الإنترنت. تم افتتاحه عام 1995، وهو من أقدم المواقع الإلكترونية من هذا النوع.

الفوائد والانتقادات

قد تُسهم المشاركة في مسابقات البرمجة في زيادة حماس الطلاب لدراسة علوم الحاسوب . كما تُحسّن المهارات المكتسبة في مسابقات البرمجة المشابهة لمسابقة ICPC الآفاق الوظيفية، إذ تُساعد على اجتياز "المقابلات الفنية"، التي غالبًا ما تتطلب من المرشحين حلّ مسائل برمجية وخوارزمية معقدة بشكل فوري. [ 19 ] [ 20 ]

وُجّهت انتقاداتٌ أيضًا إلى البرمجة التنافسية، لا سيما من قِبل مطوري البرمجيات المحترفين . [ 21 ] ومن النقاط الجوهرية أن العديد من مسابقات البرمجة السريعة تُعلّم المتنافسين عادات برمجة سيئة وأساليب كتابة أكواد رديئة (مثل الاستخدام غير الضروري للماكرو ، والافتقار إلى تجريد البرمجة الكائنية والتعليقات، واستخدام أسماء متغيرات قصيرة، إلخ). [ 22 ] [ 21 ] كذلك، من خلال تقديم ألغاز خوارزمية صغيرة ذات حلول قصيرة نسبيًا، لا تُعلّم مسابقات البرمجة مثل ICPC وIOI بالضرورة مهارات وممارسات هندسة البرمجيات الجيدة ، حيث أن مشاريع البرمجيات الحقيقية عادةً ما تحتوي على آلاف الأسطر من الأكواد ويتم تطويرها بواسطة فرق كبيرة على مدى فترات زمنية طويلة. [ 21 ] ذكر بيتر نورفيج أنه بناءً على البيانات المتاحة، فإن الفوز في مسابقات البرمجة يرتبط سلبًا بأداء المبرمج في وظيفته في جوجل (على الرغم من أن الفائزين في المسابقات لديهم فرص أكبر في الحصول على وظيفة). [ 23 ] وذكر نورفيج لاحقًا أن هذه العلاقة لوحظت على مجموعة بيانات صغيرة ، ولكن لم يكن من الممكن تأكيدها بعد فحص مجموعة بيانات أكبر. [ 24 ]

ثمة رأي آخر مفاده أنه بدلاً من إضاعة الوقت في منافسة مفرطة من خلال حل المشكلات ذات الحلول المعروفة، ينبغي على المبرمجين البارزين استثمار وقتهم في حل مشكلات العالم الحقيقي. [ 21 ]

الأدب

  • حليم، س.، حليم، ف. (2013). البرمجة التنافسية 3: الحد الأدنى الجديد لمسابقات البرمجة . لولو.
  • لاكسونين، أ. (2017). دليل البرمجة التنافسية (مواضيع جامعية في علوم الحاسوب). تشام: دار نشر سبرينغر الدولية.
  • شو، إكس. (2020) تطور وازدهار وانحدار الأولمبياد في المعلوماتية . نُشر على الإنترنت .
  • كوستكا، ب. (2021). البرمجة الرياضية في الممارسة العملية. جامعة فروتسواف.

انظر أيضاً

مراجع

  1. "Google Code Jam" . google.com . مؤرشف من الأصل في 31 مايو 2023. تم الاطلاع عليه في 20 فبراير 2016 .
  2. "الراعي الرسمي لمؤتمر TCO12: جوجل - TCO 12" . topcoder.com . مؤرشف من الأصل بتاريخ 16 فبراير 2012.
  3. "كأس هاكر فيسبوك" . فيسبوك . تم الاطلاع عليه بتاريخ 20 فبراير 2016 .
  4. لي، يوجيا؛ تشوي، ديفيد؛ تشونغ، جونيونغ؛ كوشمان، نيت؛ شريتويزر، جوليان؛ ليبلوند، ريمي؛ إيكلز، توم؛ كيلينغ، جيمس؛ جيمينو، فيليكس؛ لاغو، أغوستين دال؛ هوبرت، توماس؛ تشوي، بيتر؛ دوتوم، سيبريان دي ماسون؛ بابوشكين، إيغور؛ تشين، شينيون (9 ديسمبر 2022). "توليد أكواد على مستوى المنافسة باستخدام ألفا كود". مجلة ساينس . 378 (6624): 1092-1097 . arXiv : 2203.07814 . Bibcode : 2022Sci...378.1092L . doi : 10.1126/science.abq1158 . ISSN 0036-8075 . PMID 36480631 .  
  5. خيرا، فيفيك؛ أستراشان، أوين؛ كوتز، ديفيد (1993). "مسابقة برمجة الإنترنت" (ملف PDF) . نشرة ACM SIGCSE . 25 (1): 48-52 . doi : 10.1145/169073.169105 . ISSN 0097-8418 . مؤرشف من الأصل (ملف PDF) في 8 أغسطس 2017. تم الاطلاع عليه في 10 مارس 2020 . 
  6. باك، إيغور. "الخوارزميات" . الرياضيات 182. جامعة كاليفورنيا، لوس أنجلوس . تم الاسترجاع في 31 مارس 2024 .
  7. تحديات البرمجة (سكينا وريفيلا) ISBN 0387001638، ISBN 978-0387001630
  8. ^ كوستكا، بارتوش (2021). البرمجة الرياضية في الممارسة (PDF) . جامعة فروتسواف.
  9. "احتفل بمسابقات البرمجة من جوجل بجولة أخيرة من متعة البرمجة" . مدونة مطوري جوجل . جوجل . تم الاطلاع عليه بتاريخ 28 فبراير 2023 .
  10. "كود جام - مسابقات البرمجة من جوجل" . مسابقات البرمجة . مؤرشف من الأصل في 27 يونيو 2023. تم الاطلاع عليه في 26 فبراير 2023 .
  11. "ICPC" . icpc.global . تم الاطلاع عليه بتاريخ 26 فبراير 2023 .
  12. "بيئة البرمجة - وثائق ICPC" . تم الاطلاع عليه في 15 فبراير 2024 .
  13. "ICPC" . icpc.global . تم الاطلاع عليه بتاريخ 26 فبراير 2023 .
  14. "الأولمبياد" . stats.ioinformatics.org . تم الاطلاع عليه بتاريخ 26 فبراير 2023 .
  15. "كأس ميتا هاكر - 2022 - جولة التصفيات" . www.facebook.com . تم الاطلاع عليه بتاريخ 26 فبراير 2023 .
  16. "أسئلة وأجوبة - اجتماع مجتمع توبكودر مع دوغ هانسون، الرئيس التنفيذي لشركة توبكودر" . توبكودر . تم الاطلاع عليه بتاريخ 28 فبراير 2023 .
  17. 1 2 3 4 5 6 لويجي، ويليام دي؛ فارينا، غابرييل؛ لورا، لويجي؛ ناني، أمبرتو؛ تيمبريني، ماركو؛ فيرساري، لوكا (2016). "oii-web: برمجة تفاعلية عبر الإنترنت oii-web: نظام تدريب تفاعلي لمسابقات البرمجة عبر الإنترنت" (PDF) . الأولمبياد في المعلوماتية . 10 : 207-222 . دوى : 10.15388/ioi.2016.13 . S2CID 6877554 . 
  18. 1 2 كومبيفيس، سيباستيان؛ ووتيليه، جيريمي (2014). "التدريب على البرمجة وتدريس المعلوماتية من خلال المسابقات عبر الإنترنت" (ملف PDF) . أولمبياد المعلوماتية . 8 : 21-34 .
  19. 1 2 3 4 بلومفيلد، آرون؛ سوتومايور، بورخا. "دليل استراتيجية مسابقة البرمجة" (ملف PDF) . SIGCSE '16: وقائع الندوة الفنية السابعة والأربعين لجمعية ACM حول تعليم علوم الحاسوب .
  20. جاكسون، دين (1 ديسمبر 2013). "المقابلة التقنية في جوجل: كيف تحصل على وظيفة أحلامك" (ملف PDF) . XRDS: Crossroads، مجلة ACM للطلاب . 20 (2): 12-14 . doi : 10.1145/2539270 . S2CID 27549057 . 
  21. 1 2 3 4 سميث، دنكان (2 ديسمبر 2015). "نقاش البرمجة التنافسية" .
  22. حليم، ستيفن. "CS3233 - البرمجة التنافسية" . كلية الحوسبة بجامعة سنغافورة الوطنية .
  23. "الفوز في مسابقات البرمجة عامل سلبي للتميز في العمل" . يوتيوب . 5 أبريل 2015.
  24. "مناقشة HN حول العلاقة بين الأداء الوظيفي والبرمجة التنافسية" . ديسمبر 2020.