feat(tazjin/aoc2023): day 1 solution
The second task was very annoying because you had to guess the actual rules (overlapping words), as they're not explained correctly in the task. My solution hardcodes those cases. Change-Id: Idf24579a78a1b8ede368504d3ff0c58c9978f069 Reviewed-on: https://cl.tvl.fyi/c/depot/+/10183 Tested-by: BuildkiteCI Autosubmit: tazjin <tazjin@tvl.su> Reviewed-by: tazjin <tazjin@tvl.su>
This commit is contained in:
parent
5ec564ca6c
commit
240e457bf4
1 changed files with 52 additions and 0 deletions
52
users/tazjin/aoc2023/day1.el
Normal file
52
users/tazjin/aoc2023/day1.el
Normal file
|
@ -0,0 +1,52 @@
|
|||
(require 's)
|
||||
(require 'f)
|
||||
|
||||
;; task 1
|
||||
|
||||
(defun digit-p (c)
|
||||
(and (> c ?0)
|
||||
(<= c ?9)))
|
||||
|
||||
(defun aocd1-sum-values (lines)
|
||||
(-sum
|
||||
(-map (lambda (line)
|
||||
(let ((digits (-filter #'digit-p (string-to-list line))))
|
||||
(string-to-number (string (-first-item digits) (-last-item digits)))))
|
||||
lines)))
|
||||
|
||||
(let ((lines (s-lines (s-trim (f-read "~/Downloads/input.txt")))))
|
||||
(aocd1-sum-values lines))
|
||||
|
||||
;; task 2
|
||||
|
||||
(defun replace-written-numbers (input)
|
||||
(with-temp-buffer
|
||||
(insert input)
|
||||
(let ((start 1))
|
||||
(while (< start (point-max))
|
||||
(format-replace-strings
|
||||
'(("oneight" . "18")
|
||||
("twone" . "21")
|
||||
("threeight" . "38")
|
||||
("fiveight" . "58")
|
||||
("sevenine" . "79")
|
||||
("eightwo" . "82")
|
||||
("eighthree" . "83")
|
||||
("nineight" . "98"))
|
||||
nil start (min (+ 10 start) (point-max)))
|
||||
(format-replace-strings
|
||||
'(("one" . "1")
|
||||
("two" . "2")
|
||||
("three" . "3")
|
||||
("four" . "4")
|
||||
("five" . "5")
|
||||
("six" . "6")
|
||||
("seven" . "7")
|
||||
("eight" . "8")
|
||||
("nine" . "9"))
|
||||
nil start (min (+ 5 start) (point-max)))
|
||||
(setq start (1+ start))))
|
||||
(buffer-string)))
|
||||
|
||||
(let ((lines (s-lines (s-trim (f-read "~/Downloads/input.txt")))))
|
||||
(aocd1-sum-values (-map #'replace-written-numbers lines)))
|
Loading…
Reference in a new issue