master
Matthew Butterick 6 years ago
parent a2d11e5688
commit d11b94c403

@ -0,0 +1,43 @@
#lang br/quicklang
(require "../helper.rkt")
(provide read-syntax (rename-out [#%mb #%module-begin]) ★★)
(define (read-syntax path port)
(define lines (port->lines port))
(strip-context #`(module mod "main.rkt"
#,@(for/list ([datum (in-port read (open-input-string (car lines)))])
datum)
#,@(map (λ (ln) (apply cons (map string->number (string-split ln "/")))) (cdr lines)))))
(define-macro (#%mb STARS DOMS ...)
#'(#%module-begin
(time (STARS '(DOMS ...)))))
(define (find-dominoes-with-val dominoes val)
(filter (λ (d) (or (= (car d) val) (= (cdr d) val))) dominoes))
(define (other-val-on-domino dom val)
((if (= (car dom) val) cdr car) dom))
(define (remove-dom doms dom)
(filter-not (λ (d) (equal? d dom)) doms))
(define (bridges dominoes [current-val 0] [current-bridge null])
(define doms (find-dominoes-with-val dominoes current-val))
(if (null? doms)
(list (flatten current-bridge))
(append-map (λ (dom) (bridges (remove-dom dominoes dom)
(other-val-on-domino dom current-val)
(cons dom current-bridge))) doms)))
(define (strongest bridges)
(apply max (map (λ (br) (apply + br)) bridges)))
(define ( dominoes)
(strongest (bridges dominoes)))
(define (★★ dominoes)
(define brs (bridges dominoes))
(define maxlen (apply max (map length brs)))
(strongest (filter (λ (b) (= maxlen (length b))) brs)))

@ -0,0 +1,58 @@
#lang reader "main.rkt" ; 1868
25/13
4/43
42/42
39/40
17/18
30/7
12/12
32/28
9/28
1/1
16/7
47/43
34/16
39/36
6/4
3/2
10/49
46/50
18/25
2/23
3/21
5/24
46/26
50/19
26/41
1/50
47/41
39/50
12/14
11/19
28/2
38/47
5/5
38/34
39/39
17/34
42/16
32/23
13/21
28/6
6/20
1/30
44/21
11/28
14/17
33/33
17/43
31/13
11/21
31/39
0/9
13/50
10/14
16/10
3/24
7/0
50/50

@ -0,0 +1,58 @@
#lang reader "main.rkt" ★★ ; 1841
25/13
4/43
42/42
39/40
17/18
30/7
12/12
32/28
9/28
1/1
16/7
47/43
34/16
39/36
6/4
3/2
10/49
46/50
18/25
2/23
3/21
5/24
46/26
50/19
26/41
1/50
47/41
39/50
12/14
11/19
28/2
38/47
5/5
38/34
39/39
17/34
42/16
32/23
13/21
28/6
6/20
1/30
44/21
11/28
14/17
33/33
17/43
31/13
11/21
31/39
0/9
13/50
10/14
16/10
3/24
7/0
50/50

@ -0,0 +1,9 @@
#lang reader "main.rkt" ; 31
0/2
2/2
2/3
3/4
3/5
0/1
10/1
9/10

@ -0,0 +1,9 @@
#lang reader "main.rkt" ★★ ; 19
0/2
2/2
2/3
3/4
3/5
0/1
10/1
9/10