المسابقة البرمجية للجامعات
المسابقة البرمجية للكليات الجامعية ICPC
تعتبر المسابقة الدولية البرمجية للطلاب الجامعيين ICPC مسابقة البرمجة الأولى التي تنظمها الجامعات على المستوى العالمي.
على مدار أكثر من أربعة عقود، نمت ICPC لتصبح برنامجاً تعليمياً عالمياً تنافسياً متغيراً في عالم الألعاب، مما أدى إلى رفع مستوى التطلعات والأداء للمتنافسين في هذه المسابقة، في علوم الكمبيوتر والهندسة.
تتولى إدارة المسابقة البرمجية ICPC Foundation المستضافة في جامعة بايلور الاميركية تنظيم هذه المسابقة منذ عام 1977 وبرعاية جمعيتي ACM و Upsilon Pi Epsilonالأمريكيتين.
مراحل المسابقة البرمجية
يتم إجراء المسابقة سنوياً وفق عدة مستويات من المنافسة:
- المستوى الأول - المسابقة الوطنية: بدايةً تقيم كل جامعة مسابقتها المحلية الخاصة بها. تتأهل الفرق الفائزة من كل جامعة إلى المسابقة الوطنية، حيث تنحصر المنافسة فيها بين جامعات البلد الواحد.
ويجري في نهاية هذا المستوى ترشيح عدة فرق لتمثيل جامعتها على المستوى الإقليمي.
- المستوى الثاني - المسابقة الإقليمية: حيث يتم تقسيم العالم إلى عدة أقاليم وتنحصر المنافسة بين فرق جامعات الإقليم الواحد التي تم ترشيحها من قبل دول هذا الإقليم.
- المستوى الثالث - المسابقة العالمية: وهي المرحلة الأخيرة في المسابقة حيث يتم إجراء المنافسة بين الفرق التي تأهلت من المسابقات الإقليمية.
أهمية المشاركة في المسابقة
تشكل المسابقة فرصة لاختبار قدرات المتسابق على:
- العمل تحت الضغط (وقت قصير، مسائل تتدرج بالصعوبة، إمكانيات محدودة).
- تنمية القدرة على تنسيق الجهد مع باقي أعضاء الفريق.
- تنمية التفكير المرن والقدرة العالية على التحليل المنطقي.
- كما توفر الميزات التالية:
- الحصول على شهادات معتمدة عالمياً.
- توفير لقاءات للطلاب في المرحلة الجامعية بأهم شركات القطاع المعلوماتي وقطاع الاتصالات مما يسمح لهم بالتواصل مع سوق العمل ومعرفة متطلباته واحتياجاته.
- رفع سوية الخريجين بشكل عام ورفع سوية المعرفة البرمجية والتقنية بشكل تراكمي لدى المتسابقين وضمن الجامعات عاماً بعد آخر.
- المسابقة البرمجية من أهم المسابقات العالمية في مجال المعلوماتية ومدخلاً للاعتراف العالمي بشهادات الجامعات التي تشارك فيها.
- شروط الاشتراك في المسابقة البرمجية
يحق للطالب الاشتراك في المسابقة البرمجية للكليات الجامعية في حال:
حقق الشروط العامة التالية:
- أن يكون طالباً جامعياً في إحدى الجامعات السورية.
- أن لا يكون قد شارك في النهائي العالمي أكثر من مرتين.
- أن لا يكون قد شارك في النهائي الإقليمي أكثر من خمس مرات.
حقق أحد الشرطين التاليين، بالإضافة إلى الشروط العامة السابقة:
- أن يكون الطالب قد بدأ دراسته الجامعية قبل أربعة أعوام ميلادية على الأكثر من العام الجاري للمسابقة التي يشارك بها.
- أن يكون عمر الطالب أقل من 24 عاماً.
قواعد المسابقة البرمجية
- يتكون الفريق من ثلاثة طلاب.
- تعطى الفرق المشاركة خلال فترة انعقاد المسابقة 5 ساعات لحل مجموعة من المسائل يتراوح عددها ما بين 8 إلى 12 مسألة. تقوم الفرق بتسليم الحلول على شكل رماز برمجي مكتوب قابل للتنفيذ بإحدى لغات البرمجة التالية:
- C/C++
- Java
- Python
- يخصص لكل فريق حاسب واحد فقط، ويطلب من الفرق المشاركة حل أكبر عدد ممكن من المسائل، وبالتالي يجب الاستفادة من العمل الجماعي بين أعضاء الفريق والتنسيق فيما بينهم لاسثنمار وقت المسابقة بالشكل الأمثل.
- عندما يتمكن الفريق من حل المسألة يرسل الحل إلى مخدم يحوي برنامج تحكيم آلي، يتولى البرنامج تقييم الحل المُرسل إليه وذلك تحت مراقبة من قبل لجنة التحكيم وعندما يكون الحل مستوفياً للمطلوب ضمن المدة الزمنية المحددة يتم قبول نتيحة المسألة.
- يحتل الفريق المرتبة الأولى في حال تمكن من حل أكبر عدد من المسائل بأقصر وقت ممكن وأقل عدد ممكن من المحاولات الخاطئة، ووفقا لهذه الاستراتيجية يتم ترتيب الفرق المتنافسة. حيث تتم زيادة 21 دقيقة لكل محاولة حل خاطئة تضاف إلى مجموع الأزمنة المستغرقة لتسليم الحلول في المسابقة.
- يتم تجهيز حواسب الفرق على مستويين هما: المستوى العتادي والمستوى البرمجي
- المستوى العتادي:
المعالج: Intel i7-3720QM (3.6Ghz)
الذاكرة الحية: 16 GB
الشاشة مسطحة: 23in wide, 1920x1080 Native Resolution
- المستوى البرمجي:
نظام التشغيل: Ubuntu 12.04.1 LTS Linux
سطح المكتب: GNOME
محرر النصوص: vi/vim, gvim, emacs, gedit
بيئة التطوير المتكاملة (IDE): Eclipse, Netbeans
المترجمات: JDK 1.7, C/C++ GCC 4.6.3
مشاركة الجامعة الافتراضية السورية في المسابقة البرمجية
- 2015 - بدأت مشاركة فرق الجامعة الافتراضية السورية في المسابقة البرمجية بفريق واحد.
- 2016 - تأهل فريق واحد من الجامعة الافتراضية السورية للمشاركة في المسابقة الإقليمية.
- 2017 - تأهل فريقان من الجامعة الافتراضية السورية للمشاركة في المسابقة الإقليمية.
- 2018 - تأهل ثلاث فرق من الجامعة الافتراضية السورية للمشاركة في المسابقة الإقليمية.
- أحرزت الجامعة الافتراضية السورية كأس المسابقة على مستوى الوطن العربي وغرب أفريقيا.
ويعدّ هذا الفوز الأول لـ"سورية" منذ بداية مشاركتها في هذه المسابقة.
- تأهل فريق الجامعة الافتراضية السورية للمشاركة في المسابقة العالمية.
الاستضافة والدعم والتنظيم:
تستضيف الجامعة الافتراضية السورية منذ عام 2017 المسابقة البرمجية على المستوى الوطني من خلال مساهمتها في دعم المسابقات المحلية على مستوى الجامعات السورية العامة والخاصة واستضافة ودعم وتنظيم المسابقة الوطنية الجامعية على مستوى سورية وفي دعم وتنظيم مشاركات الفرق السورية الجامعية المتأهلة إلى المستويين الإقليمي والعالمي.
منح الجامعة الافتراضية السورية الخاصة بطلاب المسابقة
مساهمةً من الجامعة الافتراضية السورية في بناء سورية علماً وفكراً وثقافةً وعملاً، وتماشياً مع رسالة الجامعة الأكاديمية والمهنية، أعلنت الجامعة الافتراضية السورية عن منح خاصة لطلاب المسابقات البرمجية في برامجها الأكاديمية المختلفة ضمن الإجازات الجامعية والماجستيرات، وذلك ضمن مبادرتها (الافتراضية السورية - إلتزام).
وتتضمن المنح:
- تقدم الجامعة الافتراضية السورية لأي طالب من طلابها يتأهل إلى النهائيات الإقليمية من المسابقة البرمجية للكليات الجامعية (أو أية مسابقة عالمية علمية مشابهة تشارك فيها الجامعة ويوافق عليها مجلس الجامعة) منحة دراسية كاملة على كافة الأقساط الدراسية اعتباراً من الفصل الذي يلي تأهله وحتى تخرجه من الجامعة.
- تقدم الجامعة الافتراضية السورية لأي طالب سوري يتأهل إلى النهائيات العالمية من المسابقة البرمجية للكليات الجامعية ـأو مسابقة الروبوت العالمي أو إحدى مسابقات الأولمبياد العلمي السوري (أو أي مسابقة علمية أخرى مشابهة يقرها مجلس الجامعة)، منحة دراسية كاملة في أي برنامج من برامجها الدراسية.
الخطة التدريبية
يتم تسجيل المتدرب على امتحان تحديد مستوى، وبناءً على نتيجة الامتحان يتم فرز الطلاب إلى المستويين التاليين:
المستوى الأول: المرحلة الأولى
Level 1 - Phase I |
||
# | Session Content | Sessions Count |
1 | Introduction | 1 |
2 | C++ Programming Language | 6 |
3 | ||
4 | ||
5 | ||
6 | ||
7 | ||
8 | Complexity | 2 |
9 | ||
Standard Template Library | ||
10 | Vector, String, List | 2 |
11 | ||
12 | Stack, Queue, Deque, Priority queue | 2 |
13 | ||
14 | Set, Multiset, Map | 3 |
15 | ||
16 | ||
17 | Sorting | 2 |
18 | ||
19 | Greedy | 2 |
20 | ||
21 | Binary search (basics) | 2 |
22 | ||
23 | Recursion | 2 |
24 | ||
25 | Complete Search | 2 |
26 | ||
Math and Number Theory | ||
27 | Primes, Divisors, Factorization, GCD, LCM | 2 |
28 | Sieve of Eratosthenes | |
Game theory | ||
29 | Game states - Nim game | 2 |
30 |
المستوى الأول: المرحلة الثانية
Level 1 – Phase II |
||
# | Session Content | Sessions Count |
Dynamic programming | ||
1 | Fibonacci, Paths in a grid | 1 |
2 | Coin change | 1 |
3 | Knapsack | 2 |
4 | ||
5 | Edit Distance - Longest Common Subsequence | 1 |
6 | Longest Increasing Subsequence | 1 |
Graphs | ||
7 | Graph Representation | 1 |
8 | Depth First Search | 1 |
9 | Breadth First Search, Multiple Source BFS | 1 |
10 | Finding Connected Components, Classification of edges | 1 |
11 | Checking a graph for acyclicity, Topological Sorting | 1 |
12 | Other applications of DFS and BFS | 2 |
13 | ||
14 | Bipartite Graph Check, Eulerian Path | 1 |
15 | Tree algorithms | 2 |
16 | ||
Data Structure | ||
17 | Ordered set, Static array queries | 1 |
18 | Disjoint Set Union | 2 |
19 | ||
Amortized analysis | ||
20 | Two pointers, Sliding window | 2 |
21 | ||
Search | ||
22 | Binary search (Continuous) | 1 |
23 | Binary search (Discrete) | 2 |
24 | ||
Math and Number Theory | ||
25 | Modular arithmetic, Binary exponentiation | 1 |
26 | Extended Euclidean Algorithm, Linear Diophantine Equations | 1 |
27 | Euler's totient, Modular inverse | 2 |
28 | ||
29 | Meet in the middle | 2 |
30 |
المستوى الثاني: المرحلة الأولى
Level 2 - Phase I |
||
# | Session Content | Sessions Count |
Graphs | ||
1 | Dijkstra, 0-1 Breadth First Search | 2 |
2 | ||
3 | Bellman-Ford | 1 |
4 | Floyd-Warshall, Finding a Negative Cycle | 1 |
5 | Minimum Spanning Tree | 2 |
6 | ||
String processing | ||
7 | String Hashing | 2 |
8 | ||
9 | Trie (Keyword Tree) | 2 |
10 | ||
Data Structures | ||
11 | Fenwick (Binary Indexed) Tree | 2 |
12 | ||
13 | Sparse table | 1 |
14 | Segment Tree | 3 |
15 | ||
16 | ||
17 | Trie (Keyword Tree) | 1 |
Search | ||
18 | Binary Search (Advanced) | 2 |
19 | ||
20 | Ternary Search | 1 |
Math, Number Theory | ||
21 | Matrix Exponentiation | 2 |
22 | ||
23 | Combinatorics | 2 |
24 | ||
25 | Probabilities | 1 |
26 | Expected Value | 2 |
27 | ||
Geometry | ||
28 | Complex numbers, Point representation | 1 |
29 | Elementary operations, Transformations | 1 |
30 | Products and angles | 1 |
31 | Lines, Segments | 2 |
32 | ||
33 | Polygons | 1 |
34 | Circles | 2 |
35 |
المستوى الثاني: المرحلة الثانية
Level 2 - Phase II |
||
# | Session Content | Sessions Count |
Dynamic programming | ||
1 | Chain Matrix Multiplication | 2 |
2 | ||
3 | DP + Bitmask | 2 |
4 | ||
5 | Digit DP | 2 |
6 | ||
Graphs | ||
7 | Dijkstra 2D | 1 |
8 | Lowest Common Ancestor | 2 |
9 | ||
10 | Finding Bridges | 1 |
11 | Finding articulation points | 1 |
12 | Strongly Connected Components | 2 |
13 | ||
14 | Maximum flow | 2 |
15 | ||
16 | Maximum Bipartite Matching | 2 |
17 | ||
Data Structures | ||
18 | Segment Tree (advanced) | 2 |
19 | ||
20 | Lazy Propagation | 2 |
21 | ||
22 | Sqrt Decomposition | 2 |
23 | ||
24 | MO Algorithm | 2 |
25 | ||
Game theory | ||
26 | Sprague–Grundy theorem | 1 |
Geometry | ||
27 | Sweep line | 2 |
28 | ||
29 | Convex hull | |
String processing | ||
30 | Knuth-Morris-Pratt’s (KMP) Algorithm | 2 |
31 | ||
32 | Suffix array | 2 |
33 | ||
34 | The Inclusion-Exclusion Principle | 2 |
35 |