1.rkt 1.0 KB

12345678910111213141516171819202122232425262728
  1. #lang racket
  2. (require "../../lib/utils.rkt")
  3. (define lines
  4. (call-with-input-file "input"
  5. (lambda (fp) (get-lines fp))))
  6. (define games (map string-split lines))
  7. (define (score game)
  8. (define (base-score mine)
  9. (cond ((string=? "X" mine) 1)
  10. ((string=? "Y" mine) 2)
  11. ((string=? "Z" mine) 3)))
  12. (define (win-score mine oppo)
  13. (cond ((string=? "X" mine) (cond ((string=? "A" oppo) 3)
  14. ((string=? "B" oppo) 0)
  15. ((string=? "C" oppo) 6)))
  16. ((string=? "Y" mine) (cond ((string=? "A" oppo) 6)
  17. ((string=? "B" oppo) 3)
  18. ((string=? "C" oppo) 0)))
  19. ((string=? "Z" mine) (cond ((string=? "A" oppo) 0)
  20. ((string=? "B" oppo) 6)
  21. ((string=? "C" oppo) 3)))))
  22. (+ (base-score (cadr game)) (win-score (cadr game) (car game))))
  23. (apply + (map score games))