-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathd02.lisp
62 lines (52 loc) · 2.22 KB
/
d02.lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
(in-package :advent/2022)
(defparameter *d2/input*
(uiop:read-file-string (asdf:system-relative-pathname :advent "2022/d02.input")))
(defparameter *d2/test* "A Y
B X
C Z")
(defun d2/parse (input)
(mapcar (lambda (x) (split "\\s" x))
(split "\\n" input)))
(defun compute-rps-score (game)
(+ (cond ((string= "X" (cadr game)) 1)
((string= "Y" (cadr game)) 2)
((string= "Z" (cadr game)) 3)
(t (progn (break) 0)))
(cond ((or (and (string= "A" (car game)) (string= "Y" (cadr game)))
(and (string= "B" (car game)) (string= "Z" (cadr game)))
(and (string= "C" (car game)) (string= "X" (cadr game)))) 6)
((or (and (string= "A" (car game)) (string= "X" (cadr game)))
(and (string= "B" (car game)) (string= "Y" (cadr game)))
(and (string= "C" (car game)) (string= "Z" (cadr game)))) 3)
(t 0))))
(defun compute-rps-score-2 (game)
(+ (cond ((string= "X" (cadr game)) 0)
((string= "Y" (cadr game)) 3)
((string= "Z" (cadr game)) 6)
(t (progn (break) 0)))
(cond ((or (and (string= "A" (car game)) (string= "X" (cadr game)))
(and (string= "B" (car game)) (string= "Z" (cadr game)))
(and (string= "C" (car game)) (string= "Y" (cadr game)))) 3)
((or (and (string= "A" (car game)) (string= "Z" (cadr game)))
(and (string= "B" (car game)) (string= "Y" (cadr game)))
(and (string= "C" (car game)) (string= "X" (cadr game)))) 2)
(t 1))))
(defun d2/t1 ()
(every #'identity
(list (= 8 (compute-rps-score '("A" "Y")))
(= 1 (compute-rps-score '("B" "X")))
(= 6 (compute-rps-score '("C" "Z")))
(= 15 (d2/p1 *d2/test*)))))
(defun d2/t2 ()
(every #'identity
(list (= 12 (d2/p2 *d2/test*)))))
(defun d2/p1 (input)
(reduce '+ (mapcar 'compute-rps-score (d2/parse input))))
(defun d2/p2 (input)
(reduce '+ (mapcar 'compute-rps-score-2 (d2/parse input))))
(defun d2/summary ()
(format t "~%Day 2: Rock Paper Scissors")
(format t "~% Puzzle 1:")
(print-result (d2/p1 *d2/input*))
(format t "~% Puzzle 2:")
(print-result (d2/p2 *d2/input*)))