Advent of Code-งานประจำปีในเดือนธันวาคมตั้งแต่ปี 2015 ทุก ๆ ปีตั้งแต่นั้นมาในวันแรกของเดือนธันวาคมการประกวดการเขียนโปรแกรมจะตีพิมพ์ทุกวันเป็นเวลายี่สิบห้าวัน ชุดของความท้าทายที่มุ่งเน้นคริสต์มาสให้ข้อมูลใด ๆ ที่คุณต้องใช้เพื่อตอบโดยใช้ภาษาที่คุณเลือก เราเสนอเทมเพลตที่พร้อมใช้งานกับภาษา Kotlin ภายในที่เก็บนี้
การถือกำเนิดของ Code Kotlin Template เป็นพื้นที่เก็บข้อมูลเฉพาะของ GitHub ที่ให้คุณเร่งขั้นตอนการตั้งค่าและเริ่มเขียนโซลูชัน AOC ของคุณทันที
แนวคิดทั่วไปนั้นตรงไปตรงมา - เพื่อสร้างโครงการใหม่ตามเทมเพลตนี้คุณต้องเข้าสู่บัญชี GitHub ของคุณและใช้ปุ่ม ใช้แม่แบบสีเขียวนี้ และจำไว้ว่า - อย่าแยกมัน!
หลังจากสร้างโครงการใหม่ตามเทมเพลตนี้ในบัญชีของคุณเวิร์กโฟลว์การกระทำของ GitHub โดยเฉพาะจะเริ่มต้นและทำความสะอาดรหัสจากไฟล์ซ้ำซ้อน นอกจากนี้ยังจะปรับแต่งรหัสส่วนบุคคลเพื่อใช้ชื่อผู้ใช้และชื่อโครงการของคุณในเนมสเปซและคุณสมบัติ Gradle มันเจ๋งแค่ไหน?
คุณสามารถโคลนมันได้ภายในแนวคิด Intellij เมื่อใดก็ตามที่นักแสดง @actions-user ผลักดันการกระทำที่สองไปยังที่เก็บของคุณ
สำคัญ
หลังจากเปิดโครงการใน INTELLIJ Idea ตรวจสอบว่าคุณใช้ Java 11 อย่างน้อยเป็น Project SDK หรือไม่ ในการทำเช่นนั้นให้ไปที่การตั้งค่าโครงสร้างโครงการ ( ⌘ cmd ; บน macOS หรือ ctrl alt shift s บน windows/linux)
จากนี้ไปทุกอย่างอยู่ในมือของคุณ! เข้าร่วมการประกวดการถือกำเนิดของรหัสเพื่อแก้ไข วันที่ 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
บันทึก
ไฟล์อินพุตงานทั้งหมด ( src/*.txt
) ถูกแยกออกจากที่เก็บด้วย .gitignore
- เราไม่ควรโพสต์ต่อสาธารณะตามที่ Eric Wastl ร้องขอ
เมื่อปริศนาแรกปรากฏขึ้นให้ไปที่ 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
ผลลัพธ์สุดท้ายของอัลกอริทึมของคุณจะถูกพิมพ์บนหน้าจอเพื่อให้คุณสามารถส่งผ่านไปยังเว็บไซต์การถือกำเนิดของรหัส
หากต้องการไปกับวันถัดไปให้วางไฟล์ 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))
}
บันทึก
มีส้อมของพื้นที่เก็บข้อมูลนี้ที่ใช้เครื่องมือแอมแปร์สำหรับการกำหนดค่าโครงการซึ่งเพิ่งเปิดตัวโดย Jetbrains
สำหรับข้อมูลเพิ่มเติมดูการถือกำเนิดของ Code Kotlin Template - โครงการ Amper
หากคุณติดอยู่กับคำถามเฉพาะของ Kotlin หรืออะไรก็ตามที่เกี่ยวข้องกับเทมเพลตนี้ให้ตรวจสอบทรัพยากรต่อไปนี้: