blob: 9c1941d637520029f7a38d16b6b4090e72988e78 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
#lang racket
(define/contract (is-path-crossing path)
(-> string? boolean?)
(for/fold ([current-x 0]
[current-y 0]
[trail (set '(0 0))]
[check #false]
#:result check)
([step (in-list (string->list path))]
#:break check)
(let*-values
([(new-x new-y)
(case step
[(#\N) (values current-x (add1 current-y))]
[(#\S) (values current-x (sub1 current-y))]
[(#\E) (values (add1 current-x) current-y)]
[(#\W) (values (sub1 current-x) current-y)])]
[(new-trail-point) (list new-x new-y)])
(cond [(set-member? trail new-trail-point)
(values void void void #true)]
[else
(values new-x
new-y
(set-add trail new-trail-point)
#false)]))))
|