From b43f2a47e83aa7ca9c8144e3f144d2c69c7fc579 Mon Sep 17 00:00:00 2001 From: Oscar Najera Date: Mon, 4 Dec 2023 17:27:52 +0100 Subject: [AoC2023] day04 part 1 lisp --- AoC2023/day04/solver.lisp | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 AoC2023/day04/solver.lisp (limited to 'AoC2023/day04/solver.lisp') diff --git a/AoC2023/day04/solver.lisp b/AoC2023/day04/solver.lisp new file mode 100644 index 0000000..ec8f09d --- /dev/null +++ b/AoC2023/day04/solver.lisp @@ -0,0 +1,37 @@ +(ql:quickload '(fiveam str transducers)) + +(defpackage #:day04 + (:use #:cl #:fiveam) + (:local-nicknames (#:t #:transducers))) + +(in-package #:day04) + +(defparameter eg-input "Card 1: 41 48 83 86 17 | 83 86 6 31 17 9 48 53 +Card 2: 13 32 20 16 61 | 61 30 68 82 17 32 24 19 +Card 3: 1 21 53 59 44 | 69 82 63 72 16 21 14 1 +Card 4: 41 92 73 84 69 | 59 84 76 51 58 5 54 83 +Card 5: 87 83 26 28 32 | 88 30 70 12 93 22 82 36 +Card 6: 31 18 13 56 72 | 74 77 10 23 35 67 36 11") + +(defun matching-numbers (line) + (destructuring-bind (_card winners haves) + (uiop:split-string line :separator '(#\: #\|)) + (declare (ignorable _card)) + (intersection + (mapcar #'parse-integer + (str:split " " winners :omit-nulls t)) + (mapcar #'parse-integer + (str:split " " haves :omit-nulls t))))) + +(defun solver1 (lines) + (t:transduce + (t:comp + (t:filter-map #'matching-numbers) + (t:map #'length) + (t:map (lambda (n) (expt 2 (1- n))))) + #'+ + lines)) + +(test solutions + (is (= 13 (solver1 (uiop:split-string eg-input :separator '(#\Newline))))) + (is (= 18619 (solver1 #p"input")))) -- cgit v1.2.3