يستضيف هذا الريبو الوثيقة المرجعية لفريق KACTL، ICPC التابع لـ KTH. وهو يتألف من 25 صفحة من كود C++ القابل للنسخ واللصق، لاستخدامه في مسابقات البرمجة بأسلوب ICPC.
راجع kactl.pdf للحصول على النسخة النهائية القابلة للتصفح، والمحتوى/ للحصول على كود المصدر الأولي.
يجب أن تكون خوارزميات KACTL: مفيدة، وقصيرة، وسريعة بما فيه الكفاية، ومختبرة جيدًا، وإذا كانت ذات صلة، وقابلة للقراءة وسهلة التعديل. لا ينبغي أن تكون عامة بشكل مفرط، حيث تتم كتابة التعليمات البرمجية يدويًا وهذا يضيف فقط الحمل. نظرًا لمشاكل المساحة، فإننا نستبعد أيضًا الخوارزميات الشائعة/البسيطة جدًا (على سبيل المثال، Dijkstra)، أو غير الشائعة جدًا (المطابقة الموزونة العامة).
إذا شعرت أن هناك شيئًا مفقودًا، أو يمكن تنظيفه، أو لاحظت وجود خطأ، فيرجى تقديم مشكلة أو إرسال طلب سحب!
في حين أن KACTL قابل للاستخدام كما هو، فمن السهل أيضًا تعديله إذا كنت تريد إنشاء نسخة مخصصة. على وجه الخصوص، قد ترغب في تغيير صفحة الغلاف، أو تحديد اختيارك الخاص للخوارزميات التي تريد تضمينها - نظرًا لمخاوف المساحة، لا يتم تضمين جميع الخوارزميات الموجودة في الريبو في ملف pdf. قد ترغب أيضًا في تمكين تمييز بناء الجملة الملون.
content/kactl.tex
هو الملف الرئيسي لـ KACTL، ويمكن تحريره لتغيير اسم الفريق والشعار وإبراز بناء الجملة وما إلى ذلك. فهو يستورد ملفات chapter.tex
من كل content/
أدلة فرعية، والتي تحدد محتويات كل فصل. وتشمل هذه التعليمات البرمجية المصدر والنص والرياضيات في شكل LaTeX. لإضافة/إزالة تعليمات برمجية من فصل، قم بإضافة/إزالة سطر kactlimport
المطابق من ملف chapter.tex
. للحصول على محاذاة أفضل، قد ترغب في إدراج أوامر hardcolumnbreak
أو columnbreak
أو newpage
، على الرغم من أن هذا يتم عادةً قبل المسابقات المهمة فقط، وليس على الفرع الرئيسي. يتم ترك الخوارزميات غير المضمنة في ملف pdf معلقة في chapter.tex
.
لإنشاء KACTL، اكتب make kactl
(أو make fast
) على جهاز *nix - سيؤدي هذا إلى تحديث kactl.pdf
. (قد يعمل Windows أيضًا، ولكن لم يتم اختباره.) يحتوي doc/README
على بعض الملاحظات الإضافية حول هذا الأمر.
نصائح:
make showexcluded
. تم اختيار التكوين الافتراضي ليكون بمثابة توازن معقول للمبتدئين والفرق المتقدمة.hash.sh
أو أمر :Hash
من .vimrc
. يتجاهل التجزئة المسافة البيضاء والتعليقات. يستخدم KACTL أسلوب ترميز مقتضبًا نسبيًا، مع مجموعة من وحدات الماكرو/تعريفات الكتابة المحددة في القالب والتي تساعد في تقصير الكود. عرض الخط هو 63 حرفًا، مع وجود علامات تبويب للمسافات البادئة (علامة التبويب = مسافتان في ملف pdf).
تحتوي كل خوارزمية على رأس مع مؤلف الكود، وتاريخ إضافته، ووصف الخوارزمية، وحالة الاختبار الخاصة بها، ويفضل أيضًا المصدر والترخيص وتعقيد الوقت.
يجب الاحتفاظ بملف kactl.pdf في 25 صفحة + صفحة الغلاف. في بعض الأحيان، يتم الالتزام بملف kactl.pdf الذي تم إنشاؤه في الريبو من أجل الراحة، ولكن ليس في كثير من الأحيان لأنه يجعل عمليات git أبطأ.
تهدف KACTL إلى مستوى عالٍ من الثقة في صحة الخوارزمية. يتم إجراء الاختبار على الحكام عبر الإنترنت و(بالنسبة للخوارزميات الأحدث) باستخدام اختبارات التحمل التي تقارن المخرجات بخوارزمية أكثر سذاجة لعدد كبير من الحالات التي يتم إنشاؤها عشوائيًا. توجد هذه الاختبارات في دليل stress-tests
، ويتم تشغيلها باستخدام CI في كل التزام. يتحقق CI أيضًا من تجميع جميع الرؤوس (باستثناء قائمة الاستبعاد في docs/scripts/skip_headers
) ومن تجميع اللاتكس.
تحتوي old-unit-tests
على اثنين من اختبارات الوحدات المعطلة، تم التطرق إليها آخر مرة منذ حوالي عشر سنوات.
كما جرت العادة بالنسبة للبرمجة التنافسية، فإن وضع الترخيص غير واضح بعض الشيء. تم وضع علامة على العديد من الملفات المصدرية بترخيص (نحاول استخدام CC0)، لكن الكثير منها أيضًا ليس كذلك. من المفترض أن يتم افتراض حسن النية من المؤلفين الآخرين، وفي كثير من الحالات لا يلزم الحصول على إذن نظرًا لعدم توزيع الكود. للمساعدة في تتبع الأمور، يتم تدوين المصادر والمؤلفين في الملفات المصدر.
كل شيء في stress-tests
هو ضمنيًا CC0، باستثناء التطبيقات المرجعية المأخوذة من جميع أنحاء الإنترنت.