You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
35 lines
904 B
Racket
35 lines
904 B
Racket
#lang debug br
|
|
(require sugar/cache)
|
|
|
|
(define (hundreds-digit x)
|
|
(quotient (modulo x 1000) 100))
|
|
|
|
(define current-serial (make-parameter 0))
|
|
|
|
(define/caching (power-at x y)
|
|
(define rack-id (+ x 10))
|
|
(- (hundreds-digit (* (+ (* rack-id y) (current-serial)) rack-id)) 5))
|
|
|
|
(define (grid-scores size-min [size-max size-min])
|
|
(for*/list ([side (in-range size-min (add1 size-max))]
|
|
[x (in-range 1 (- 301 side))]
|
|
[y (in-range 1 (- 301 side))])
|
|
(list x y
|
|
(for*/sum ([x (in-range x (+ side x))]
|
|
[y (in-range y (+ side y))])
|
|
(power-at x y)))))
|
|
|
|
(define (★)
|
|
(parameterize ([current-serial 7803])
|
|
(take (argmax third (grid-scores 3)) 2)))
|
|
|
|
#;(grid-scores 1 300)
|
|
|
|
#;(define (★★)
|
|
)
|
|
#;(★★)
|
|
|
|
(module+ test
|
|
(require rackunit)
|
|
#;(check-equal? (time (★)) '(20 51))
|
|
#;(check-equal? (time (★★)) _)) |