aboutsummaryrefslogtreecommitdiff
path: root/advent-of-code/2022/02/2.rkt
diff options
context:
space:
mode:
Diffstat (limited to 'advent-of-code/2022/02/2.rkt')
-rw-r--r--advent-of-code/2022/02/2.rkt45
1 files changed, 45 insertions, 0 deletions
diff --git a/advent-of-code/2022/02/2.rkt b/advent-of-code/2022/02/2.rkt
new file mode 100644
index 0000000..4b0dd02
--- /dev/null
+++ b/advent-of-code/2022/02/2.rkt
@@ -0,0 +1,45 @@
+#lang racket
+
+(require "../../lib/utils.rkt")
+
+(define lines
+ (call-with-input-file "input"
+ (lambda (fp) (get-lines fp))))
+
+(define games (map string-split lines))
+
+(define (transform-cheat mine oppo)
+ (cond ((string=? "X" mine) (cond ((string=? "A" oppo) "Z")
+ ((string=? "B" oppo) "X")
+ ((string=? "C" oppo) "Y")))
+ ((string=? "Y" mine) (cond ((string=? "A" oppo) "X")
+ ((string=? "B" oppo) "Y")
+ ((string=? "C" oppo) "Z")))
+ ((string=? "Z" mine) (cond ((string=? "A" oppo) "Y")
+ ((string=? "B" oppo) "Z")
+ ((string=? "C" oppo) "X")))))
+
+(set! games
+ (map
+ (lambda (x)
+ (list (car x) (transform-cheat (cadr x) (car x))))
+ games))
+
+(define (score game)
+ (define (base-score mine)
+ (cond ((string=? "X" mine) 1)
+ ((string=? "Y" mine) 2)
+ ((string=? "Z" mine) 3)))
+ (define (win-score mine oppo)
+ (cond ((string=? "X" mine) (cond ((string=? "A" oppo) 3)
+ ((string=? "B" oppo) 0)
+ ((string=? "C" oppo) 6)))
+ ((string=? "Y" mine) (cond ((string=? "A" oppo) 6)
+ ((string=? "B" oppo) 3)
+ ((string=? "C" oppo) 0)))
+ ((string=? "Z" mine) (cond ((string=? "A" oppo) 0)
+ ((string=? "B" oppo) 6)
+ ((string=? "C" oppo) 3)))))
+ (+ (base-score (cadr game)) (win-score (cadr game) (car game))))
+
+(apply + (map score games)) \ No newline at end of file