From 02e5b2a4bf9fee71792ea1431a55bf36996dbc67 Mon Sep 17 00:00:00 2001 From: Mistivia Date: Mon, 12 Feb 2024 15:15:01 +0800 Subject: solve advent of code 2023 day 07 part 2 --- advent-of-code/2023/07/part2.rkt | 87 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 advent-of-code/2023/07/part2.rkt diff --git a/advent-of-code/2023/07/part2.rkt b/advent-of-code/2023/07/part2.rkt new file mode 100644 index 0000000..50d9526 --- /dev/null +++ b/advent-of-code/2023/07/part2.rkt @@ -0,0 +1,87 @@ +#lang racket + +(define input + (with-input-from-file "input" + (lambda () + (let loop ((cards '())) + (define line (read-line)) + (if (or (eof-object? line) + (= 0 (string-length line))) + (reverse cards) + (let () + (define splited-line (string-split line)) + (define hand (car splited-line)) + (define bid (string->number (cadr splited-line))) + (loop (cons (list hand bid) cards)))))))) + +(define (card-number char) + (cond ((eq? char #\A) 12) + ((eq? char #\K) 11) + ((eq? char #\Q) 10) + ((eq? char #\J) 0) + ((eq? char #\T) 9) + (else (- (string->number (make-string 1 char)) + 1)))) + +(define (joker-transform type) + (define joker-num (vector-ref type 0)) + (vector-set! type 0 0) + (vector-sort! type >) + (vector-set! type 0 (+ joker-num (vector-ref type 0))) + type) + +(define (hand-type hand) + (define vec (make-vector 13 0)) + (let loop ((i 0)) + (if (>= i 5) + (vector->list (joker-transform vec)) + (let () + (define index (card-number (string-ref hand i))) + (vector-set! vec index (+ 1 (vector-ref vec index))) + (loop (+ i 1)))))) + +(define (hand-typelist hand1))) + (define h2 (map card-number (string->list hand2))) + (hand-type