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

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

## تاريخ

واحدة من أقدم المسابقات المعروفة هي مسابقة البرمجة الجماعية الدولية (ICPC) التي نشأت في السبعينيات، ونمت لتشمل 88 دولة في نسختها لعام 2011.
من عام 1990 إلى عام 1994 ، أدار أوين أستراشان وفيفك خيرا وديفيد كوتز واحدة من أولى مسابقات البرمجة الموزعة على الإنترنت المستوحاة من مسابقة البرمجة الجماعية الدولية.
نما الاهتمام بالبرامج التنافسية على نطاق واسع منذ عام 2000 إلى عشرات الآلاف من المشاركين وهو مرتبط بقوة بنمو الإنترنت مما يسهل إجراء المسابقات الدولية عبر الإنترنت، مما يلغي المشكلات الجغرافية.

## ملخص

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

## مسابقات بارزة
### مسابقات الخوارزمية

| اسم المسابقة | المنظمون | جمهور | وصف | عدد المشاركين | موقع إلكتروني |
| مسابقة Google Code Jam (GCJ) | جوجل | مفتوح | مسابقة سنوية نظمتها ورعتهاجوجل من عام 2003 حتى إلغائها في عام 2023. | 32702 (2022) | https://codingcompetitions.withgoogle.com/codejam نسخة محفوظة 24 يونيو 2022 على موقع واي باك مشين. |
| مسابقة البرمجة الجماعية الدولية (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. يتم نشر قواعد اللعبة في سبتمبر وتقام البطولة النهائية في يناير.
* 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) ، وتوفر منصة استضافة المسابقة للمؤسسات التعليمية مجانًا. الفائزان الأوائل في المسابقة الطويلة يفوزان بجوائز نقدية بينما يحصل العشرة الأوائل على قميص. | www.codechef.com |
| كودكوب | مسابقة برمجة الذكاء الاصطناعي السنوية للعبة اللوحة الدولية التي تنظمها الأولمبياد الهولندي للمعلوماتية منذ عام 2003. | codecup.nl |
| الرموز | مورد روسي ، تحتفظ به جامعة ITMO ، والذي يقدم في الغالب مسابقات قصيرة متكررة (تصل إلى مرتين في الأسبوع). ميزات خاصة: جميع الحلول مفتوحة المصدر ، والقدرة على التحقق من صحة حلول المتسابقين الآخرين خلال "مرحلة القرصنة" ، والمسابقات الافتراضية ، والتدريب ، إلخ. | codeforces.com |
| لعبة الترميز | الألغاز (الصعوبة المتزايدة) ، لعبة غولف الكود . يستضيف مسابقات منتظمة عبر الإنترنت (تحديات الذكاء الاصطناعي ، مشاكل التحسين ). | www.codingame.com |
| هاكر إيرث | بنغالور ، شركة مقرها الهند تقدم مسابقة عبر الإنترنت مثل البيئة التي تهدف إلى توفير حلول تقييم التوظيف. | www.hackerearth.com |
| هاكر رانك | يقدم HackerRank مشاكل البرمجة في مجالات مختلفة من علوم الكمبيوتر. كما أنها تستضيف مطبوعات Codesprints السنوية التي تساعد على ربط المبرمجين والشركات الناشئة في Silicon Valley. | hackerrank.com |
| مشروع أويلر | مجموعة كبيرة من مسائل الرياضيات الحسابية (أي لا ترتبط مباشرة بالبرمجة ولكنها تتطلب غالبًا مهارات البرمجة لحلها). | projecteuler.net |
| Topcoder | شركة موارد وشركات أمريكية ، التي تنظم المسابقات وتوفر أيضًا المشكلات الصناعية كنوع من العمل الحر ؛ تقدم العشرات من المسابقات القصيرة والعديد من المسابقات الطويلة ("الماراثون") كل عام. ميزة محددة - المشاركون لديهم فرصة للتحقق من صحة حلول المتسابقين الآخرين بعد مرحلة الترميز وقبل الاختبار التلقائي النهائي (ما يسمى "مرحلة التحدي"). | www.topcoder.com |
| قاضي UVa عبر الإنترنت | يحتوي على أكثر من 4500 مشكلة للممارسة. يستضيف مسابقات منتظمة عبر الإنترنت. تم افتتاحه في عام 1995 ، وهو أحد أقدم مواقع الويب من هذا القبيل. | onlinejudge.org |
| SPOJ | نظام القاضي البولندي عبر الإنترنت الذي يوفر الكثير من المشاكل للتدريب ، ويوفر منصة للمنظمين الآخرين لاستضافة مسابقات البرمجة الخاصة بهم. | www.spoj.com |
| افتح كاتيس | نسخة عامة من نظام إدارة مسابقة كاتيس ، مع أرشيف لأكثر من 2600 مشكلة. تم تطوير Kattis لمساعدة دورات علوم الكمبيوتر ، ولكنها تستخدم أيضًا لاستضافة مسابقات مرموقة ، مثل نهائيات ICPC العالمية. | open.kattis.com |
| أتكودير | مقرها في اليابان ، تقدم AtCoder مسابقات برمجة عبر الإنترنت على أساس أسبوعي. يتم تقديم المسابقات باللغتين اليابانية والإنجليزية. اعتبارًا من عام 2020 ، تعد واحدة من أكثر المنصات شعبية من نوعها. | atcoder.jp |
| تيموس | يحتوي على مشاكل من مسابقات في منطقة الأورال. | acm.timus.ru |
| VJudge | يحتوي على مشاكل من العديد من القضاة عبر الإنترنت. | vjudge.net |
| Baekjoon OJ | قاضي كوري اون لاين. | acmicpc.net |
| LeetCode | يحتوي LeetCode على أكثر من 2300 سؤال تغطي العديد من مفاهيم البرمجة المختلفة ويقدم مسابقات أسبوعية ونصف أسبوعية. يتم تقديم مهام البرمجة باللغتين الإنجليزية والصينية. | leetcode.com |

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

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

## في الأدب

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

## أنظر أيضا

* هاكاثون

## مراجع

* ↑ "Google Code Jam". google.com. مؤرشف من الأصل في 2023-05-31. اطلع عليه بتاريخ 2016-02-20.
* ↑ "TCO12 Sponsor: Google - TCO 12". topcoder.com. مؤرشف من الأصل في 2012-02-16.
* ↑ "Facebook Hacker Cup". Facebook. مؤرشف من الأصل في 2023-05-15. اطلع عليه بتاريخ 2016-02-20.
* ↑ Khera، Vivek؛ Astrachan، Owen؛ Kotz، David (1993). "The internet programming contest" (PDF). ACM SIGCSE Bulletin. ج. 25 ع. 1: 48–52. DOI:10.1145/169073.169105. ISSN:0097-8418. مؤرشف من الأصل (PDF) في 2023-03-17.
* ↑ Programming Challenges (Skiena & Revilla) (ردمك 0387001638), (ردمك 978-0387001630) نسخة محفوظة 2023-01-31 على موقع واي باك مشين.
* ↑ Kostka، Bartosz (2021). Sports Programming in Practice (PDF). University of Wrocław. مؤرشف من الأصل (PDF) في 2023-03-07.
* ↑ "Celebrate Google's Coding Competitions with a final round of programming fun". Google Developers Blog. Google. مؤرشف من الأصل في 2023-05-15. اطلع عليه بتاريخ 2023-02-28.
* ↑ "Code Jam - Google's Coding Competitions". Coding Competitions (بالإنجليزية). Archived from the original on 2023-06-27. Retrieved 2023-02-26.
* 1 2 "ICPC". icpc.global (بالإنجليزية). Archived from the original on 2023-07-03. Retrieved 2023-02-26.
* ↑ "Olympiads". stats.ioinformatics.org. مؤرشف من الأصل في 2023-03-29. اطلع عليه بتاريخ 2023-02-26.
* ↑ "Meta Hacker Cup - 2022 - Qualification Round". www.facebook.com. مؤرشف من الأصل في 2023-05-13. اطلع عليه بتاريخ 2023-02-26.
* ↑ "FAQ - Topcoder Community Town Hall with Doug Hanson, Topcoder CEO". Topcoder (بالإنجليزية). Archived from the original on 2023-06-01. Retrieved 2023-02-28.
* ↑ "CodeCup". www.codecup.nl. مؤرشف من الأصل في 2023-03-07.
* 1 2 Lasse Hakulinen. Survey on Informatics Competitions: Developing Tasks – Olympiads in Informatics, 2011, Vol. 5, 12–25. نسخة محفوظة 2023-03-17 على موقع واي باك مشين.
* ↑ Wevers، Lesley (2014). "Monte-Carlo Tree Search for Poly-Y" (PDF). جامعة تفنته $^{[لغاتأخرى]}$‏. مؤرشف من الأصل في 2017-04-13. اطلع عليه بتاريخ 2018-09-16.{{استشهاد ويب}}: صيانة الاستشهاد: BOT: original URL status unknown (link) صيانة الاستشهاد: علامات ترقيم زائدة (link) صيانة الاستشهاد: مكان (link)Wevers, Lesley (2014). (PDF). University of Twente. Archived from the original (PDF) on 13 April 2017. Retrieved 16 September 2018.
* ↑ "Halite Artificial Intelligence Programming Challenge". www.halite.io. مؤرشف من الأصل في 2023-06-21.
* ↑ "Two Sigma Announces Public Launch of Halite". tech.cornell.edu. 2 نوفمبر 2016. مؤرشف من الأصل في 2023-06-21.
* ↑ "Halite helps students and developers compete to build better AI on Google Cloud Platform". مؤرشف من الأصل في 2023-01-31.
* 1 2 3 4 5 6 Luigi، William Di؛ Farina، Gabriele؛ Laura، Luigi؛ Nanni، Umberto؛ Temperini، Marco؛ Versari، Luca (2016). "oii-web: an Interactive Online Programming oii-web: an Interactive Online Programming Contest Training System" (PDF). Olympiads in Informatics. ج. 10: 207–222. DOI:10.15388/ioi.2016.13. مؤرشف من الأصل (PDF) في 2023-03-17.
* 1 2 Combéfis، Sébastien؛ Wautelet، Jérémy (2014). "Programming Trainings and Informatics Teaching Through Online Contests" (PDF). Olympiads in Informatics. ج. 8: 21–34. مؤرشف من الأصل (PDF) في 2023-03-17.
* ↑ Wevers، Lesley (2014). "Monte-Carlo Tree Search for Poly-Y" (PDF). جامعة تفنته $^{[لغاتأخرى]}$‏. مؤرشف من الأصل (PDF) في 2017-04-13. اطلع عليه بتاريخ 2018-09-16.{{استشهاد ويب}}: صيانة الاستشهاد: علامات ترقيم زائدة (link) صيانة الاستشهاد: مكان (link)
* 1 2 3 4 Bloomfield، Aaron؛ Sotomayor، Borja. "A Programming Contest Strategy Guide" (PDF). SIGCSE '16: Proceedings of the 47th ACM Technical Symposium on Computing Science Education. مؤرشف من الأصل (PDF) في 2023-03-17.Bloomfield, Aaron; Sotomayor, Borja. "A Programming Contest Strategy Guide" (PDF). SIGCSE '16: Proceedings of the 47th ACM Technical Symposium on Computing Science Education.
* ↑ Enström, E.؛ Kreitz, G.؛ Niemelä, F.؛ Söderman, P.؛ Kann, V. (2011). "Five years with Kattis – using an automated assessment system in teaching" (PDF). IEEE Frontiers in Education Conference. مؤرشف من الأصل (PDF) في 2023-03-17.
* ↑ Mirzayanov، Mike؛ Pavlova، Oksana؛ Mavrin، Pavel؛ Melnikov، Roman؛ Plotnikov، Andrew؛ Parfenov، Vladimir؛ Stankevich، Andrew (2020). "Codeforces as an Educational Platform for Learning Programming in Digitalization" (PDF). Olympiads in Informatics. ج. 14. ISSN:1822-7732. مؤرشف من الأصل (PDF) في 2023-03-17.
* ↑ Bloomfield، Aaron؛ Sotomayor، Borja. "A Programming Contest Strategy Guide" (PDF). SIGCSE '16: Proceedings of the 47th ACM Technical Symposium on Computing Science Education. مؤرشف من الأصل (PDF) في 2023-03-17.
* ↑ Jackson، Dean (1 ديسمبر 2013). "The Google Technical Interview. How to Get Your Dream Job" (PDF). XRDS: Crossroads, the ACM Magazine for Students. ج. 20 ع. 2: 12–14. DOI:10.1145/2539270. مؤرشف من الأصل (PDF) في 2023-05-26.
* 1 2 3 Smith، Duncan (2 ديسمبر 2015). "The Competitive Programming Debate". مؤرشف من الأصل في 2023-03-17.
* ↑ Halim، Steven. "CS3233 - Competitive Programming". NUS School of Computing. مؤرشف من الأصل في 2023-02-21.
* ↑ "Winning at programming competitions is a negative factor for being good on the job". يوتيوب. 5 أبريل 2015.
* ↑ "HN discussion on correlation between job performance and competitive programming". ديسمبر 2020. مؤرشف من الأصل في 2023-03-17.
* ↑ Smith، Duncan (2 ديسمبر 2015). "The Competitive Programming Debate". مؤرشف من الأصل في 2023-03-17.Smith, Duncan (December 2, 2015). "The Competitive Programming Debate".