d12
parent
b2b70dbc48
commit
2b0fdd766b
@ -0,0 +1,28 @@
|
|||||||
|
#lang reader "../aoc-lang.rkt"
|
||||||
|
(require graph)
|
||||||
|
(provide (rename-out [#%mb #%module-begin]))
|
||||||
|
|
||||||
|
(define-macro (#%mb (STARS) (NUM <-> . NUMS) ...)
|
||||||
|
#'(#%module-begin
|
||||||
|
(define g (unweighted-graph/undirected null))
|
||||||
|
(for-each (curry add-edge! g NUM) (list . NUMS)) ...
|
||||||
|
(if (eq? 'STARS '★)
|
||||||
|
(programs-in-group g 0)
|
||||||
|
(number-of-groups g (list NUM ...)))))
|
||||||
|
|
||||||
|
(define (programs-in-group g x) (length (group-of g x)))
|
||||||
|
|
||||||
|
(define (group-of g x)
|
||||||
|
(define-values (connects _) (dijkstra g x))
|
||||||
|
(for/list ([(k v) (in-hash connects)]
|
||||||
|
#:when (integer? v))
|
||||||
|
k))
|
||||||
|
|
||||||
|
(define (number-of-groups g nums)
|
||||||
|
(for/fold ([nums-seen null]
|
||||||
|
[group-count 0]
|
||||||
|
#:result group-count)
|
||||||
|
([num (in-list nums)]
|
||||||
|
#:unless (memv num nums-seen))
|
||||||
|
(values (append (group-of g num) nums-seen) (add1 group-count))))
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,8 @@
|
|||||||
|
#lang reader "main.rkt" ★ ; 6
|
||||||
|
0 <-> 2
|
||||||
|
1 <-> 1
|
||||||
|
2 <-> 0, 3, 4
|
||||||
|
3 <-> 2, 4
|
||||||
|
4 <-> 2, 3, 6
|
||||||
|
5 <-> 6
|
||||||
|
6 <-> 4, 5
|
@ -0,0 +1,8 @@
|
|||||||
|
#lang reader "main.rkt" ★★ ; 2
|
||||||
|
0 <-> 2
|
||||||
|
1 <-> 1
|
||||||
|
2 <-> 0, 3, 4
|
||||||
|
3 <-> 2, 4
|
||||||
|
4 <-> 2, 3, 6
|
||||||
|
5 <-> 6
|
||||||
|
6 <-> 4, 5
|
Reference in New Issue