diff options
Diffstat (limited to '2022/Day02')
| -rw-r--r-- | 2022/Day02/input-po.txt | 2500 | ||||
| -rw-r--r-- | 2022/Day02/part-one.cl | 45 | ||||
| -rw-r--r-- | 2022/Day02/part-two.cl | 45 |
3 files changed, 2590 insertions, 0 deletions
diff --git a/2022/Day02/input-po.txt b/2022/Day02/input-po.txt new file mode 100644 index 0000000..18f755a --- /dev/null +++ b/2022/Day02/input-po.txt @@ -0,0 +1,2500 @@ +B Z +A Y +A Y +B X +A Y +B X +A X +B X +B X +B X +C Y +C Y +A X +A Y +A Y +B X +A X +C Y +B Z +A X +B Z +C Y +C Z +A X +C Z +A Y +A X +B Z +B X +A Z +B Z +A X +A Z +B X +B X +C Y +B X +A X +A Y +C Y +B Z +C X +A X +B Z +B Y +B X +A Z +B Z +B Z +A X +B Z +B X +C X +A X +B X +B X +B Z +B X +B Z +A Y +B Z +B X +C Y +A Y +C Y +B Z +A Y +B X +A Y +C Y +A Y +B Z +B Z +C Z +B X +A X +C X +B Y +A Z +C Z +B Z +A Y +A X +B Z +C Z +B X +B Z +A Y +B X +A Y +A Y +A X +C Y +B X +B Z +C Y +B X +B X +C Z +C Y +C Y +A X +B Z +A X +A X +B Y +A Y +B Z +B Z +B Z +A Y +A X +A Y +B X +B Z +A X +B X +B X +C Y +B Z +A X +A Y +B Z +A X +B Z +A Z +A Y +A Z +B Z +A X +A Z +A X +C Y +A Y +A X +B Z +C Z +B Y +B Z +B X +A X +C Y +B Z +B Y +B X +B X +A X +C Y +A Y +B X +A Y +A Y +A Y +B X +A Z +A Y +B X +A X +A Z +B X +B X +C Z +C Y +B X +B X +A Y +C Y +C Y +A X +B Z +B Z +A Y +C Y +B Z +A Y +A Y +A X +B Z +B X +A X +A X +B X +A X +B X +A X +B X +A X +B Y +B Z +A X +B X +B X +B Z +A X +B Z +A Y +B Z +A X +A Z +B X +A X +A Y +C Y +C Y +B Z +A X +C Y +A X +B X +A Y +A X +B X +B X +A Y +A X +A X +A Z +C Y +A X +B X +A X +A X +A X +A Y +A Y +C Z +C Z +A Y +B Z +A X +B X +C Y +B Z +B Z +C Y +C Y +A Y +A Y +A Y +A Y +C Z +A Y +B Z +B Z +C Z +C Y +C Y +C Y +C Y +C X +A X +B Z +B Z +B Z +B Z +C Y +B Z +A X +A X +A X +B Z +A Y +C X +B Z +A X +A Y +B Z +C Z +B X +A X +B Z +A X +A Y +B X +C Y +B X +B Z +A X +B X +B X +A X +B X +B Z +B X +A X +B X +B X +B X +B Z +B X +B Z +C Y +A X +A X +C Y +C Z +A Y +B Z +B Z +A X +B Z +A Y +A X +A Y +A Y +A Y +B Z +C Y +A X +A Y +A Z +B X +A Z +B X +B X +B X +A X +A X +C Y +B X +A X +B Z +A Y +A Y +A X +B Z +A Y +B X +A Y +B Z +C Y +A Y +C X +B X +B Z +C Y +A Y +A X +A X +B Y +C Z +B Z +A Y +A X +A Y +A X +A Y +A Y +A X +A Y +A Z +B X +A X +C Y +A X +C X +A Y +A X +A Y +A X +A X +B X +A X +B Z +A X +C Z +B Z +B Z +A Y +B X +B X +A Y +B X +B X +C Y +A Y +C X +C Y +B Z +A Y +A X +C Z +A X +B X +B X +C X +A Y +B Z +A X +A Z +C Y +B Z +C Y +C X +A Y +B Z +B Z +A Y +B Z +B X +B X +B Z +B Z +B X +C Y +A Y +A X +A Y +B Z +A X +A Y +A Y +A X +B X +A Z +A X +B Z +B Z +A X +C Y +C Y +A Y +A X +A Y +B Z +B Z +B X +B Z +A Y +A X +A Y +A Y +A Z +C Y +C Z +A X +C Y +A Y +A X +A Y +A X +C Z +B Z +B X +B X +B X +A X +A Z +B Z +B X +B X +B X +B X +B X +B X +C Y +B X +B Z +A X +C Z +A X +C X +B Z +A X +A Y +A Z +C Y +B X +C Z +C Y +A Z +B Z +C X +A Y +A Z +B Z +B Z +B Z +A X +A X +B X +A X +B Y +A X +A Y +A Y +B X +A Y +B X +C Z +A Y +C Y +A X +A X +A Y +B X +B Z +A X +B X +B Z +A Z +C Z +B Z +B X +A X +A X +B X +A X +A Y +A Y +B Z +A X +A X +A X +A X +C Y +C Z +A X +A Z +A X +B X +A X +B X +B Z +B X +C Y +B Z +A X +B Z +A Z +A Y +A Y +A X +A X +B Z +A Y +A X +A X +B X +B Z +A Z +A Y +A Z +B X +B Z +A Y +A Z +B X +B Z +A Z +A Y +A Y +A X +A Y +B Z +A Y +A X +A X +A Y +A Y +A X +A Y +A X +C Y +B Z +B X +B X +B X +A X +B Z +B Z +A X +B Z +A Y +C Y +C Y +A Y +B Z +B X +C Y +A X +A Z +B X +B X +C Y +A X +B X +B Z +A Y +A X +B Z +A Y +A Y +C Z +B Z +B Z +A X +C Y +A Y +A Z +A Y +C Z +B Z +A Y +C Z +B X +A X +B X +B X +C Y +A Y +B Y +A Y +B X +A Y +A Y +B X +B Z +B X +A Y +A Y +C Y +C Y +A Y +C Y +A Z +B Z +A X +A Z +A X +C Y +A X +A X +B Z +B Z +C X +C Z +A X +C Y +B Z +B X +A Y +A X +A X +B Z +A X +A Y +A Y +A X +B Z +C Y +A Y +B Z +A Y +B X +A X +A X +A Y +A X +B Z +C Y +A X +A Z +B Z +B Z +A X +C Y +A X +B X +A X +A X +B X +A X +B X +B Z +C X +A X +C Y +C Y +B Z +B X +C Y +C X +A Y +B X +A Y +B Z +C Z +B Z +A Y +A X +B X +A Y +A Y +B Z +B X +A Y +B X +A X +A Y +B Z +B X +A Z +A Y +A X +A Y +B Z +B Z +A X +A X +B Z +A X +B Z +A X +B X +B X +A X +A Y +B X +A Y +A X +B X +B X +B Z +B X +C X +B Z +A Y +B Z +A Y +A X +B Z +B X +B X +C Y +B X +B X +A X +A Y +A X +B X +C Y +C Z +A X +B X +B X +A Y +B Z +B X +A X +B X +C X +A Y +A Y +A Y +A Y +C Y +A Y +A Y +A X +A Y +B X +A Z +A X +B Z +B X +A X +B Z +A X +B Y +A X +A X +A Y +B X +B Z +C X +A X +A X +A Y +B Z +C Z +A X +C X +B Z +B X +B X +B Z +B Z +A X +C Z +A Y +A Y +B Y +B X +B Y +A X +B Z +B Z +A X +B X +A X +B Z +A Y +A Y +B Y +A Y +A Y +A X +B X +A X +B Z +B X +B Z +C Y +A X +B Z +A Z +A X +A X +B X +B X +A Z +B X +A X +A Z +A X +A Z +A Y +A X +A Z +C X +A X +C Y +B X +A X +B X +B X +B X +B X +A X +B Z +B X +A Y +B X +A Y +B X +B X +A Y +B X +A X +A X +A Y +B Z +A Z +B Z +C Y +B Y +A Y +A X +A Y +B Z +A X +B Z +B X +A X +B X +B X +A X +A Y +B Z +C Y +A Y +B Z +C Y +A X +C Y +A Y +A Y +A X +C Y +A Y +B Z +B Z +A Y +B Z +B Z +C Y +A X +A Y +A Y +C Z +A X +A Y +A Y +A X +A Y +B X +A Y +A X +A Y +B X +B X +A Y +A Y +A Y +C Y +A X +A X +B X +A X +B Z +C Y +B Z +C Y +A X +C Z +C Y +B Z +B Z +A Y +B X +B Z +C Y +A X +A X +A X +B Z +A X +A Y +B Z +C X +C Y +A Z +A X +C Y +A X +A X +B X +C Y +A Z +B Z +C Y +B X +A X +A X +C Y +A X +A X +B Z +B X +A X +A Y +B X +A X +A X +B X +C Y +A Y +C Z +A Y +B Z +A X +B X +B X +A X +B X +B Y +A X +C Y +A Y +A Y +B X +A Y +B X +B Z +A Y +C Y +C Y +A Z +B Z +C Z +B Z +A Z +A Y +B Z +A X +B Z +A Z +A Z +B Z +B X +A X +A X +A X +B X +A X +A Y +C Y +B Z +B X +A X +B Z +B X +B Z +A X +B X +B X +B X +A X +B Z +A X +B X +A X +C Y +A X +A Y +A Z +C Y +A Y +A X +C Y +B Z +A X +B Z +A X +B Z +B Z +B Z +C Z +A Z +B X +A X +A Y +A Y +A Y +B X +C X +A Y +A X +A X +C Y +A Y +A Y +B X +C Y +A Z +A Z +A Y +C Y +B Z +A Z +C Y +A X +B X +B X +B X +A X +C Z +C Y +B Z +B Z +A X +A Y +A Y +A Y +C X +A Z +A X +B X +B Z +B Z +A Z +A X +B Z +A Y +B Z +C X +A X +B Z +A Y +A Y +A X +B Z +B X +A Y +A Y +A Y +A Y +A Z +A X +C Y +A Y +A Y +C Y +C Y +B X +C Y +A X +A Z +B Z +C Y +A Z +A X +A Z +A Y +C Y +B Z +A Y +B X +B X +A X +B X +A Z +B Z +A X +A X +C Y +A Y +C Y +C Y +B X +A X +C X +B X +B Z +A Y +B Z +A X +A Y +B Z +B Z +A Y +A Y +A X +A Y +B Z +A Y +B Z +C Y +C Y +B X +A Z +A Y +C Y +B X +B Z +B X +C Y +B Z +A Y +A Y +B Z +A X +A Z +B X +A X +C Z +B X +B X +B X +C X +C Y +B X +A Y +B Z +B X +B Z +C Y +A X +A Y +A X +B X +B Z +B Z +A X +B X +C Y +C X +B Z +A X +A Y +B Z +B Y +C Y +C Y +A Y +B Z +B X +A Y +B Z +A X +A X +A Y +B Z +A Y +A X +B Z +A X +C Y +A Y +C Z +B Z +C Y +B Z +A Y +C Y +A X +A Y +B X +B Z +B X +B Z +A Y +B X +A Y +B Z +A Y +C Y +A X +A X +B Y +B X +A Y +C X +B Z +B Z +A Y +C Z +B X +A X +A Y +B Z +C Y +C Y +A Y +A Y +B X +C Y +A Y +B X +A X +B X +B Z +A X +A Y +B X +B X +C Y +B Z +A X +A X +B X +C Y +B X +A X +A X +B X +C Z +C Y +B X +B Z +A X +A Y +C Y +A Y +A Y +A Y +B X +C Y +B X +A X +A Y +A X +B Z +A Z +B X +A Y +B X +A Y +B X +B Z +A X +A X +B Z +A X +A Y +B X +B Z +B Z +A X +A Y +A Y +A X +A X +B X +B Z +B Y +A X +C Y +A Y +C Y +A Y +C X +B X +B X +A X +B Z +A X +C Y +B X +C Y +A Z +A X +B Y +A X +B X +B Z +A Z +C Y +A Y +A Z +A Y +A X +A Y +A X +A X +A X +B Z +B Z +C X +A X +C Z +B X +C X +B Z +B Z +A Z +B X +A Y +B Z +C Y +A X +C Y +C Y +B Z +A Y +A Z +A X +B Z +B X +C Z +C Y +A Y +C Z +B X +B Z +C Y +A X +B X +C Z +B Z +C Y +B X +A Y +B Z +C X +A Z +A X +A Y +B Z +B X +B X +B X +B Z +A Z +A X +B Z +B X +A X +A Y +B X +B X +A X +A X +B X +B X +C Y +A Y +C Z +A Y +A Y +A X +B X +B Z +A X +B X +A X +B X +A Y +C Y +A Y +A X +A Y +A Y +C Y +B Z +B Z +A X +A Y +C Y +C Y +A Y +A X +A X +C Y +B X +A Y +B Z +C Y +B Z +A X +A Y +A X +B Z +B X +C Y +A Z +C X +A Y +A X +C X +B X +A Y +A X +B Z +B Z +C Y +A X +A Y +A Y +B X +A Y +A X +C Y +B X +C Y +A Y +A Y +A Y +A X +A X +C Z +B X +C Y +B Z +A X +A Y +B Z +C X +B Z +A X +C Y +C Y +B Z +B Z +A X +C Y +C Y +A Y +C Y +B X +B Z +A Z +C Y +A Z +B Z +A X +B Z +A X +B Z +A X +A Y +A X +B Z +A X +A X +A X +B X +C Y +B Z +B X +A Y +A Y +C Y +B X +A Z +C Z +C Y +A X +A Y +A X +B Z +A X +B X +C Z +A Y +C Y +A Y +A Y +A Z +C Y +A X +B Z +C X +B Z +A X +B Z +B Y +A X +C Y +A X +A Y +B X +A X +B X +A Z +A X +A Y +B X +A Y +B X +C Y +B X +A X +A Y +A X +B X +A X +A X +B X +A Y +B Y +A X +A Y +A X +B X +C Y +A X +A Z +C Y +A Y +C Z +B X +B Z +A Y +C X +A Z +A X +A X +B Z +C X +A Y +A X +A Y +A X +A Y +B Z +B X +A Z +B Z +A X +A Y +B X +B Z +A Y +B Z +C X +B Z +A X +B X +B X +C Y +B X +B Z +A X +A Y +B X +A X +B Z +A X +B Z +B Z +C Y +C Y +B Z +B X +B Z +A X +A Y +A X +B X +B Z +A Y +B Z +B X +B X +B X +B Z +B Z +A X +B X +A Y +B X +C Y +B Z +B Z +B X +C Z +A Y +A Y +B Z +B Z +A X +C Z +A Y +A X +A Y +B X +C Y +A Y +A X +B X +B Z +A Z +A Y +A Z +A X +B X +B X +A Z +A Y +A X +C Y +A Y +A X +C Z +A X +B X +A Y +B X +A Y +A X +A Y +B Z +B Z +C Z +A Y +A X +A Y +A Z +A Y +B Z +B X +A X +A X +B Z +C X +A Y +A X +A Z +C X +C Y +B Z +A Y +B X +B Z +C X +B Z +A Y +B Z +B X +A Y +B Z +B X +A X +B Z +C Y +A Y +B Z +A X +A X +B Z +A X +C Y +A X +B X +B Z +B Z +C Y +A X +B Z +C Z +B Z +A Y +B Z +B Z +A X +B Z +A X +B X +A X +A X +B Z +B X +A Z +B Z +B X +B Z +B Z +B Z +B Z +A Y +B X +A Y +B Z +B X +A X +A X +B X +B Z +C Y +B Z +B X +B Z +B Z +C Y +A X +A Y +B X +A Z +B Z +B Z +A X +A Y +B Z +A Z +A Y +A Y +A Y +A Y +C Y +B Z +A X +A X +B X +A Y +A Y +A Y +A Y +B X +B Z +C Y +B X +B X +A Y +B X +B Z +A X +C X +B X +B X +B X +C X +C Y +A Y +A X +B X +A Z +C X +B Z +C Y +B Z +A Y +A X +B X +B X +B X +A Y +B Z +A Z +C Y +A Y +A X +B Z +C Y +A Y +A X +B Z +C Z +C Y +A Y +A X +A Y +C Z +A Y +B Z +B X +B X +C Z +C Y +C Y +C Z +A Y +A Z +C Z +A Y +A X +B Z +A Y +A X +C X +A Y +C Y +C Y +A X +B Z +B X +A Z +B X +A X +C Y +A Z +B Z +A X +B Z +B X +A Y +C Z +B X +B Z +C Y +A X +B Z +B X +A Y +B X +C X +A X +A X +A X +A X +C Y +C Y +A X +B Z +A X +A Y +A Y +A X +A X +B Z +B Z +B X +A Y +A Z +C Y +A X +A Y +B Z +B X +B X +A X +C X +B Z +C Y +C Z +B Z +A X +B Z +A Y +A Y +A Y +C Z +C Y +A Y +C Y +A Y +A X +B Z +B Z +B X +C Z +A Y +C X +B Z +A Y +B Z +B X +B Z +A X +A X +B Z +C Y +A Z +A Y +B Z +A Z +C Y +B Z +B X +A X +B Z +B X +A X +B Z +A X +A X +B Z +C Y +B Z +A Y +A X +A X +C X +A Y +B Z +C Y +A Z +C Y +B X +A X +B X +C X +C Y +B Z +B Z +A Y +A Z +B X +B Z +A Y +B X +A Z +C Y +C Z +C Y +A Y +C X +C X +B X +A Y +A X +B X +B X +C Z +C X +A X +A Y +B X +B X +C X +B Z +A Y +B Z +A Y +B Z +C Y +A X +A X +B X +B Z +A X +C Y +B X +A X +A X +A Y +A Z +B X +A X +A Y +A Z +B X +B Z +A Y +A X +B X +A Y +C Y +B Y +B X +A Y +C X +A Z +C Y +A X +B Y +C Y +B Z +B X +C Y +C Y +A Y +A X +C X +A Z +A X +B Z +B X +B X +A X +B X +A Z +B X +B Z +B Z +C Z +B Z +B X +C Y +C Y +A Z +C X +A X +B Z +A X +C Y +A X +A Z +B Z +B Z +A X +B Z +B Z +A X +C Z +B Z +B X +C X +A Z +B X +A Y +B Z +C Y +B Z +B X +A Y +B Z +A X +B Z +A Y +A Z +B Z +C Y +C Y +A Z +B Z +B X +B X +C Z +B Z +B Z +A X +A X +A X +A X +A X +C Y +A X +B Z +A X +B Z +C Y +C X +A Y +B X +A X +B Z +A Y +B Z +C X +A Y +B X +A X +A Y +B Z +A Y +A X +B X +B Y +B X +B Z +B X +A X +B X +B X +B X +A Z +A X +A X +B X +C Y +A X +A X +B X +B X +B X +B X +A Y +A X +B Z +A X +A Y +C Y +B Z +A Y +A X +C Z +A X +B Z +A X +B Z +B Z +B Z +C Y +B X +C Y +A Z +B Z +A X +A Y +A Y +A Y +B X +B Z +B Z +A Y +B Z +B Z +B X +A X +B Z +A Y +A Y +A X +B Z +A X +A X +B Z +C Y +B X +A X +A X +A Z +C Y +A X +A X +A X +A X +A X +C Y +A X +A X +B X +B Z +C Z +B X +A Y +B Z +A X +A Y +B Z +B Z +B Z +B Z +A X +A Y +A Y +B X +A Y +A Z +A Y +B Y +A X +B Z +A X +A Y +C Y +B Z +C Y +A X +B Z +A X +A Z +B Z +A X +B X +C Y +A Y +A X +A Z +C Y +A Z +A Y +A Y +A X +A X +A Z +A Y +B X +B Z +B X +B X +C Y +A Y +A X +B X +A X +B Z +A X +A X +B Z +C Y +B X +C Y +A X +B X +C Z +A Y +B X +A Y +A Y +B X +C Y +B Z +A Y +B Z +A Y +A X +A X +A Y +B Z +B Z +A Y +A X +A X +B X +B Z +A Y +A X +C Y +B X +C Y +B Z +B Z +B X +A Y +B X +B X +A X +C Y +C Y +B Z +B X +A Y +C Z +C Z +C Y +A Y +B X +B Z +B X +A X +B Z +A Y +A X +C Y +B X +A Y +B X +A Z +A X +A Y +C Y +A Y +A X +C Y +C Z +B X +A Y +C Y +B Z +B X +A X +B X +B X +C Y +B Z +B Z +B Z +B X +B Z +A Y +B Y +B Z +A Z +A X +B Y +A X +B Z +A Y +B X +A X +B Z +C Z +B Z +B Z +A Y +B X +A X +A X +B X +A Y +A Y +A X +C Z +C X +A Y +C X +A Y +A Z +C Y +A X +B X +A X +B Z +A X +C Y +A Y +B X +C Y +A Y +A Z +A Y +A Y +B Z +C Z +C Y +A Y +A Y +B X +C X +A Z +B Z +C Y +A X +A Y +B X +A Y +C Y +C Z +A Y +B Z +A X +C Y +B X +B Z +A X +C Z +B Z +C Y +C Z +B Z +A X +A Y +A X +B X +B Z +B X +A X +B Z +C Y +A Z +A Z +C Y +A Y +C X +B X +A X +A X +B X +B Z +B X +B Z +B Z +A X +B X +A X +A Y +A X +C Z +B Z +A X +C Z +C Z +C X +A X +B X +A X +A Z +A X +C Z +A X +A X +B Z +C Z +C Y +B Z +B X +A X +A X +A Y +B Z +A Y +B X +B Z +C X +B Z +B X +A Y +B Z +A Z +A Y +A Y +B X +C X +A Y +A Y +C Y +C Y +B Z +B X +C Y +C Y +A Y +A X +A Y +A Y +B Z +B X +A X +B X +B Z +B Z +A Z +A Z +A Z +A X +B X +B Z +A X +B Z +A X +B Z +B X +C Z +B Y +A Y +A Y +A X +A X +B Z +B Z +B X +A Y +C Y +B X +A X +B X +C Y +A X +A X +B X +C Y +C Y +C X +B X +C Y +A Z +B Z +B Z +B Z +B X +B Z +A X +B X +A X +A Y +C Z +B X diff --git a/2022/Day02/part-one.cl b/2022/Day02/part-one.cl new file mode 100644 index 0000000..e93cae8 --- /dev/null +++ b/2022/Day02/part-one.cl @@ -0,0 +1,45 @@ +(defvar *prog-input*) + +(let ((ui (read-line))) + (if (equal ui "") + (setq *prog-input* *standard-input*) + (setq *prog-input* (open ui)))) + +(let + ((cal (read-line *prog-input* NIL)) (total-score 0) + (your-rps '(#\0 #\X #\Y #\Z)) (enemy-rps '(#\0 #\A #\B #\C)) + (cy-rps 0) (ce-rps 0)) + + (loop until (or (equal cal "end") (not cal)) do + ;; Rock is 1, paper is 2, scissors is 3 + (setq ce-rps (position (char cal 0) enemy-rps)) + (setq cy-rps (position (char cal 2) your-rps)) + + ;; We want, when we lose to add 3 * 0, when we draw to add 3 * 1 and when we win to add 3 * 2 + ;; To get numbers 0, 1, and 2, we'll use `3 mod N` + ;; Writing down all possible combinations + ;; (from left to right, columns are "Your choice", "Enemy choice", "Result"): + ;; 1 1 | 1 = 3 % 1 (Draw) + ;; 1 2 | 0 = 3 % 3 (Lose) + ;; 1 3 | 2 = 3 % 2 (Win) + ;; ----+----------------- + ;; 2 1 | 2 = 3 % 2 (Win) + ;; 2 2 | 1 = 3 % 1 (Draw) + ;; 2 3 | 0 = 3 % 3 (Lose) + ;; ----+----------------- + ;; 3 1 | 0 = 3 % 3 (Lose) + ;; 3 2 | 2 = 3 % 2 (Win) + ;; 3 3 | 1 = 3 % 1 (Draw) + ;; We notice, that N (in "3 % N") is a rotation of the numbers 3, 2, 1, where if your choice + ;; is 3, we don't rotate them, if it's 2 we rotate by one (backwards) and so on. + ;; We can get 3, 2, 1 from the enemie's 1, 2, 3 by subtracting them from 4. Then we can use + ;; your choice to do the "rotation" (since we're doing mod, 3 % 3 = 3 % 6). + (setq total-score (+ total-score (* 3 (mod (+ (- 4 ce-rps) cy-rps) 3)) cy-rps)) + + (setq cal (read-line *prog-input* NIL))) + + (print total-score)) + +(if (not (eq *prog-input* *standard-input*)) + (close *prog-input*)) + diff --git a/2022/Day02/part-two.cl b/2022/Day02/part-two.cl new file mode 100644 index 0000000..40090e2 --- /dev/null +++ b/2022/Day02/part-two.cl @@ -0,0 +1,45 @@ +(defvar *prog-input*) + +(let ((ui (read-line))) + (if (equal ui "") + (setq *prog-input* *standard-input*) + (setq *prog-input* (open ui)))) + +(let + ((cal (read-line *prog-input* NIL)) (total-score 0) + (your-rps '(#\0 #\X #\Y #\Z)) (enemy-rps '(#\0 #\A #\B #\C)) + (cy-rps 0) (ce-rps 0)) + + (loop until (or (equal cal "end") (not cal)) do + (setq ce-rps (position (char cal 0) enemy-rps)) + ;; We reuse numbers 1,2,3 to, for now, signify your strategy + (setq cy-rps (position (char cal 2) your-rps)) + + ;; Similarly to part-one.cl, if we write down the table of possible combinations + ;; (from left to right, columns are "Your strategy", "Enemy choice", "What your choice should be"): + ;; 1 1 | 3 = 1 + 2 + ;; 1 2 | 1 = 1 + 0 + ;; 1 3 | 2 = 1 + 1 + ;; ----+---------- + ;; 2 1 | 1 = 1 + 0 + ;; 2 2 | 2 = 1 + 1 + ;; 2 3 | 3 = 1 + 2 + ;; ----+---------- + ;; 3 1 | 2 = 1 + 1 + ;; 3 2 | 3 = 1 + 2 + ;; 3 3 | 1 = 1 + 0 + ;; Your choice is a rotation of the numbers 1, 2 and 3, where if your strategy is 1 (lose) + ;; you rotate once, if your strategy is 2 (draw) you rotate zero times and if it is 3 (win) + ;; you rotate two times. + (setq cy-rps (+ (mod (+ cy-rps ce-rps) 3) 1)) + + ;; Refer to part-one.cl for explanation on math + (setq total-score (+ total-score (* 3 (mod (+ (- 4 ce-rps) cy-rps) 3)) cy-rps)) + + (setq cal (read-line *prog-input* NIL))) + + (print total-score)) + +(if (not (eq *prog-input* *standard-input*)) + (close *prog-input*)) + |
