tvl-depot/users/tazjin/aoc2020/solution-day6.el
Vincent Ambo 54f143b8f7 feat(tazjin/aoc2020): Add solution for day 6
Change-Id: I107cc23bb77c618067af6cc47ced3c87464f4cba
Reviewed-on: https://cl.tvl.fyi/c/depot/+/2230
Reviewed-by: tazjin <mail@tazj.in>
Tested-by: BuildkiteCI
2020-12-06 11:59:22 +00:00

40 lines
1.2 KiB
EmacsLisp

;; Advent of Code 2020 - Day 6
(require 'cl-lib)
(require 'dash)
(require 'f)
(require 'ht)
(require 's)
(defvar day6/input (s-split "\n\n" (f-read "/tmp/aoc/day6.txt") t)
"Input, split into groups (with people in each group still distinct)")
;; Puzzle 1
(defun day6/count-answers (group-answers)
"I suspect doing it this way will be useful in puzzle 2."
(let ((table (ht-create)))
(-each group-answers
(lambda (answer)
(cl-loop for char across answer
do (ht-set table char (+ 1 (or (ht-get table char)
0))))))
table))
(message "Solution to day6/1: %s"
(cl-loop for group being the elements of day6/input
sum (length
(ht-keys
(day6/count-answers (s-lines group))))))
;; Puzzle 2
(defun day6/count-unanimous-answers (answers)
(ht-reject (lambda (_key value) (not (= value (length answers))))
(day6/count-answers answers)))
(message "Solution to day6/2: %s"
(cl-loop for group being the elements of day6/input
sum (length
(ht-keys
(day6/count-unanimous-answers (s-split "\n" group t))))))