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))))))
 |