From 240e457bf47a374f3fff6ffca500d99347664bc2 Mon Sep 17 00:00:00 2001 From: Vincent Ambo Date: Fri, 1 Dec 2023 19:17:57 +0300 Subject: 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 Reviewed-by: tazjin --- users/tazjin/aoc2023/day1.el | 52 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 users/tazjin/aoc2023/day1.el (limited to 'users/tazjin') diff --git a/users/tazjin/aoc2023/day1.el b/users/tazjin/aoc2023/day1.el new file mode 100644 index 0000000000..b1a7faff02 --- /dev/null +++ b/users/tazjin/aoc2023/day1.el @@ -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))) -- cgit 1.4.1