Overview
| Comment: | Add Day 3 solutions and output |
|---|---|
| Downloads: | Tarball | ZIP archive | SQL archive |
| Timelines: | family | ancestors | descendants | both | trunk |
| Files: | files | file ages | folders |
| SHA3-256: |
445eb756e55d7daa90b41e4f10f56e6d |
| User & Date: | joel on 2018-12-03 20:29:36 |
| Other Links: | manifest | tags |
Context
|
2018-12-04
| ||
| 01:43 | Update README check-in: 1f136f user: joel tags: trunk | |
|
2018-12-03
| ||
| 20:29 | Add Day 3 solutions and output check-in: 445eb7 user: joel tags: trunk | |
| 20:27 | Add Day 3 input check-in: a68afe user: joel tags: trunk | |
Changes
Added day03-results.png version [a7f924].
cannot compute difference between binary files
Added day03.rkt version [30492b].
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 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 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
#lang racket
(require racket/draw rackunit)
(define input (file->lines "day03-input.txt"))
(define fabric-bmp (make-bitmap 1000 1000 #t))
(define fabric-dc (new bitmap-dc% [bitmap fabric-bmp]))
(define c (make-object color% 0 255 0 0.5))
(define pb (new brush% [color c]))
(define color-probe (make-object color%))
(send fabric-dc set-brush pb)
(send fabric-dc set-pen "white" 0 'transparent) ; don't draw outlines
;; Get the alpha value of pixel x y
(define (get-fabric-value x y)
(send fabric-dc get-pixel x y color-probe)
(send color-probe alpha))
;; Parse “claims” of the form "#1 @ 1,3: 4x4" into '(1 1 3 4 4)
(define (parse-claim str)
(map string->number (rest (regexp-match #px"#(\\d+) @ (\\d+),(\\d+): (\\d+)x(\\d+)" str))))
;; draw a particular claim onto the fabric map
(define (draw-claim l)
(send/apply fabric-dc draw-rectangle (rest l)))
;; Returns #t if a pixel's alpha value indicates it’s been painted on more than once
(define (is-overlap? v)
;; For some reason the actual alpha of a pixel that gets
;; painted with my brush exactly once comes out to this weird number
(> v 0.5019607843137255))
;; Count the number of pixels with overlap values
(define (count-overlap [startx 0] [starty 0] [width 1000] [height 1000])
(count is-overlap?
(for*/list ([x (in-range startx (+ startx width))]
[y (in-range starty (+ starty height))])
(get-fabric-value x y))))
(define (day03-part1)
(map draw-claim (map parse-claim input))
(count-overlap))
(module+ test
(check-equal? (day03-part1) 100595)) ; Correct answer for part 1
(define (claim-has-overlap? l)
(> (apply count-overlap (rest l)) 0))
(define (day03-part2)
(define answer
(for/first ([c (in-list (map parse-claim input))]
#:when (not (claim-has-overlap? c)))
c))
(highlight-claim answer)
(send fabric-bmp save-file "day03-results.png" 'png)
(first answer))
(module+ test
(check-equal? (day03-part2) 415)) ; Correct answer for part 2
;; Extra
(define (highlight-claim c)
(send fabric-dc set-brush "red" 'solid)
(draw-claim c))
|