Advent of Code-حدث سنوي في ديسمبر منذ عام 2015. كل عام منذ ذلك الحين ، مع اليوم الأول من شهر ديسمبر ، يتم نشر مسابقة ألغاز البرمجة كل يوم لمدة خمسة وعشرين يومًا. توفر مجموعة من التحديات الموجهة نحو عيد الميلاد أي مدخلات يجب أن تستخدمها للإجابة باستخدام اللغة التي تختارها. نحن نقدم لك قالبًا مستعدًا للاستخدام مع لغة Kotlin داخل هذا المستودع.
Advent of Code Kotlin قالب هو نوع معين من مستودع GitHub يتيح لك تسريع مرحلة الإعداد والبدء في كتابة حلول AOC على الفور.
الفكرة العامة واضحة - لإنشاء مشروع جديد يعتمد على هذا القالب ، تحتاج إلى تسجيل الدخول إلى حساب GitHub الخاص بك واستخدام زر استخدام هذا القالب الأخضر. وتذكر - لا تتفرج!
بعد إنشاء مشروع جديد استنادًا إلى هذا القالب في حسابك ، سيبدأ سير العمل المخصص لإجراءات GitHub وتنظيف الكود من الملفات الزائدة. كما أنه سيخصص الكود لاستخدام اسم المستخدم واسم المشروع في مساحات الأسماء وخصائص Gradle. ما مدى روعة هذا؟
يمكنك استنساخها ضمن فكرة Intellij كلما دفع الممثل @Actions-User التزام الثاني بمستودعك.
مهم
مباشرة بعد فتح المشروع في Idea Intellij ، تحقق مما إذا كنت تستخدم على الأقل Java 11 كمشروع SDK. للقيام بذلك ، تفضل بزيارة إعدادات هيكل المشروع ( cmd ؛ على MacOS أو Ctrl Alt Shift S على Windows/Linux).
من الآن فصاعدًا ، كل شيء بين يديك! انضم إلى Advent of Code Contest لحل اليوم 01 بمجرد نشرها.
انسخ ملف حل Day01.kt
للأيام التالية وزيادة رقم اليوم.
ملحوظة
تذكر الانضمام إلى مسابقة Kotlin!
للقيام بذلك ، قم بتحرير قسم مشروعك حول الأيقونة وإضافة موضوع aoc-2024-in-kotlin
إلى مشروعك.
سوف نجد مستودعك ونحسبك في هبة لدينا.
بعد إنشاء مشروع جديد بناءً على مستودع القالب الحالي باستخدام زر استخدام هذا القالب ، ستظهر سقالة أدنى عارية في حساب github الخاص بك مع الهيكل التالي:
.
├── README.md README file
├── build.gradle.kts Gradle configuration created with Kotlin DSL
├── settings.gradle.kts Gradle project settings
├── gradle* Gradle wrapper files
└── src
├── Day01.kt An empty implementation for the first AoC day
├── Utils.kt A set of utility methods shared across your days
│
│ (create those files manually)
├── Day01.txt An empty file for the Day 01 input data
└── Day01_test.txt An optional Day 01 test input data used for checks
ملحوظة
يتم .gitignore
جميع ملفات إدخال المهام ( src/*.txt
عندما يظهر اللغز الأول ، انتقل إلى Day01.kt
، ولكل وظيفة part1
و part2
، قم بتوفير تطبيق خوارزمية باستخدام بيانات input
المحملة من ملف src/Day01.txt
. تعتبر بيانات الإدخال هذه شائعة لكلا الجزأين ، ويمكنك العثور عليها في أسفل كل يوم في ظهور صفحة التعليمات البرمجية.
لقراءة بيانات الإدخال ، يمكنك الذهاب مع طريقة الأداة المساعدة readInput(name: String)
المقدمة في ملف Utils.kt
، مثل:
fun main () {
fun part1 ( input : List < String >): Int {
return input.size
}
val input = readInput( " Day01 " )
println (part1(input))
}
للاتصال بالخوارزمية التي تنفذها ، انقر فوق زر التشغيل الأخضر بجوار تعريف fun main()
.
مهم
قم بإنشاء الملفات ذات الصلة قبل تشغيل المهام أو الاختبارات ، مثل: src/Day01.txt
أو src/Day01_test.txt
.
يحتوي ملف Utils.kt
أيضًا على طريقة String.md5()
لإنشاء تجزئة MD5 من السلسلة المحددة ويتوقع المزيد من وظائف المساعد من أجل مبدأ القبلة.
يصف كل لغز بعض شروط الاختبار ، وهو جزء صغير من المعلومات التي تساعد على التحقق مما إذا كانت القيمة المنتجة لإدخال الاختبار المحدد صالحة. للتعامل مع هذه الحالة ، يمكنك وضع مثل هذه الإدخال في ملف منفصل وإجراء فحص ضد الإخراج ، مثل:
fun main () {
// ...
val testInput = readInput( " Day01_test " )
check(part1(testInput) == 13 )
}
قد يجلب النهج الحالي لتوفير كل من حلول part1
و part2
في Day##.kt
في بعض الأحيان عيبًا بسبب حساب الحل الأول عندما نتوقع العمل في الجزء الثاني فقط. مع الحالات البسيطة التي لا تستهلك الكثير من وقتك ومواردك التي يمكن أن تكون غير ملحوظة تقريبًا ، ولكن عندما يستغرق الحل ثوانٍ ، يجدر التفكير في تقسيم الحل اليومي إلى قطعتين منفصلتين ، مثل Day07_part1.kt
و Day07_part2.kt
.
سيتم طباعة النتيجة النهائية لخوارزميةك على الشاشة حتى تتمكن من تمريرها إلى موقع الويب الخاص بـ Code.
للذهاب مع اليوم التالي ، ضع ملف Day02.txt
في src
مع بيانات الإدخال ذات الصلة وإنشاء ملف Day02.kt
مع سقالة رمز مماثلة:
fun main () {
fun part1 ( input : List < String >): Int {
return 0
}
fun part2 ( input : List < String >): Int {
return 0
}
val input = readInput( " Day02 " )
println (part1(input))
println (part2(input))
}
ملحوظة
هناك شوكة من هذا المستودع المتاح الذي يستخدم أداة AMPER لتكوين المشروع ، الذي تم تقديمه مؤخرًا بواسطة JetBrains.
لمعرفة المزيد ، راجع Advent of Code Kotlin - مشروع Amper.
إذا كنت عالقًا مع الأسئلة الخاصة بـ Kotlin أو أي شيء يتعلق بهذا القالب ، تحقق من الموارد التالية: