DEV Community

Phondanai
Phondanai

Posted on

1 1

Advent of Code 2022 - Day 1 ด้วย Clojure

มาอีกครั้งแล้วสำหรับ Advent of Code 2022, มาครั้งนี้ก็คงเหมือนเดิม จะมาลองทำ Day 1 เหมือนกับของ ปีที่แล้ว

Part 1

1000
2000
3000

4000

5000
6000

7000
8000
9000

10000
Enter fullscreen mode Exit fullscreen mode

โจทย์ให้คำนวณหาจำนวน Calories ของ Elf ที่มี Calories รวมมากสุด เช่นในตัวอย่าง คำตอบคือ 24000 เพราะ Elf ตัวที่ 4 ขน Calories มามากสุด และผลรวมคือ 7000+8000+9000 = 24000

จาก input ตัวอย่าง สามารถใช้ partition-by ในการแบ่งส่วนของข้อมูลที่เป็นกลุ่มกันโดยอาศัยบรรทัดที่ไม่มีข้อมูล และ filter เพื่อเอาส่วนนี้ออก

(def input "1000
2000
3000

4000

5000
6000

7000
8000
9000

10000")

(def not-blank? (complement clojure.string/blank?))

(def input-groups 
  (->> input
       (clojure.string/split-lines)       ; 1
       (partition-by #(= % ""))           ; 2
       (filter #(not-blank? (first %))))) ; 3
Enter fullscreen mode Exit fullscreen mode

อธิบายได้ดังนี้
1 แบ่งข้อมูล input เป็นทีละบรรทัด
2 จัดกลุ่มข้อมูลด้วยบรรทัดที่ไม่มีข้อมูล
3 เอาข้อมูลที่เป็นค่าว่างออก เนื่องจากใน 2 จะติดข้อมูล ("") มาด้วย

ข้อมูลใน input-groups จะได้ลักษณะดังนี้

user=> input-groups
(("1000" "2000" "3000") ("4000") ("5000" "6000") ("7000" "8000" "9000") ("10000"))
Enter fullscreen mode Exit fullscreen mode

จากนั้นนำไปคำนวณต่อ

(def summing 
  (for [i input-groups]
    (reduce + (map #(Integer/parseInt %) i))))

user=> summing
(6000 4000 11000 24000 10000)
Enter fullscreen mode Exit fullscreen mode

หาค่า max (คำตอบใน part 1)

user=> (apply max summing)
24000
Enter fullscreen mode Exit fullscreen mode

Part 2

ในส่วนที่ 2 โจทย์ต้องการหา top 3 ที่มากที่สุด แล้วนำมารวมกัน
จากตรงนี้สามารถนำ summing มาคำนวณต่อด้วยการจัดเรียงด้วย sort แล้วค่อยนำมารวมกันเฉพาะ top 3

=> (->> summing
     (sort >)
     (take 3)
     (reduce +))
45000
Enter fullscreen mode Exit fullscreen mode

Image of Datadog

The Essential Toolkit for Front-end Developers

Take a user-centric approach to front-end monitoring that evolves alongside increasingly complex frameworks and single-page applications.

Get The Kit

Top comments (0)

AWS GenAI LIVE image

How is generative AI increasing efficiency?

Join AWS GenAI LIVE! to find out how gen AI is reshaping productivity, streamlining processes, and driving innovation.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay