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