Compare commits
2 Commits
f259ef3441
...
becc8a3487
Author | SHA1 | Date |
---|---|---|
Érico Nogueira | becc8a3487 | |
Érico Nogueira | 87e6927028 |
|
@ -20,7 +20,7 @@
|
|||
(vector-ref (vector-ref sv y) x))
|
||||
|
||||
(define (new-pos x y ex ey)
|
||||
(cons (+ x (* h ex)) (+ y (* v ey))))
|
||||
(vector (+ x (* h ex)) (+ y (* v ey))))
|
||||
|
||||
(define (fix-value x y)
|
||||
(let*-values ([(ex x) (quotient/remainder x h)] [(ey y) (quotient/remainder y v)] [(val) (+ (access x y) ex ey)])
|
||||
|
@ -29,28 +29,28 @@
|
|||
val)))
|
||||
|
||||
(define g (weighted-graph/directed null))
|
||||
(match-let ([(cons h v) (new-pos h v (sub1 extra) (sub1 extra))])
|
||||
(match-let ([(vector h v) (new-pos h v (sub1 extra) (sub1 extra))])
|
||||
(for* ([x (in-range h)] [y (in-range v)])
|
||||
(let ([p (cons x y)])
|
||||
(let ([p (vector x y)])
|
||||
(when (> x 0)
|
||||
(add-directed-edge! g p (cons (sub1 x) y) (fix-value (sub1 x) y)))
|
||||
(add-directed-edge! g p (vector (sub1 x) y) (fix-value (sub1 x) y)))
|
||||
(when (> y 0)
|
||||
(add-directed-edge! g p (cons x (sub1 y)) (fix-value x (sub1 y))))
|
||||
(add-directed-edge! g p (vector x (sub1 y)) (fix-value x (sub1 y))))
|
||||
(when (< x (sub1 h))
|
||||
(add-directed-edge! g p (cons (add1 x) y) (fix-value (add1 x) y)))
|
||||
(add-directed-edge! g p (vector (add1 x) y) (fix-value (add1 x) y)))
|
||||
(when (< y (sub1 v))
|
||||
(add-directed-edge! g p (cons x (add1 y)) (fix-value x (add1 y))))))
|
||||
(let-values ([(vs ed) (dijkstra g (cons 0 0))] [(pos) (cons (sub1 h) (sub1 v))])
|
||||
(add-directed-edge! g p (vector x (add1 y)) (fix-value x (add1 y))))))
|
||||
(let-values ([(vs ed) (dijkstra g (vector 0 0))] [(pos) (vector (sub1 h) (sub1 v))])
|
||||
(define (explore pos)
|
||||
(display pos)
|
||||
(display "\n")
|
||||
(unless (equal? pos (cons 0 0)) (explore (hash-ref ed pos))))
|
||||
(unless (equal? pos (vector 0 0)) (explore (hash-ref ed pos))))
|
||||
;(explore pos)
|
||||
(hash-ref vs pos)))
|
||||
|
||||
; print expanded grid
|
||||
(when #f
|
||||
(match-let ([(cons h v) (new-pos h v (sub1 extra) (sub1 extra))])
|
||||
(match-let ([(vector h v) (new-pos h v (sub1 extra) (sub1 extra))])
|
||||
(for* ([y (in-range v)] [x (in-range h)])
|
||||
(when (= x 0)
|
||||
(display "\n"))
|
||||
|
|
|
@ -0,0 +1,95 @@
|
|||
#lang racket/base
|
||||
(require racket/string)
|
||||
(require racket/match)
|
||||
|
||||
(define slist
|
||||
(let-values ([(in out) (make-pipe)])
|
||||
(for/list ([t (in-lines)])
|
||||
(display (string-replace t "," " . ") out)
|
||||
(read in))))
|
||||
|
||||
(define (reduce-number v)
|
||||
(define (get-explosion vl depth position)
|
||||
(define explode (= depth 4))
|
||||
(define (recurse fn p)
|
||||
(let* ([nc (fn vl)]
|
||||
[np (add1 p)])
|
||||
(if (pair? nc)
|
||||
(get-explosion nc (add1 depth) p)
|
||||
(begin
|
||||
;(printf "nc np ~a ~a~n" nc np)
|
||||
(values explode np nc (cdr vl))))))
|
||||
(match/values (recurse car position)
|
||||
[(#t p a b) (values #t p a b)]
|
||||
[(#f p a b) (recurse cdr p)]))
|
||||
|
||||
(define-values (explode where-explode v1 v2) (get-explosion v 0 0))
|
||||
;(printf "explosion ~a ~a~n" explode where-explode)
|
||||
|
||||
(define (traverse-number vl position)
|
||||
;(printf "~a ~a~n" vl position)
|
||||
(define (recurse fn p)
|
||||
(let* ([nc (fn vl)]
|
||||
[np (add1 p)])
|
||||
;(printf "pair ~a~n" nc)
|
||||
(if (pair? nc)
|
||||
(traverse-number nc p)
|
||||
(values
|
||||
(if (not explode)
|
||||
nc
|
||||
(if (= (- where-explode 2) p)
|
||||
(+ v1 nc)
|
||||
(if (= (+ 1 where-explode) p)
|
||||
(+ v2 nc)
|
||||
nc)))
|
||||
np))))
|
||||
|
||||
(if (and explode (not (pair? (car vl))) (not (pair? (cdr vl))) (= (add1 position) where-explode))
|
||||
(values 0 (+ 2 position))
|
||||
(let*-values ([(r p) (recurse car position)]
|
||||
[(l p) (recurse cdr p)])
|
||||
;(printf "new cons ~a ~a ~n" r l)
|
||||
(values (cons r l) p))))
|
||||
|
||||
(define can-do #t)
|
||||
(define (split-number vl)
|
||||
(define (recurse fn)
|
||||
(let ([nc (fn vl)])
|
||||
(if (pair? nc)
|
||||
(split-number nc)
|
||||
(if (and can-do (>= nc 10))
|
||||
(let ([rdiv (/ nc 2)])
|
||||
(set! can-do #f)
|
||||
(cons (floor rdiv) (ceiling rdiv)))
|
||||
nc))))
|
||||
(cons
|
||||
(recurse car)
|
||||
(recurse cdr)))
|
||||
|
||||
(let-values ([(nv p) (traverse-number v 0)])
|
||||
(if (equal? nv v)
|
||||
(let ([nv (split-number v)])
|
||||
(if (equal? nv v)
|
||||
v
|
||||
(reduce-number nv)))
|
||||
(reduce-number nv))))
|
||||
|
||||
(define (add-values v l)
|
||||
(if (null? l)
|
||||
v
|
||||
(add-values (reduce-number (cons v (car l))) (cdr l))))
|
||||
|
||||
(define (magnitude-number v)
|
||||
(define (recurse fn)
|
||||
(let ([nc (fn v)])
|
||||
(if (pair? nc)
|
||||
(magnitude-number nc)
|
||||
nc)))
|
||||
(+ (* 3 (recurse car)) (* 2 (recurse cdr))))
|
||||
|
||||
; part 1
|
||||
(magnitude-number (add-values (car slist) (cdr slist)))
|
||||
|
||||
; part 2
|
||||
(apply max (for*/list ([v1 slist] [v2 slist] #:unless (equal? v1 v2))
|
||||
(magnitude-number (add-values v1 (list v2)))))
|
|
@ -0,0 +1,5 @@
|
|||
[1 . 1]
|
||||
[2 . 2]
|
||||
[3 . 3]
|
||||
[4 . 4]
|
||||
[5 . 5]
|
|
@ -0,0 +1,6 @@
|
|||
[1,1]
|
||||
[2,2]
|
||||
[3,3]
|
||||
[4,4]
|
||||
[5,5]
|
||||
[6,6]
|
|
@ -0,0 +1,10 @@
|
|||
[[[0,[4,5]],[0,0]],[[[4,5],[2,6]],[9,5]]]
|
||||
[7,[[[3,7],[4,3]],[[6,3],[8,8]]]]
|
||||
[[2,[[0,8],[3,4]]],[[[6,7],1],[7,[1,6]]]]
|
||||
[[[[2,4],7],[6,[0,5]]],[[[6,8],[2,8]],[[2,1],[4,5]]]]
|
||||
[7,[5,[[3,8],[1,4]]]]
|
||||
[[2,[2,2]],[8,[8,1]]]
|
||||
[2,9]
|
||||
[1,[[[9,3],9],[[9,0],[0,7]]]]
|
||||
[[[5,[7,4]],7],1]
|
||||
[[[[4,2],2],6],[8,7]]
|
|
@ -0,0 +1,2 @@
|
|||
[[[[4,3],4],4],[7,[[8,4],9]]]
|
||||
[1,1]
|
|
@ -0,0 +1,10 @@
|
|||
[[[0,[5,8]],[[1,7],[9,6]]],[[4,[1,2]],[[1,4],2]]]
|
||||
[[[5,[2,8]],4],[5,[[9,9],0]]]
|
||||
[6,[[[6,2],[5,6]],[[7,6],[4,7]]]]
|
||||
[[[6,[0,7]],[0,9]],[4,[9,[9,0]]]]
|
||||
[[[7,[6,4]],[3,[1,3]]],[[[5,5],1],9]]
|
||||
[[6,[[7,3],[3,2]]],[[[3,8],[5,7]],4]]
|
||||
[[[[5,4],[7,7]],8],[[8,3],8]]
|
||||
[[9,3],[[9,9],[6,[4,9]]]]
|
||||
[[2,[[7,7],7]],[[5,8],[[9,3],[0,2]]]]
|
||||
[[[[5,2],5],[8,[3,7]]],[[5,[7,5]],[4,4]]]
|
|
@ -0,0 +1,100 @@
|
|||
[[[7,1],2],3]
|
||||
[[1,7],7]
|
||||
[[6,8],[[6,[3,6]],[0,5]]]
|
||||
[[[[2,1],8],[[9,4],8]],[[6,5],4]]
|
||||
[[1,[[3,8],[9,1]]],[[9,1],[[1,7],0]]]
|
||||
[[[7,4],[8,[7,6]]],[9,[[6,3],[7,8]]]]
|
||||
[[[[5,0],1],4],[[5,[6,9]],[[4,3],2]]]
|
||||
[[[3,8],8],[[[3,2],8],[9,[0,5]]]]
|
||||
[[[[5,8],[3,9]],[7,[1,4]]],[6,1]]
|
||||
[3,[[[3,3],9],[0,7]]]
|
||||
[[[6,9],1],[[0,[8,4]],[[2,2],9]]]
|
||||
[[[[6,2],3],[0,4]],3]
|
||||
[[[[3,8],7],[[7,4],0]],[2,[5,[2,8]]]]
|
||||
[[4,[9,[8,0]]],[[1,5],[[9,3],8]]]
|
||||
[[[8,5],[3,[1,4]]],[[6,[8,0]],[[2,7],[2,6]]]]
|
||||
[4,7]
|
||||
[[[[2,3],0],[[1,9],[4,1]]],[[1,[4,2]],3]]
|
||||
[[[8,[5,3]],[[5,7],7]],[[5,6],[6,4]]]
|
||||
[[[[2,4],1],[8,6]],[[6,5],[0,[9,1]]]]
|
||||
[[[1,[5,7]],8],[[[9,1],9],[[1,2],4]]]
|
||||
[[[[5,5],[4,0]],[4,[9,6]]],[[[2,1],1],7]]
|
||||
[[[[1,9],[9,5]],[[5,0],[3,1]]],[[[6,7],[8,8]],[[7,3],0]]]
|
||||
[[6,[[6,7],[9,0]]],[[7,7],[[0,3],0]]]
|
||||
[[0,6],[5,2]]
|
||||
[[[[5,8],3],[[9,0],8]],[7,4]]
|
||||
[[0,[[9,9],[9,4]]],[[[1,1],2],[1,[6,7]]]]
|
||||
[0,[[5,7],2]]
|
||||
[[2,[[5,4],6]],[1,[8,[7,6]]]]
|
||||
[[[1,7],[8,[5,8]]],[[[2,1],[9,1]],[[5,6],9]]]
|
||||
[[1,8],[9,[4,3]]]
|
||||
[5,[2,[[5,5],9]]]
|
||||
[3,[8,[[2,8],[4,8]]]]
|
||||
[[[4,9],[[5,5],0]],[9,[8,[3,0]]]]
|
||||
[[[2,[6,4]],[8,[9,9]]],[[[0,4],8],[3,[9,7]]]]
|
||||
[[[[8,1],[2,4]],3],[1,[[3,3],[6,3]]]]
|
||||
[[[8,[7,3]],[1,8]],2]
|
||||
[[8,[8,4]],[[6,[4,7]],[3,0]]]
|
||||
[[[[4,6],[8,3]],9],[9,[[8,9],[0,9]]]]
|
||||
[[3,[[2,7],[4,4]]],2]
|
||||
[8,[[[8,6],2],[[8,9],6]]]
|
||||
[[[[5,7],[2,0]],[[0,2],[5,5]]],[[[8,5],5],[[1,3],[2,3]]]]
|
||||
[[1,6],[[9,8],[9,[4,9]]]]
|
||||
[[[[1,4],5],9],[4,[6,8]]]
|
||||
[[[[6,4],[9,0]],[[1,4],[6,6]]],[[9,[2,8]],2]]
|
||||
[[[[5,9],2],[[0,0],5]],[2,1]]
|
||||
[6,[[3,2],[[3,0],0]]]
|
||||
[[[[7,4],1],[[4,1],1]],[[3,4],4]]
|
||||
[3,[9,[9,7]]]
|
||||
[[[3,[3,3]],[0,3]],[1,[1,8]]]
|
||||
[[8,[8,7]],[[9,2],5]]
|
||||
[[[1,[3,9]],[5,9]],[1,5]]
|
||||
[[[[7,8],[9,7]],9],[[[9,2],[2,2]],[[9,6],8]]]
|
||||
[4,[[3,5],[[1,3],[5,5]]]]
|
||||
[7,[[[0,1],2],[[3,6],5]]]
|
||||
[0,[[[2,4],[3,4]],[8,9]]]
|
||||
[[1,[[6,8],1]],[8,0]]
|
||||
[1,1]
|
||||
[7,0]
|
||||
[[1,2],[[0,[8,3]],[[4,5],[9,7]]]]
|
||||
[[[[2,3],[5,9]],[7,[1,9]]],2]
|
||||
[[3,5],[[9,7],9]]
|
||||
[[[[6,9],[4,8]],6],0]
|
||||
[[[[2,4],[3,9]],[2,[9,4]]],[[[8,9],[3,1]],7]]
|
||||
[[5,[[0,2],4]],[[[9,9],[7,4]],[1,5]]]
|
||||
[3,[6,[[5,4],1]]]
|
||||
[[[2,[2,7]],2],[[4,[7,3]],5]]
|
||||
[7,[[0,[2,0]],[[9,4],6]]]
|
||||
[[4,[3,[6,2]]],9]
|
||||
[[[0,[5,6]],[8,3]],[[7,9],[0,[9,6]]]]
|
||||
[8,[[6,4],[4,8]]]
|
||||
[[[8,[6,8]],[5,[7,3]]],[[[7,8],5],2]]
|
||||
[[[[3,5],[4,7]],5],[[0,0],[9,[1,9]]]]
|
||||
[[7,[[1,5],9]],[[[3,4],[1,7]],[1,[7,9]]]]
|
||||
[[0,[3,[4,1]]],[[[2,9],3],[4,[0,8]]]]
|
||||
[[[8,[1,6]],[[0,1],7]],[[[1,1],[0,2]],[[9,4],[9,6]]]]
|
||||
[[[[6,7],0],[[6,8],9]],[[1,[6,6]],[[2,9],[4,7]]]]
|
||||
[[[[5,0],[1,2]],[1,[5,1]]],[[0,4],1]]
|
||||
[[9,1],6]
|
||||
[[7,2],[[[5,5],[4,3]],6]]
|
||||
[[9,[[0,6],9]],[[7,9],[7,1]]]
|
||||
[[[[7,3],[6,4]],[[2,5],[7,2]]],[[[4,4],0],[[9,5],[8,5]]]]
|
||||
[[[[8,8],[6,4]],[[0,2],[9,5]]],2]
|
||||
[[[[3,0],7],[9,2]],[[0,[8,6]],[[7,2],[8,5]]]]
|
||||
[[0,6],[1,[9,[4,3]]]]
|
||||
[[0,8],[[[5,0],6],[5,[2,0]]]]
|
||||
[[[[7,1],[0,3]],[[9,9],[3,5]]],[4,[8,4]]]
|
||||
[7,[[1,[3,7]],[[3,4],[2,3]]]]
|
||||
[[[[2,2],[4,8]],[[3,4],0]],[[[1,5],[2,8]],5]]
|
||||
[6,[[[9,1],5],[9,9]]]
|
||||
[[[2,[8,6]],[[9,9],[6,3]]],4]
|
||||
[[[[3,2],[9,3]],8],9]
|
||||
[[[[6,9],0],[[0,6],[1,3]]],[[5,[9,8]],[[1,5],[3,7]]]]
|
||||
[[2,[4,[2,3]]],[[[6,0],[7,2]],3]]
|
||||
[[[[8,3],4],[6,[8,8]]],4]
|
||||
[[[9,8],5],[[[4,4],[6,3]],[8,6]]]
|
||||
[9,2]
|
||||
[[[3,4],[4,[7,0]]],[0,[4,[6,9]]]]
|
||||
[[[0,8],[3,9]],[[[3,8],6],[[9,3],6]]]
|
||||
[[[[5,6],[0,3]],1],[8,[2,9]]]
|
||||
[[[[4,2],8],[[9,3],7]],0]
|
Loading…
Reference in New Issue