blob: c24cb4959f88c0f648a0b3d90c9080424d7006ad (
plain)
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
|
#lang racket
(require "./05a_grammar.rkt")
(define ventCounts (make-hash))
(define (digit x)
x)
(define (number . DIGITS)
(string->number (foldr string-append "" DIGITS)))
(define (coord a _a b)
(list a b))
(define (line c1 _b _c _d _e c2)
(define steps (max (abs (- (car c2) (car c1)))
(abs (- (second c2) (second c1)))))
(define mx (/ (- (car c2) (car c1)) steps))
(define my (/ (- (second c2) (second c1)) steps))
(cond [(or (= 0 mx) (= 0 my)) (for ([s (+ 1 steps)])
(define v (list (+ (car c1) (* mx s)) (+ (second c1) (* my s))))
(hash-set! ventCounts v (+ 1 (hash-ref ventCounts v 0))))]
[else 0]))
(define (vents l _a . ls)
(cond [(null? ls) l]
[else (cons l (apply vents ls))]))
(define-namespace-anchor anc)
(define ns (namespace-anchor->namespace anc))
(define parsed (parse-to-datum (file->string "./input")))
(void (eval parsed ns))
(length (filter (curry <= 2) (hash-values ventCounts)))
|