[[Template core/front/global/updateWarning is throwing an error. This theme may be out of date. Run the support tool in the AdminCP to restore the default theme.]]
أرجو من القراء السؤال عن أي شيء غير واضح ليتم شرحه ليتكامل الموضوع بإذن الله ..لنبدأ ..
هذا الموقع كان بفضل الله , طريقي الذي سلكته في عالم البرمجة , لم أكن متقدّماً في البرمجة كلغات , ولكن بعد حوالي عام في الموقع , كان الفرق كبيراً جداً , وأتمنى لأبناء الأمة أن يستفيدوا منه بأكبر قدر ممكن ...
أي سؤال عن استخدام الموقع ضعه هنا ..
من الواجهة الأساسية للموقع WWW.SPOJ.COM على اليسار يمكنك رؤية القائمة وفيها : problems
عند الضغط يمكنك اختيار نوع المسائل
(الصور قليلة الجودة لتسريع تحميل الصفحة لأصحاب النت البطيء )
classical مسائل عادية من المستوى المتوسط فما فوق ... وصولا إلى الاحترافي جداً .. تحصل فيها على قبول للحل أو رفض بناء على واحد من 4 احتمالات ... خطأ أثناء ترجمة الكود ... Compile Error خطأ أثناء وقت التنفيذ ... Runtime Error وله عدة احتمالات بناء على الخطأ انتهاء المدة المحددة دون الحصول على الخرج المطلوب ... Time Limit Exceeded
وأخيراً Wrong Answer عندما يقوم برنامجك بطباعة نتائج غير صحيحة ..
Challenge مسائل يكون التحدي فيها ليس الحل فقط .. بل الوصول لأفضل حل حسب المطلوب ( أقصر , أسرع , الأكثر فعالية , الأدق إلخ .)
Tutorial مسائل سهلة أو موجودة في الكتب العادية للخوارزميات .
باقي الأنواع تسالي ومتفرقات :)
--نظام وضع المسائل: واضع المسألة يمكنه اختيار طريقة الحكم على صحة الحل المقدم .. الطريقة التقليدية تكون بوضع ملف دخل ... وملف خرج ملف الدخل يحوي المدخلات التي سيعالجها الكود ... وملف الخرج يحوي المخرجات التي يفترض أن يخرجها الكود الصحيح ...
لحل مسألة كل ما عليك فعله هو كتابة كود يقرأ المدخلات , ويطبع المخرجات المطلوبة بحيث تطابق ملف الخرج الذي جهّزه واضع المسألة ...
(ملاحظة هامة : الدخل والخرج بالنسبة لك هو stdin و stdout .. والموقع هو من يتكفل بتوجيهه إلى ملفات )
غالبا يقوم واضع المسألة بوضع أكثر من زوج واحد (دخل وخرج ) بجيث يختبر البرنامج على كل زوج على حدة ...
ما يهم من يحل المسألة هو فقط أن يكون الخرج صحيحاً بناء على الدخل الموافق
المسألة الأولى بالنسبة لجميع المستخدمين تقريباً :::TEST اقرأها وحاول حلّها قبل متابعة الموضوع .. :)
في البداية يضع الproblem setter نص المسألة وقد يحوي قصة جانبية للتشويق ثم يضع مثالا على دخل وخرج للمسألة ...
لتقديم حل للمسألة ... ( بعد تسجيل الدخول ...) ندخل الى الصفحة Submit (من الرابط في أعلى الصفحة إلى اليسار قليلا)
ثم نلصق الكود في المكان المخصص أو نرفعه من الحاسب نختار اللغة التي كتبنا الكود بها ... ثم نضغط submit
بعد تقديم حل ... ننتقل تلقائيا الى صفحة الحالة ..status والتي تعرض آخر الحلول المقدمة لجميع المسائل ... وهنا نتعلم أمراً للحياة .... برتقالي أو أخضر ...الأخضر يعني أن الكود يحقق المطلوب وأنك ناجح البرتقالي يعني الفشل ...
صحيح أن الأخضر أجمل ... ولكن البرتقالي أفضل ... :) فبدون البرتقالي لن تتعلم ...
عندما تحصل على برتقالي قد يحوي العمود result على رابط إلى صفحة مخرجات المترجم compiler لترى الأخطاء المتولدة أثناء الترجمة (ان وجدت) أو قد يكون هناك رابط إلى صفحة ويكيبيديا لتعرف نوع الsignal المرسلة بسبب runtime error
في القائمة على اليسار نجد ranks والتي يمكن من خلالها مشاهدة أفضل المبرمجين في العالم ... أو معرفة ترتيب البلاد في الموقع بالضغط على countries ومن ثم يمكن مشاهدة ترتيب المبرمجين في أي بلد تختاره ...
محددات المسألة :
نظام النقاط في الموقع : للمسائل في قسم classical يكون لكل مسألة عدد من المستخدمين (الذين قدمو حلولا صحيحة) وكل من قدم حلاً صحيحاً يأخذ 80 مقسومة على ( 40 + عدد المستخدمين ) نقطة كلما زاد عدد المستخدمين تنقص النقاط المستحقة ... سواء كانت زيادة المستخدمين قبل تقديم الحل أم بعده ... بالنسبة لقسم challenge يحصل أفضل حل على 3 نقاط وباقي الحلول تنسب النقاط المحصلة في المسألة إلى نقاط أفضل حل ... مثلاً أفضل حل له 89 نقطة (نقاط المسألة score مختلفة عن نقاطه points) وقدمنا حل ب 56 نقطة ... نحصل 56\89 نقطة (دوما اقل من الواحد)
وباقي الأقسام ليس لها نقاط
للمزيد من المعلومات ... الصفحة tutorial تجيب عن معظم الأسئلة ...
الموقع IDEONE يقدم IDEs لكل اللغات التي يدعمها SPOJ ويمكن دون تسجيل حساب فيه أن تجرب اي كود باي من تلك اللغات أو ان تشاهد نماذج samples لحل المسألة TEST بأي من تلك اللغات
ويقدم منتدى SPOJ عدداً لا بأس به من الأكواد التي تحل مسألةTEST وبلغات متعددة هنا صفحة حلول بلغة C مسائل للبدء : أولاً يجب أن تحل TEST وبعد ذلك أقترح عليك تجربة : KAMIL في قسم التحديات ... يجب أن يكون كودك أقصر ما يمكن ... وبعد أن تحلها انظر إلى ranks المسألة واستمتع بمعرفة كم هو قصضير أقصر حل ..
مسألة وضعها واحد من أفراد المنتدى STICKS الأخ Keep Forward
اقرأ عن Dynamic Programming بعد أن تحاول حل هذه المسألة FARIDA
ملاحظة : بعد حلّك لـ 20 مسألة يمكنك تقديم طلب أن تصبح problem setter وتضع مسائل ليحلّها أفضل مبرمجي العالم , وستتعلّم الكثير منها .
سأكتب في الرد القادم تدريباً لحل مسألة خطوة خطوة .. من قسم tutorial
تم النشر منذ (معدل)
السلام عليكم ورحمة الله وبركاته
هذا الموضوع تتمة لهذا الرابط .. اقرأه حتى نبدأ :)
أرجو من القراء السؤال عن أي شيء غير واضح ليتم شرحه ليتكامل الموضوع بإذن الله ..لنبدأ ..
هذا الموقع كان بفضل الله , طريقي الذي سلكته في عالم البرمجة , لم أكن متقدّماً في البرمجة كلغات , ولكن بعد حوالي عام في الموقع , كان الفرق كبيراً جداً , وأتمنى لأبناء الأمة أن يستفيدوا منه بأكبر قدر ممكن ...
أي سؤال عن استخدام الموقع ضعه هنا ..
من الواجهة الأساسية للموقع WWW.SPOJ.COM
على اليسار يمكنك رؤية القائمة وفيها :
problems
عند الضغط يمكنك اختيار نوع المسائل
(الصور قليلة الجودة لتسريع تحميل الصفحة لأصحاب النت البطيء )
classical مسائل عادية من المستوى المتوسط فما فوق ... وصولا إلى الاحترافي جداً ..
تحصل فيها على قبول للحل أو رفض بناء على واحد من 4 احتمالات ...
خطأ أثناء ترجمة الكود ... Compile Error
خطأ أثناء وقت التنفيذ ... Runtime Error وله عدة احتمالات بناء على الخطأ
انتهاء المدة المحددة دون الحصول على الخرج المطلوب ... Time Limit Exceeded
وأخيراً Wrong Answer عندما يقوم برنامجك بطباعة نتائج غير صحيحة ..
Challenge مسائل يكون التحدي فيها ليس الحل فقط .. بل الوصول لأفضل حل حسب المطلوب ( أقصر , أسرع , الأكثر فعالية , الأدق إلخ .)
Tutorial مسائل سهلة أو موجودة في الكتب العادية للخوارزميات .
باقي الأنواع تسالي ومتفرقات :)
--نظام وضع المسائل:
واضع المسألة يمكنه اختيار طريقة الحكم على صحة الحل المقدم ..
الطريقة التقليدية تكون بوضع ملف دخل ... وملف خرج
ملف الدخل يحوي المدخلات التي سيعالجها الكود ...
وملف الخرج يحوي المخرجات التي يفترض أن يخرجها الكود الصحيح ...
لحل مسألة كل ما عليك فعله هو كتابة كود يقرأ المدخلات , ويطبع المخرجات المطلوبة بحيث تطابق ملف الخرج الذي جهّزه واضع المسألة ...
(ملاحظة هامة : الدخل والخرج بالنسبة لك هو stdin و stdout .. والموقع هو من يتكفل بتوجيهه إلى ملفات )
غالبا يقوم واضع المسألة بوضع أكثر من زوج واحد (دخل وخرج )
بجيث يختبر البرنامج على كل زوج على حدة ...
ما يهم من يحل المسألة هو فقط أن يكون الخرج صحيحاً بناء على الدخل الموافق
في البداية يضع الproblem setter نص المسألة وقد يحوي قصة جانبية للتشويق
ثم يضع مثالا على دخل وخرج للمسألة ...
لتقديم حل للمسألة ... ( بعد تسجيل الدخول ...)
ندخل الى الصفحة Submit (من الرابط في أعلى الصفحة إلى اليسار قليلا)
ثم نلصق الكود في المكان المخصص أو نرفعه من الحاسب
نختار اللغة التي كتبنا الكود بها ... ثم نضغط submit
بعد تقديم حل ... ننتقل تلقائيا الى صفحة الحالة ..status
والتي تعرض آخر الحلول المقدمة لجميع المسائل ...
وهنا نتعلم أمراً للحياة .... برتقالي أو أخضر ...الأخضر يعني أن الكود يحقق المطلوب وأنك ناجح
البرتقالي يعني الفشل ...
صحيح أن الأخضر أجمل ... ولكن البرتقالي أفضل ... :)
فبدون البرتقالي لن تتعلم ...
عندما تحصل على برتقالي قد يحوي العمود result على رابط إلى صفحة مخرجات المترجم compiler لترى الأخطاء المتولدة أثناء الترجمة (ان وجدت)
أو قد يكون هناك رابط إلى صفحة ويكيبيديا لتعرف نوع الsignal المرسلة بسبب runtime error
والتي يمكن من خلالها مشاهدة أفضل المبرمجين في العالم ...
أو معرفة ترتيب البلاد في الموقع بالضغط على countries
ومن ثم يمكن مشاهدة ترتيب المبرمجين في أي بلد تختاره ...
للمسائل في قسم classical يكون لكل مسألة عدد من المستخدمين (الذين قدمو حلولا صحيحة)
وكل من قدم حلاً صحيحاً يأخذ 80 مقسومة على ( 40 + عدد المستخدمين ) نقطة
كلما زاد عدد المستخدمين تنقص النقاط المستحقة ... سواء كانت زيادة المستخدمين قبل تقديم الحل أم بعده ...
بالنسبة لقسم challenge يحصل أفضل حل على 3 نقاط
وباقي الحلول تنسب النقاط المحصلة في المسألة إلى نقاط أفضل حل ...
مثلاً أفضل حل له 89 نقطة (نقاط المسألة score مختلفة عن نقاطه points)
وقدمنا حل ب 56 نقطة ... نحصل 56\89 نقطة (دوما اقل من الواحد)
وباقي الأقسام ليس لها نقاط
تجيب عن معظم الأسئلة ...
ويمكن دون تسجيل حساب فيه أن تجرب اي كود باي من تلك اللغات أو ان تشاهد نماذج samples لحل المسألة TEST بأي من تلك اللغات
ويقدم منتدى SPOJ عدداً لا بأس به من الأكواد التي تحل مسألةTEST وبلغات متعددة
هنا صفحة حلول بلغة C
مسائل للبدء :
أولاً يجب أن تحل TEST
وبعد ذلك أقترح عليك تجربة :
KAMIL في قسم التحديات ...
يجب أن يكون كودك أقصر ما يمكن ...
وبعد أن تحلها انظر إلى ranks المسألة واستمتع بمعرفة كم هو قصضير أقصر حل ..
مسألة وضعها واحد من أفراد المنتدى STICKS الأخ Keep Forward
اقرأ عن Dynamic Programming بعد أن تحاول حل هذه المسألة FARIDA
ملاحظة : بعد حلّك لـ 20 مسألة يمكنك تقديم طلب أن تصبح problem setter وتضع مسائل ليحلّها أفضل مبرمجي العالم , وستتعلّم الكثير منها .
سأكتب في الرد القادم تدريباً لحل مسألة خطوة خطوة .. من قسم tutorial
والله ولي التوفيق
تم تعديل بواسطه مصطفى 36a2شارك هذا الرد
رابط المشاركة
شارك الرد من خلال المواقع ادناه