-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathday11.rkt
51 lines (40 loc) · 1.29 KB
/
day11.rkt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#lang racket
(require threading)
(define (power-level x y)
(~> serial
(+ (* (+ x 10) y))
(* (+ x 10))
(quotient 100)
(modulo 10)
(- 5)))
(define (square-sum grid x y [size 3])
(- (hash-ref grid (list x y) 0)
(hash-ref grid (list x (- y size)) 0)
(hash-ref grid (list (- x size) y) 0)
(- (hash-ref grid (list (- x size) (- y size)) 0))))
(define (create-grid)
(define grid (make-hash))
(for* ([x (in-inclusive-range 1 grid-size)]
[y (in-inclusive-range 1 grid-size)])
(hash-set! grid (list x y) (- (power-level x y) (square-sum grid x y 1))))
grid)
(define (most-powerful grid [size 3])
(for*/fold ([largest '(0 0 0 0)])
([x (in-inclusive-range size grid-size)]
[y (in-inclusive-range size grid-size)])
(define power (square-sum grid x y size))
(if (> power (last largest))
(list (- x (sub1 size)) (- y (sub1 size)) size power)
largest)))
(define (most-powerful-any-size grid)
(for/fold ([largest '(0 0 0 0)])
([size (in-range 2 grid-size)])
(define res (most-powerful grid size))
(if (> (last res) (last largest))
res
largest)))
(define serial 4172)
(define grid-size 300)
(define grid (create-grid))
(take (most-powerful grid) 2)
(take (most-powerful-any-size grid) 3)