Skip to content

Commit 75de020

Browse files
committed
racket day03
1 parent 94be4ba commit 75de020

File tree

2 files changed

+77
-0
lines changed

2 files changed

+77
-0
lines changed

inputs/03-test.txt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
00100
2+
11110
3+
10110
4+
10111
5+
10101
6+
01111
7+
00111
8+
11100
9+
10000
10+
11001
11+
00010
12+
01010

racket/day03.rkt

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
#lang racket
2+
3+
(require "aoc.rkt" threading)
4+
5+
6+
(define (split-out data col)
7+
(partition
8+
(λ (row) (char=? #\1 (list-ref row col)))
9+
data))
10+
11+
(define (compute nrs)
12+
(for/sum ([(n ex) (in-indexed nrs)])
13+
(* n (expt 2 ex))))
14+
15+
(define (part-1 data)
16+
(define (opposite val)
17+
(- 1 val))
18+
(define (most-common-bit pos data)
19+
(define-values (ones zeros) (split-out data pos))
20+
(if (> (length zeros) (length ones)) 0 1))
21+
(for/fold ([gamma '()]
22+
#:result (* (compute gamma) (compute (map opposite gamma))))
23+
([col (in-range (length (first data)))])
24+
(cons (most-common-bit col data) gamma)))
25+
26+
27+
(define (filter-out most-common? data)
28+
(for/fold ([acc data]
29+
#:result (first acc))
30+
([col (in-range (length (first data)))]
31+
#:break (= 1 (length acc)))
32+
(define-values (ones zeros) (split-out acc col))
33+
(define more-zeros? (> (length zeros) (length ones)))
34+
(if (xor most-common? more-zeros?) ones zeros)))
35+
36+
(define (part-2 data)
37+
(for/fold ([acc 1])
38+
([most-common? '(#t #f)])
39+
(~>> data
40+
(filter-out most-common?)
41+
(map (λ (c) (if (char=? #\1 c) 1 0)))
42+
reverse
43+
compute
44+
(* acc))))
45+
46+
47+
(define numbers (read-input 3 'list))
48+
(part-1 numbers)
49+
(part-2 numbers)
50+
51+
52+
53+
54+
55+
56+
57+
58+
59+
60+
61+
(module+ test
62+
(require rackunit)
63+
(define numbers (read-input "03-test" 'list))
64+
(check-equal? (part-1 numbers) 198)
65+
(check-equal? (part-2 numbers) 230))

0 commit comments

Comments
 (0)