aoc/day-1/main.rkt

46 lines
921 B
Racket
Raw Permalink Normal View History

2024-07-31 12:26:10 +02:00
#lang racket
(define ht #hash(("one" . "o1e")
("two" . "t2o")
("three" . "thr3e")
("four" . "fo4r")
("five" . "fi5e")
("six" . "s6x")
("seven" . "se7en")
("eight" . "ei8ht")
("nine" . "ni9e")) )
(define (numerized str)
(for ([i (hash-keys ht)])
(define repl (hash-ref ht i))
(set! str
(string-replace str i repl) ))
(set! str (regexp-replace* #rx"[^0-9]" str ""))
str )
(define (values str)
(define (first-number num)
(define quo (quotient num 10))
(cond
[(> quo 10) (first-number quo)]
[else quo]) )
(define num (string->number str))
(cond
[(not (number? num)) 0]
[(< num 10) (+ num (* num 10))]
[(< num 100) num]
[else (let*
([first (first-number num)]
[last (remainder num 10) ] )
(+ (* first 10) last) ) ] ))
(define lines (file->lines "data.in"))
(define nums (map numerized lines))
(foldr + 0 (map values nums))