54f143b8f7
Change-Id: I107cc23bb77c618067af6cc47ced3c87464f4cba Reviewed-on: https://cl.tvl.fyi/c/depot/+/2230 Reviewed-by: tazjin <mail@tazj.in> Tested-by: BuildkiteCI
40 lines
1.2 KiB
EmacsLisp
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))))))
|