aboutsummaryrefslogtreecommitdiff
path: root/racket/aoc2015/day-02/day-02.rkt
diff options
context:
space:
mode:
Diffstat (limited to 'racket/aoc2015/day-02/day-02.rkt')
-rw-r--r--racket/aoc2015/day-02/day-02.rkt26
1 files changed, 26 insertions, 0 deletions
diff --git a/racket/aoc2015/day-02/day-02.rkt b/racket/aoc2015/day-02/day-02.rkt
new file mode 100644
index 0000000..579fd00
--- /dev/null
+++ b/racket/aoc2015/day-02/day-02.rkt
@@ -0,0 +1,26 @@
+#lang racket
+(require "../../jj-aoc.rkt"
+ threading
+ racket/struct)
+
+(struct present (l w h) #:transparent)
+
+(define presents
+ (for/list ([size-string (in-lines (open-day 2 2015))])
+ (~> size-string (string-split "x") (map string->number _) (apply present _))))
+
+;; part 1
+(define (paper-area p)
+ (define main-area (~> p struct->list (combinations 2) (map (λ~> (apply * 2 _)) _) (apply + _)))
+ (define slack-area (~> p struct->list (sort <) (take 2) (apply * _)))
+ (+ main-area slack-area))
+
+(for/sum ([p (in-list presents)]) (paper-area p))
+
+;; part 2
+(define (ribbon-length p)
+ (define ribbon-around-box (~> p struct->list (sort <) (take 2) (map (λ~> (* 2)) _) (apply + _)))
+ (define ribbon-for-bow (~> p struct->list (apply * _)))
+ (+ ribbon-around-box ribbon-for-bow))
+
+(for/sum ([p (in-list presents)]) (ribbon-length p))