Skip to content

Instantly share code, notes, and snippets.

@seltzer1717
Created December 2, 2023 18:51
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save seltzer1717/109ea6ecac0c8d0dad063e4ea5493549 to your computer and use it in GitHub Desktop.
Save seltzer1717/109ea6ecac0c8d0dad063e4ea5493549 to your computer and use it in GitHub Desktop.
AOC 2023 Day 1
(ns cloud.seltzer1717.aoc.day1
(:import (java.io BufferedReader FileReader)
(java.util.regex Pattern)))
(defn sumOfCalibration1
"Takes calibration document, returns sum of calibration lines."
[docPath]
(let [firstRegex #"^.*?(?<dgt>\d).*$" ;; reluctant
lastRegex #"^.*(?<dgt>\d).*?$" ;; greedy
rgxNbr (fn [rgx ln]
(let [mtr (.matcher rgx ln)]
(.find mtr)
(.group mtr "dgt")))]
(with-open [docReader (BufferedReader. (FileReader. docPath))]
(loop [line (.readLine docReader)
sum 0]
(if line
(recur
(.readLine docReader)
(+ sum (Integer/parseInt (str (rgxNbr firstRegex line) (rgxNbr lastRegex line)))))
sum)))))
(defn sumOfCalibration2
"Takes calibration document, returns sum of calibration lines."
[docPath]
(let [dgt "(\\d|zero|one|two|three|four|five|six|seven|eight|nine)"
nbrToDgt {"zero" "0"
"one" "1"
"two" "2"
"three" "3"
"four" "4"
"five" "5"
"six" "6"
"seven" "7"
"eight" "8"
"nine" "9"}
firstRegex (Pattern/compile (str "^.*?(?<dgt>" dgt ").*$")) ;; reluctant
lastRegex (Pattern/compile (str "^.*(?<dgt>" dgt ").*?$")) ;; greedy
rgxNbr (fn [rgx ln]
(let [mtr (.matcher rgx ln)]
(.find mtr)
(let [nbr (.group mtr "dgt")]
(get nbrToDgt nbr nbr))))]
(with-open [docReader (BufferedReader. (FileReader. docPath))]
(loop [line (.readLine docReader)
sum 0]
(if line
(recur
(.readLine docReader)
(+ sum (Integer/parseInt (str (rgxNbr firstRegex line) (rgxNbr lastRegex line)))))
sum)))))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment