Created
December 2, 2023 18:51
-
-
Save seltzer1717/109ea6ecac0c8d0dad063e4ea5493549 to your computer and use it in GitHub Desktop.
AOC 2023 Day 1
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(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