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.
This repo is archived. You can view files and clone it, but cannot push or open issues/pull-requests.
aoc-racket/2018/10.rkt

65 lines
1.6 KiB
Racket

#lang debug br
(struct pt (x y xv yv) #:transparent #:mutable)
(define pts
(for/list ([ln (in-lines (open-input-file "10.txt"))])
(apply pt
(map string->number (regexp-match* #px"-?\\d+" ln)))))
(define (inc pt)
(set-pt-x! pt (+ (pt-x pt) (pt-xv pt)))
(set-pt-y! pt (+ (pt-y pt) (pt-yv pt)))
pt)
(define (normalize pts)
(define xmin (apply min (map pt-x pts)))
(define ymin (apply min (map pt-y pts)))
(for ([pt (in-list pts)])
(set-pt-x! pt (- (pt-x pt) xmin))
(set-pt-y! pt (- (pt-y pt) ymin))))
(define (fonted? pts)
(define ys (map pt-y pts))
(for/and ([y (in-list ys)])
(<= 4 y 11)))
(require racket/draw racket/gui)
(define (print-pts pts)
(define xmax (apply max (map pt-x pts)))
(define ymax (apply max (map pt-y pts)))
(define prs (map cons (map pt-x pts) (map pt-y pts)))
(when (= #R (- xmax (apply min (map pt-x pts))) 61)
#R xmax #R ymax
(define target (make-bitmap (+ 3 xmax) (+ 3 ymax)))
(define dc (new bitmap-dc% [bitmap target]))
(for* ([y (in-range (+ 3 ymax))]
[x (in-range (+ 3 xmax))]
#:when (member (cons x y) prs))
(send dc set-pixel x y (make-object color% "DarkSlateGray")))
(make-object image-snip% target)))
(let loop ([idx 0][pts pts])
(normalize pts)
(display idx)
(display (print-pts pts))
(if (fonted? pts)
(display (print-pts pts))
(loop (add1 idx) (map inc pts))))
#;(define ()
)
#;()
#;(define (★★)
)
#;(★★)
#;(module+ test
(require rackunit)
(check-equal? (time ()) 454)
(check-equal? (time (★★)) 566))