From e6623bd6c19db62ca17556fc16e5c4c874ae7509 Mon Sep 17 00:00:00 2001 From: "J.J" Date: Fri, 1 Dec 2023 12:59:02 -0500 Subject: beginning day 1 in racket --- aoc2023-other/day-01/day-01.rkt | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 aoc2023-other/day-01/day-01.rkt (limited to 'aoc2023-other/day-01') diff --git a/aoc2023-other/day-01/day-01.rkt b/aoc2023-other/day-01/day-01.rkt new file mode 100644 index 0000000..1d13ba6 --- /dev/null +++ b/aoc2023-other/day-01/day-01.rkt @@ -0,0 +1,5 @@ +#lang racket + +(require advent-of-code + threading) + -- cgit v1.2.3 From a8589ba63ceb079ac6a24a7835098ec633296f02 Mon Sep 17 00:00:00 2001 From: "J.J" Date: Fri, 1 Dec 2023 13:33:45 -0500 Subject: racket day 1 complete --- aoc2023-other/day-01/day-01.rkt | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) (limited to 'aoc2023-other/day-01') diff --git a/aoc2023-other/day-01/day-01.rkt b/aoc2023-other/day-01/day-01.rkt index 1d13ba6..b4fd688 100644 --- a/aoc2023-other/day-01/day-01.rkt +++ b/aoc2023-other/day-01/day-01.rkt @@ -3,3 +3,36 @@ (require advent-of-code threading) +(define calibration-values (fetch-aoc-input (find-session) 2023 1)) + +(define (to-number str) + (match (string->number str) + [#false (hash-ref word-to-digit str)] + [n n])) + +(define (parse-calibration-value v valid) + (for/fold ([acc '()] [value v] #:result (+ (to-number (first acc)) (* 10 (to-number (last acc))))) + ([_ (in-naturals)]) + #:break (equal? value "") + (let ([possible-prefix (findf (curry string-prefix? value) valid)]) + (if possible-prefix + (values (cons possible-prefix acc) (substring value 1)) + (values acc (substring value 1)))))) + +(define (total-calibration input valid) + (~> input + (string-trim) + (string-split "\n") + (map (λ~> (parse-calibration-value valid)) _) + (apply + _))) + +;; part 1 + +(define valid-for-part-1 (~> (range 0 10) (map ~a _))) +(total-calibration calibration-values valid-for-part-1) + +;; part 2 +(define word-to-digit + (hash "one" 1 "two" 2 "three" 3 "four" 4 "five" 5 "six" 6 "seven" 7 "eight" 8 "nine" 9 "zero" 0)) +(define valid-for-part-2 (append valid-for-part-1 (hash-keys word-to-digit))) +(total-calibration calibration-values valid-for-part-2) -- cgit v1.2.3 From a75aa83cefb27b7684afb8f3e74f4dc199f0dcff Mon Sep 17 00:00:00 2001 From: "J.J" Date: Fri, 1 Dec 2023 14:31:01 -0500 Subject: fixing a small specification mistake --- aoc2023-other/day-01/day-01.rkt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'aoc2023-other/day-01') diff --git a/aoc2023-other/day-01/day-01.rkt b/aoc2023-other/day-01/day-01.rkt index b4fd688..b720f79 100644 --- a/aoc2023-other/day-01/day-01.rkt +++ b/aoc2023-other/day-01/day-01.rkt @@ -28,11 +28,11 @@ ;; part 1 -(define valid-for-part-1 (~> (range 0 10) (map ~a _))) +(define valid-for-part-1 (~> (range 1 10) (map ~a _))) (total-calibration calibration-values valid-for-part-1) ;; part 2 (define word-to-digit - (hash "one" 1 "two" 2 "three" 3 "four" 4 "five" 5 "six" 6 "seven" 7 "eight" 8 "nine" 9 "zero" 0)) + (hash "one" 1 "two" 2 "three" 3 "four" 4 "five" 5 "six" 6 "seven" 7 "eight" 8 "nine" 9)) (define valid-for-part-2 (append valid-for-part-1 (hash-keys word-to-digit))) (total-calibration calibration-values valid-for-part-2) -- cgit v1.2.3