-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathday08.red
53 lines (42 loc) · 1.13 KB
/
day08.red
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
Red []
registers: #()
highest-val: 0
; parse
digit: charset [#"0" - #"9"]
alpha: charset [#"a" - #"z"]
num: [0 1 "-" some digit]
update-registers: func [a b n m compare] [
if not b-val: registers/:b [b-val: 0]
m: to-integer m
if do reduce [b-val compare m] [
put registers a n
if n > highest-val [highest-val: n]
]
]
rule: [
copy a some alpha
[" inc " copy n num (n: to-integer n
if registers/:a [n: registers/:a + n])
| " dec " copy n num (n: negate to-integer n
if registers/:a [n: registers/:a + n])]
" if "
copy b some alpha
[" > " copy m num (update-registers a b n m '>)
| " < " copy m num (update-registers a b n m '<)
| " >= " copy m num (update-registers a b n m '>=)
| " <= " copy m num (update-registers a b n m '<=)
| " == " copy m num (update-registers a b n m '=)
| " != " copy m num (update-registers a b n m '<>)]
]
text: read/lines %../../resources/2017/day8
foreach line text [
parse line rule
]
max-val: 0
foreach [_ val] to-block registers [
if val > max-val [max-val: val]
]
print max-val
; 5215
print highest-val
; 6419