تعريف بالذكاء بالصنعي

هل سمعت بكلمة و مصطلح الذكاء الصنعي من قبل؟هل تعرف ماهوالمقصود بالذكاء الصنعي؟هل تعرف تاريخ الذكاء الصنعي؟
في هذا المقالة والتي تعتبر بداية لسلسلة الذكاء الصنعي سوف نتعرف على الذكاء الصنعي و تاريخ نشأة هذا العلم ومن هم المؤسسون لهذا العلم.

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

:تاريخ الذكاء الصنعي

في منتصف القرن العشرين  بدأ عدد قليل من العلماء استكشاف نهج جديد لتصميم  الآلات الذكية بناءً على الاكتشافات الحديثة في علم الأعصاب ونظريات رياضية جديدة للمعلومات و تطور علم التحكم الآلي وقبل كل ذلك عن طريق اختراع الحاسوب الرقمي حيث تم اختراع آلة يمكنها محاكاة عملية التفكير الحسابي البشرية.
أسس المجال الحديث لبحوث الذكاء الصنعي في مؤتمر علمي في كلية "دارتموث" في صيف عام 1965 م,وأصبح هؤلاء الحضور قادة بحوث الذكاء الصنعي لعدة عقود  وخاصة "جون مكارثي" و "مارفن مينسكاي" و "ألين نوبل" و "هربرت سيمون" الذي أسس مختبرات للذكاء الصنعي في معهد "ماساتشوستس للتكنولوجيا MIT" و جامعة "كارنيجي ميلون CMU" و "ستانفورد" هؤلاء الحضور و تلاميذهم كتبوا برامج أدهشت معظم الناس.
كان الحاسب الآلي يحل مسائل في الجبر ويثبت النظريات المنطقية ويتحدث الانكليزية  وبحلول منتصف الستينات أصبحت تلك البحوث تمول بسخاء من وزارة الدفاع الأمريكية ,وهؤلاء الباحثون قاموا بالتوقعات التالية:
عام 1965 م.أ.سيمون:"الآلات سوف تكون قادرة في غضون عشرين عاماً على القيام بأي عمل يمكن أن يقوم به الإنسان".
عام 1967و مارفين مينساكي: "في غضون جيل واحد سوف يتم حل مشكلة خلق "الذكاء الصنعي"بشكل كبير.
ولكنهم فشلوا في  إدراك صعوبة بعض المشاكل التي واجهتهم وفي عام 1974 و رداً على الانتقادات التي واجهتهم و الضغط المستمر من الكونغرس لتمويل مشاريع أكثر إنتاجية قطعت الحكومتين الأمريكية والبريطانية تمويلها لكل الأبحاث الاستكشافية غير الموجهة إلى  مجال الذكاء الصنعي و كانت تلك أول انتكاسة تشهدها أبحاث الذكاء الصنعي.
في أوائل الثمانينيات شهدت أبحاث الذكاء الصنعي صحوة جديدة من خلال النجاح التجاري "للنظم الخبيرة",وهي أحد برامج الذكاء الصنعي التي تحاكي المعرفة والمهارات التحليلية لواحد أو أكثر من الخبراء البشريين وبحلول عام 1985وصلت أرباح أبحاث الذكاء الصنعي الى اكثر من مليار  دولار وبدأت الجكومة التمويل من جديد وبعد سنوات قليلة بدءاً من انهيار سوق آلة "LISP MACHINE" (إحدى  لغات البرمجة في عام 1987) شهدت أبحاث الذكاء الصنعي نكستها الثانية.
في التسعينيات وفي أوائل القرن الحادي والعشرين حقق الذكاء الصنعي نجاحات أكبر وإن كان ذلك إلى حد ما وراء الكواليس حيث تم استخدام الذكاء الصنعي في الالعاب واستخراج البيانات و التشخيص الطبي و الروبوتات والعديد من المجالات الاخرى في جميع أنحاء صناعة التكنولوجيا ويرجع ذلك النجاح إلى عدة عوامل هي :القوة الكبيرة للحواسيب اليوم و زيادة التركيز على حل مشاكل فرعية محددة وخلق علاقات جديدة بين مجال الذكاء الصنعي وغيرها من مجالات العمل في مشاكل مماثلة وفوق ذلك بدأ الباحثون الالتزام بمناهج رياضية قوية ومعايير علمية صارمة.
وهكذا نكون قد شرحنا بدايات الذكاء الصنعي تاريخياً وسنتحدث في المقال القادم عن اختبار تورينغ الذي يعد حجر أساس في الذكاء الصنعي والمقارنة بين الانسان و الالة المزودة بالذكاء الصنعي .
إعداد: خليل محمود
المصادر: (Into the heart of mind : ( An American Quest for Artificial Intellegence for Frank Rose 


اختبار تورينغ
إن كنت من المهتمين بمواضيع الذكاء الصنعي فلا بد أنك قد سمعت عن ذلك الاختبار الشهير الذي يدعى " اختبار تورينغ " ,ولعلك سمعت في الأخبار عن تمكن آلة أو برنامج من اجتياز " اختبار تورينغ " ,فما هو "اختبار تورينغ " ؟ا

في هذا المقال سنتحدث عن العالم آلان تورينغ واختباره الشهير الذي يعتبر حجر الأساس في مجال الذكاء الصنعي , نتمنى لكم قراءة ممتعة .
من هو آلان تورينغ ؟
آلان تورينغ هو عالم بريطاني ولد عام 1912 ويعتبر مؤسس علم الحاسوب والمنشئ لهذه التكنولوجيا السائدة في أواخر القرن العشرين , عند اندلاع الحرب العالمية الثانية عمل على كسر شيفرة الإنجما الألمانية , كان عمله سري وقلة قليلة من الناس كانت تعلم بأهمية ما قام به ودوره البارز في إنهاء الحرب حيث ساهم في تقصير عمر الحرب عامين كما كان رأي البعض .
كيف تمكن آلان تورينغ من فك شيفرة الإنجما ؟
اعتمدت القوات الألمانية على نمط تشفير من أجل سرية وحماية رسائلها وهذا ما عرف باسم شيفرة الإنجما ,وباءت جميع محاولات علماء الرياضيات البولانديين بالفشل في فهم وفك شيفرة رموز الإنجما حيث كانت القوات الألمانية تعمل على تغييرها بشكل يومي مما زاد من صعوبة الأمر.
لعب آلان تورينغ دورا هاما في فك هذه الشيفرة حيث قام وبمساعدة زملائه باختراع آلته المشهورة والتي عرفت باسم Bombe"" , حيث تمكن من خلالها من فك شيفرة الاتصالات البحرية الألمانية الأمر الذي ألحق خسائر كبيرة بالألمان .
ما هي آلة تورينغ؟
هي آلة تتسم بالبساطة وعلى الرغم من ذلك فهي قادرة على محاكاة أي خوارزمية حاسوبية بغض النظر عن مدى تعقيدها.
تتكون هذه الآلة من شريط طويل جداً يلعب دور وسط التخزين ,وتعالج بذلك ثلاثة أنواع من الرموز وهي الصفر والواحد والفراغ ,بنفس الوقت تمتلك الآلة رأس والذي يتوضع فوق أحد المربعات على الشريط ليقوم بالعمليات الثلاثة التالية :
  1. قراءة الرمز الموجود على المربع .
  2. كتابة رمز جديد أو محو رمز (تحرير الرمز) .
  3. تحريك الشريط إلى اليمين أو اليسار بمقدار مربع واحد.

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



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

بينما هناك بعض الروبوتات تم اختراعها وتعمل وتساعد الإنسان في العديد من الأعمال مثل أعمال التسلية والمجالات المهنية والطبية والمصانع 
وفي سلسلتنا هذه سنستعرض كيفية عمل الروبوت ولكن كبداية لابد من تعريف الروبوت

 فما هو تعريف الروبوت؟
لحد الآن لم يتم الإتفاق على تعريف محدد بسبب التطور واختلاف وجهات النظر ولكن يمكننا الجزم بأنه عبارة عن آلة تتحرك بواسطة أوامر مسبقة يحصل عليها من الإنسان أو من برامج حاسوبية وبالتأكيد ليس فقط الذي يشبه الإنسان كما في أذهان العديد.
مكونات الروبوت؟
1-المستشعرات:تقوم بتحسس المؤثرات الخارجية وتحويلها الى إشارات 
كهربائية ليقوم الحاسب بقراءتها ومعالجتها
2-المعالج:يشبه عقل الإنسان يعالج البيانات التي يتلقاها ويخرج المعطيات 
ليقوم الروبوت بوظائفه
3-متحكم المحرك: المسؤول عن حركة الروبوت
وسنتطرق لكل مكون على حدة في المقالات القادمة

بعض أشهر الروبوتات التي تم اختراعها

1-اسيمو                                                           
يستطيع المشي في الأماكن المزدحمة مع تجنب الاصطدام بالأشخاص
HRP-4C -2
يغني ويرقص وتم تصميمه بحيث يشبه بشكله الانسان
Curiosity-3
هو الروبوت الذي تم إرساله إلى المريخ للكشف عن طبيعة الكوكب.
Robe fly-4
سريعة جداً وصغيرة في الحجم وذات وزن صغير يبلغ80 غرام وأجنحتها ترفرف
180 مرة في الثانية تستخدم بعمليات الإنقاذ
VGO-virtual student -5
هو الروبوت الذي يستطيع الطالب من خلاله  كتابعة دروسه وهو في المنزل حيث 
يتم التحكم به عن طريق الإنترنت
Wild cat robot-6
هو بمثابة مشروع عسكري وصمم بهدف  تطوير الأسلحة
وجعلها أكثر عبقرية وفعالية
Cheetah cub robot-7
ذو وزن صغير وسريع جداً ولكنه يعاني من عدم التوازن أثناء الجري
Termite robot-8
النمل الآلي لأنه يشبه النمل بشكله وطريقة عمله كجماعة يساعد في عمليات البناء
Atlas robot-9
صمم لإنقاذ الأرواح من الكوارث من تلقاء نفسه وليس عن طريق  التحكم
Kuatas-10
هذا الروبوت يعطي فرصة لقيادته فهذا الروبوت العملاق يستطيع الإنسان قيادته عن طريق حجرة تقع بأعلاه على ارتفاع 13 قدم


تحدثنا في المقال السابق عن 7نصائح يقدمها كتاب Competitive Programming لنتائج افضل في المسابقات البرمجية ، و الان سنتحدث عن كيفية تحليل أداء الكود من الناحية الزمنية و من ناحية حجم البرنامج الناتج ، و هو ما يندرج تحت مفهوم  Big O Notation  .
Big O Notation:

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

لنضع بعض الفرضيات التي ستساعدنا في فهم هذه الفكرة :
- لنفترض أن تنفيذ كل تعليمة يحتاج نبضة ساعة واحدة .
- لنفترض أن كل نبضة ساعة تحتاج إلى ثانية واحد .
- و بالتالي كل تعليمة تحتاج إلى ثانية حتى يتم تنفيذها .

كيف يمكننا تحديد التعقيد ؟


·        O(1) : تصف الخوارزمية التي يتم تنفيذها دوما خلال نفس المدة الزمنية (وتحتاج نفس الحجم)
bool IsFirstElementNull(IList<string> elements)
{
return elements [0] == null;
}
·        O(n) : و هي تصف الخوارزمية التي يتزايد زمن تنفيذها خطيا (و كذلك الأمر بالنسبة للحجم )
أي إذا كان لدينا دخل بحجم واحد بايت فالخرج سيكون بحجم واحد بايت ، و اذا كان 2بايت فالخرج أيضا 2 بايت
bool ContainsValue(IList<string> elements, string value)
{
    foreach (var element in elements)
    {
        if (element == value) return true;
    }
 
    return false;
}
·         O(n2) : و هي تصف الخوارزميات التي يكون تاثير زيادة عنصر على عناصر دخلها هو تاثر تربيعي على الزمن (و كذلك الحجم ).
في المثال التالي لدينا حلقتين For  متداخلتين بحيث n  تمثل عدد تكرارات كل الحلقة ، و بالتالي التعقيد هو : ناتج جداء عدد تكرارات الحلقة الأولى بعدد تكرارات الحلقة الثانية ، و بالتالي الجواب هو n2 . لو كان لدينا 3 حلقات بتكرار n لكل حلقة ، فان التعقيد سيكون O(n3) .
مثلا إذا كان لدينا دخل بحجم 2 بايت فالخرج سيكون بحجم 2n  ، حيث n هو عدد الحلقات المتداخلة . 
bool ContainsDuplicates(IList<string> elements)
{
    for (var outer = 0; outer < elements.Count; outer++)
    {
        for (var inner = 0; inner < elements.Count; inner++)
        {
            // Don't compare with self
            if (outer == inner) continue;
 
            if (elements[outer] == elements[inner]) return true;
        }
    }
 
    return false;
}
·         O(2n) : و هي تعبرعن الخوارزمية التي يكون تاثير زيادة حجم الدخل بمقدار واحد هو ضرب الزمن (أو الحجم) بمقدار 2 ، مثال : فيبوناتشي .
مثلا إذا كانت التعليمة تحتاج الى 3 ثانية فالخرج النهائي يحتاج 23 ثانية.
int Fibonacci(int number)
{
    if (number <= 1) return number;
 
    return Fibonacci(number - 2) + Fibonacci(number - 1);
}
·        O(log n) : مثال Binary search  .

جدول يوضح درجة التعقيد لبعض بنى المعطيات :

جدول يوضح درجة التعقيد لبعض خوارزميات الترتيب :


7 نصائح يقدمها كتاب Competitive  Programming لنتائج أفضل في المسابقات البرمجية :


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

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

يقدم Steven Halim  في كتابه Competitive Programming النصائح التالية والتي تعتبر نصائح ذهبية في المسابقات البرمجية:


النصيحة الأولى: تعلم كتابة الأكواد بسرعة.




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

يوفر الموقع


اختبار لسرعة الكتابة على لوحة المفاتيح كما يوفر دروس تفاعلية يمكنك الاستفادة منها في زيادة سرعتك في الكتابة.


النصيحة الثانية: حدد نوع المسألة بسرعة.




يجب عليك كمبرمج أن تكون قادراً على تحديد نوع المسألة بسرعة ويجب أن تمتلك معرفة خوارزمية جيدة تمكنك من ذلك، بالإضافة إلى انه عليك الانتباه إلى أن بعض المسائل يمكن أن تصنف ضمن أكثر من نوع مثل خوارزمية Floyd warshall والتي هي حل لمسألة البيان Graph (All pairs shortest paths) بالإضافة إلى أنها أيضاً خوارزمية برمجة ديناميكية Dynamic Programming

خوارزمية Kruskal تعتبر خوارزمية لحل مسألة البيان (MST Minimum spanning trees) بالإضافة إلى أنها خوارزمية طماعة Greedy وبالتدريب المتواصل يمكنك التعرف على أنواع المسائل بسرعة وتحديد الخوارزميات المثلى التي لحل لهذه المسائل.


النصيحة الثالثة: قم بتحليل الخوارزميات.




في المسابقات البرمجية وعندما تصمم خوارزمية لحل مسألة معينة في المسابقات البرمجية يجب عليك أن تسأل نفسك هذا السؤال بإعطاء الدخل الأعظمي ( والذي يكون مشروحا بشكل واضح في نص المسألة) هل ستقوم هذه الخوارزمية بإعطاء الخرج الصحيح ضمن قيود الزمن والحجم المحددين؟

في بعض الأحيان يوجد العديد من الطرق التي يمكن بواسطتها محاولة حل المسألة، بعض الطرق قد تكون غير صحيحة وبعضها الآخر لا يكون سريع بشكل كافٍ، وهكذا.

الإستراتيجية المناسبة هي عصف الذهن وحصر الخوارزميات الممكنة واختيار "أبسط حل يعمل" ( يعمل ضمن قيود الزمن والمساحة ويعطي الحل الصحيح).


النصيحة الرابعة: احترف لغات البرمجة.




يوجد عدة لغات برمجة مدعومة في المسابقات البرمجية ومن اللغات المدعومة في المسابقة البرمجية العالمية ACM ICPC لغات C\C++ & JAVA فأي لغة منهم أحتاج أن أحترف؟

أغلب المحترفين يفضلون لغة C++ بما توفره مكتبة القوالب القياسية المضمنة بها Standard Template Language ولكننا أيضا بحاجة إلى إحتراف ال JAVA، فعلى الرغم من بطئها فإنها تمتلك مكتبات و API فعالة مضمنة بها مثل BigInteger و BigDecimal وغيرها العديد، كما تعبر برامج الجافا سهلة التنقيح بما توفره الآلة الإفتراضية للجافا  JAVA Virtual Machine من معلومات للأخطاء ضمن Stack trace.

في بعض الأحيان قد تعتبر اللغة البرمجية الحل الأمثل لحل مسألة ما، فمثلا لو طلب منا حساب 25! فإن هذه القيمة مساوية ل :

15,511,210,043,330,985,984,000,000

وهذه القيمة تتجاوز بشكل كبير مجال أكبر نمط معطيات صحيح أولي معرف ضمن اللغة والذي يساوي في الغالب (unsigned long long = 264-1)  وفي هذه الحالة لابد من استخدام لغة الجافا وبمكتبتها BigInteger  والتي تمكننا من حسابه بكل بساطة كما يلي:

import java.util.Scanner;

import java.math.BigInteger;

class Main { // standard Java class name in UVa OJ
public static void main(String[] args) {
BigInteger fac = BigInteger.ONE;
for (int i = 2; i <= 25; i++)
fac = fac.multiply(BigInteger.valueOf(i)); // it is in the library!
System.out.println(fac);

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

عندما تدرس مسألة معينة، وتحدد نوعها وتصمم الخوارزمية المناسبة لها، بحيث تكون هذه الخوارزمية قادرة على إعطاء الحل الصحيح ضمن قيود الحجم والزمن وترسل الكود لكنك لا تحصل على AC .
في هذه الحالة يجب عليك أن تقوم بتصميم حالات اختبار شاملة ومخادعة تغطي كافة حدود المسألة وتنفيذها على جهازك في محاولة منك لكشف مكامن الخطأ في كودك بدلا من القيام بإرسالات خاطئة والتي قد تسبب عقوبات زمنية في ال ICPC .
وهذه بعض التقنيات النموذجية التي تساعد في إختبار الكود:
  1.    من أجل المسائل التي تحوي أكثر من حالة إختبار خلال تنفيذ البرنامج مرة واحدة قم بتضمين حالتي إختبار متشابهتين وقارن الخرج، وعند إختلاف خرج هاتين الحالتين فإن هذا يعني وجود متغير أو أكثر لم يتم تهيئتهم بقيم افتراضية عند بداية كل حالة إختبار.
  2.    حالات الإختبار التي تقوم بتجريبها لاختبار الكود يجب أن تحتوي حالات مخادعة. فكر كأنك كاتب المسألة وحاول أن تعطي أسوأ حالة دخل قد تكون مختفية ومضمنة ضمن نص المسألة، حالات الإختبار هذه تكون مضمنة ضمن الحالات السرية للحكام وغير ظاهرة في مثال الدخل/الخرج البسيط المرفق ضمن المسألة، حالات الإختبار هذه تكون بشكل نموذجي عند N=0, N=1 أو القيم السالبة أو القيم الكبيرة والتي تقع خارج مجال متغير من 32-Bit.
  3.  .  يجب على حالات الإختبار هذه أن تختبر المجال الأعظمي من القيم المحدد ضمن نص المسألة، واختبار هل يحدث TLE عند القيم الكبيرة أو يوجد أخطاء ضمن مجال المتغيرات وغيرها من الأخطاء.

النصيحة السادسة: تمرن أكثر وأكثر.

البرمجة التنافسية مثل الألعاب الرياضية يجب عليك التمرن بانتظام لتحقق نتائج أفضل، يوجد العديد من المواقع التي توفر عدد كبير من المسائل وأغلبها يقوم بفرزها حسب مستويات صعوبتها ويعطي تسميات توضيحية عن نوع المسألة.

النصيحة السابعة:العمل الجماعي كفريق.

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


المراجع:
Steven Halim, Felix Halim, Competitve Programming 3 Copyright © 2013 by lulu.

إعداد: ربيع دغو

Copyright 2016 Oxygeeen

Designed by Oxygen Community