• 0
مصطفى 36a2

دليلك لاستخدام موقع اختبار القدرات البرمجية في الخوارزميات SPOJ

سؤال

السلام عليكم ورحمة الله وبركاته

هذا الموضوع تتمة لهذا الرابط .. اقرأه حتى نبدأ :)

أرجو من القراء السؤال عن أي شيء غير واضح ليتم شرحه ليتكامل الموضوع بإذن الله ..لنبدأ ..

 

هذا الموقع كان بفضل الله , طريقي الذي سلكته في عالم البرمجة , لم أكن متقدّماً في البرمجة كلغات , ولكن بعد حوالي عام في الموقع , كان الفرق كبيراً جداً , وأتمنى لأبناء الأمة أن يستفيدوا منه بأكبر قدر ممكن ...

أي سؤال عن استخدام الموقع ضعه هنا ..
 

من الواجهة الأساسية للموقع WWW.SPOJ.COM
على اليسار يمكنك رؤية القائمة وفيها :

problems

post-256536-0-21522400-1385136032_thumb.

عند الضغط يمكنك اختيار نوع المسائل

post-256536-0-35749300-1385136651_thumb.

(الصور قليلة الجودة لتسريع تحميل الصفحة لأصحاب النت البطيء )

 

classical مسائل عادية من المستوى المتوسط فما فوق ... وصولا إلى الاحترافي جداً ..
تحصل فيها على قبول للحل أو رفض بناء على واحد من 4 احتمالات ...
خطأ أثناء ترجمة الكود ... Compile Error
خطأ أثناء وقت التنفيذ ... Runtime Error وله عدة احتمالات بناء على الخطأ
انتهاء المدة المحددة دون الحصول على الخرج المطلوب ... Time Limit Exceeded

وأخيراً Wrong Answer عندما يقوم برنامجك بطباعة نتائج غير صحيحة ..

 

Challenge مسائل يكون التحدي فيها ليس الحل فقط .. بل الوصول لأفضل حل حسب المطلوب ( أقصر , أسرع , الأكثر فعالية , الأدق إلخ .)

Tutorial مسائل سهلة أو موجودة في الكتب العادية للخوارزميات .

باقي الأنواع تسالي ومتفرقات :)

 

--نظام وضع المسائل:
واضع المسألة يمكنه اختيار طريقة الحكم على صحة الحل المقدم ..
الطريقة التقليدية تكون بوضع ملف دخل ... وملف خرج
ملف الدخل يحوي المدخلات التي سيعالجها الكود ...
وملف الخرج يحوي المخرجات التي يفترض أن يخرجها الكود الصحيح ...

لحل مسألة كل ما عليك فعله هو كتابة كود يقرأ المدخلات , ويطبع المخرجات المطلوبة  بحيث تطابق ملف الخرج الذي جهّزه واضع المسألة  ...

(ملاحظة هامة : الدخل والخرج بالنسبة لك هو stdin و stdout .. والموقع هو من يتكفل بتوجيهه إلى ملفات )

غالبا يقوم واضع المسألة بوضع أكثر من زوج واحد (دخل وخرج )
بجيث يختبر البرنامج على كل زوج على حدة ...

ما يهم من يحل المسألة هو فقط أن يكون الخرج صحيحاً بناء على الدخل الموافق

المسألة الأولى بالنسبة لجميع المستخدمين تقريباً :::TEST اقرأها وحاول حلّها قبل متابعة الموضوع .. :)

في البداية يضع الproblem setter نص المسألة وقد يحوي قصة جانبية للتشويق
ثم يضع مثالا على دخل وخرج للمسألة ...


لتقديم حل للمسألة ... ( بعد تسجيل الدخول ...)
ندخل الى الصفحة Submit (من الرابط في أعلى الصفحة إلى اليسار قليلا)
post-256536-0-28696600-1385137159_thumb.
ثم نلصق الكود في المكان المخصص أو نرفعه من الحاسب
نختار اللغة التي كتبنا الكود بها ... ثم نضغط submit

 

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

صحيح أن الأخضر أجمل ... ولكن البرتقالي أفضل ... :)
فبدون البرتقالي لن تتعلم ...

عندما تحصل على برتقالي قد يحوي العمود result على رابط إلى صفحة مخرجات المترجم compiler لترى الأخطاء المتولدة أثناء الترجمة (ان وجدت)
أو قد يكون هناك رابط إلى صفحة ويكيبيديا لتعرف نوع الsignal المرسلة بسبب runtime error

في القائمة على اليسار نجد ranks
والتي يمكن من خلالها مشاهدة أفضل المبرمجين في العالم ...
أو معرفة ترتيب البلاد في الموقع بالضغط على countries
ومن ثم يمكن مشاهدة ترتيب المبرمجين في أي بلد تختاره ...
 
محددات المسألة :
post-256536-0-01227100-1385137190_thumb.
نظام النقاط في الموقع :
للمسائل في قسم 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

 

والله ولي التوفيق

تم تعديل بواسطه مصطفى 36a2
5

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

32 إجابة على هذا السؤال .

  • 0

رأيت الكود , لا تضع أكواداً مرة أخرى هنا :)

يمكنك تسريع حلّك كثيراً , فأنت تحفظ القيم في مصفوفة كبيرة الحجم , وهذا ليس له داعٍ , اطبع الإجابة حالما تتمكن من حسابها ( الطباعة ليست بالضرورة بعد قراءة كل الدخل يمكنك الطباعة متى تريد )

أيضاً لا داعي لحجز مصفوفة كل مرة , احجز مصفوفة من البداية بأكبر حجم ممكن , ثم استخدمها في كل الحالات ,,

بالتوفيق :)

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

اوك تم

قمت بتعديل الكود حدفت ثلاث متغيرات وجعلته مختصر اكتر مع انني غيرت شيئ أساسي في عمل التطبيق يختصر عليه الوقت في الحساب

يعني أنا متأكد من أن الكود اصبح أسرع من السابق

لكن مع دالك حصلت على 0.67  :( لا أعرف لمادا

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

قمت بتصوير فيديوهين لتوضيح كيفية التسجيل , وكيفية عمل submit في الموقع , أرجو أن يكون فيهما فائدة

How to register to SPOJ
First SPOJ submission and using ideone
والله ولي التوفيق

 

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

كما لاحظمت فموقع spoj يحتوي على العديد من المسائل

وهدا يشكل عائق امام المستخدم بخصوص اختيار المسألة المناسبة

خصوصا ادا كان المستخدم غير متمكن من اللغة الانجليزية

 

فهل من طريقة للحصول على مسائل تكون في المتناول

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

 

وهدا يشكل عائق امام المستخدم بخصوص اختيار المسألة المناسبة

خصوصا ادا كان المستخدم غير متمكن من اللغة الانجليزية

 

بل هي فرصة جميلة لتعلم اللغة الإنجلزية

 

كما قال الأخ مصطفي فإن الموقع ساعدته في تعلم اللغة الإنجليزية

 

اللغات تعلم بالممارسة

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

نعم وبشكل أسرع

في الأول كنت استغرق وقت طويل لفهم ماهو المطلوب في مسألة ما أم الآن هناك تحسن

لكن أجد مشكلة في اختيار المسائل

وأبحت عن طريقة لتسهيل الاختيار أو قائمة لمسائل تكون في المتناول

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

أهلاً أخي محسن , الحمد لله أنك في تحسن مستمر

هناك موقع للأخ أحمد علي فيه  الكثير من الفوائد , أحدها تصنيف المسائل من SPOJ وغيره , على حسب نوع المسألة

الموقع رائع بكل نواحيه (من حيث المحتوى لا من حيث المظهر )

على كل حال هذا هو الرابط لصفحة التصنيف

http://www.ahmed-aly.com/Categories.jsp

بالتوفيق

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



سجل دخولك الان

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .