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

اقرأ في هذا المقال


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

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

المسابقات:

تدور مسابقات البرمجة بشكل عام حول حل المشكلات باستخدام الخوارزميات (algorithms)، ومعرفة ببنية البيانات (data structure)، ومهارات التنفيذ (implementation skills).

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

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

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

نظرًا لنمو الإنترنت، فقد نما الاهتمام بتحديات البرمجة على نطاق واسع منذ بداية الألفية الجديدة لأنه يسهل على مواقع كتابة الكود البرمجي استضافة المسابقات الدولية عبر الإنترنت. وأقدم مسابقة هي (ACM-ICPC) (مسابقة البرمجة الجماعية الدولية)، والتي نشأت في السبعينيات وتطورت لتشمل 88 دولة.

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

  • مهارات الخوارزمية
  • مهارات الرياضيات الأساسية
  • مهارات البرمجة
  • مهارات سرعة الكتابة
  • مهارات التصحيح (Debugging)

كيف تبدأ بالإعداد للبرمجة التنافسية؟

الخطوة 1: اختر لغة البرمجة:

يوصى باختيار لغة برمجة تناسبك أكثر – لغة لديك خبرة لا تقل عن 3 إلى 4 أشهر فيها. نظرًا لسرعتها، تعد++ C  هي اللغة المفضلة لدى المبرمجين المتنافسين. من المحتمل أن تتم كتابة معظم الحلول بلغة ++C . ولكن إذا كنت جديدًا في مجال البرمجة، فقد تكون Python هي الخيار الأفضل نظرًا لسهولة تركيبها ووظائف المكتبة المحددة مسبقًا.

الخطوة 2: تعلم مفاهيم الخوارزمية وهياكل البيانات الأساسية:

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

الخطوة 3: تعرف على تعقيد الزمان والمكان Time and Space complexity:

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

الخطوة 4: الممارسة تؤدي إلى الكمال:

مجرد القراءة عن الخوارزميات وحدها لن تجعلك مبرمجًا أفضل. عليك أن تتدرب على حل المشاكل. وتدرب على الحلول والأساليب المختلفة ليلًا ونهارًا وتعلم من المبرمجين ذوي الخبرة. وكلما زادت ممارستك لكتابة الأكواد البرمجية، زادت قدرتك على العثور على بنية بيانات أو خوارزمية مناسبة لمشكلة معينة.

الخطوة 5: تنافس:

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

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

وكما يحتوي موقع (TopCoder) أيضًا على مجموعة كبيرة من المشكلات جنبًا إلى جنب مع صفحات تدريب (USACO) ومسابقات (USACO) السابقة. لدى موقعي (HackerRank و CodeChef) أيضًا مسابقات دورية عبر الإنترنت.

المصدر: WHAT IS COMPETITIVE CODING? AN INTRODUCTION TO PROGRAMMINGWhat is Competitive Programming and How to Prepare for It?How to begin with Competitive Programming?How to start with competitive programming


شارك المقالة: