46 lines
1.1 KiB
Racket
46 lines
1.1 KiB
Racket
|
#lang curly-fn racket
|
||
|
|
||
|
(require "scripts/aoc.rkt")
|
||
|
|
||
|
;; solution for day 6
|
||
|
|
||
|
(define (do-race total-time hold-time)
|
||
|
(define rem-time (- total-time hold-time))
|
||
|
(* rem-time hold-time))
|
||
|
|
||
|
(define (part1 input)
|
||
|
(apply
|
||
|
*
|
||
|
(for/list ([time (in-list (first input))] [dist (in-list (second input))])
|
||
|
(for/fold ([cnt 0]) ([hold (in-range time)])
|
||
|
(define res (do-race time hold))
|
||
|
(if (> res dist)
|
||
|
(add1 cnt)
|
||
|
cnt)))))
|
||
|
|
||
|
(define (cvt l)
|
||
|
(string->number (apply string-append (map number->string l))))
|
||
|
|
||
|
(define (part2 input)
|
||
|
(define time (cvt (first input)))
|
||
|
(define dist (cvt (second input)))
|
||
|
(for/fold ([cnt 0]) ([hold (in-range time)])
|
||
|
(define res (do-race time hold))
|
||
|
(if (> res dist)
|
||
|
(add1 cnt)
|
||
|
cnt)))
|
||
|
|
||
|
(define (parse fname)
|
||
|
(match-define (list time-str dist-str) (file->lines fname))
|
||
|
(list (map string->number (rest (string-split time-str)))
|
||
|
(map string->number (rest (string-split dist-str)))))
|
||
|
|
||
|
; (dbg (part1 (parse "inputs/6-test1")))
|
||
|
; (error)
|
||
|
|
||
|
(module+ main
|
||
|
(define input (parse "inputs/6"))
|
||
|
(answer 6 1 (time (part1 input)))
|
||
|
(answer 6 2 (time (part2 input)))
|
||
|
(displayln "meow"))
|