-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathday-11.R
70 lines (56 loc) · 1.7 KB
/
day-11.R
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
count_flashes <- function(m) {
n_flashes <- 0
for (step in seq_len(100)) {
new_flashes <- flashes <- matrix(FALSE,
nrow = nrow(m),
ncol = ncol(m))
m <- m + 1
repeat {
new_flashes <- m > 9 & !flashes
flashes <- flashes | new_flashes
increment <-
shift(new_flashes, "up", FALSE) +
shift(new_flashes, "down", FALSE) +
shift(new_flashes, "left", FALSE) +
shift(new_flashes, "right", FALSE) +
shift(new_flashes, "upleft", FALSE) +
shift(new_flashes, "upright", FALSE) +
shift(new_flashes, "downleft", FALSE) +
shift(new_flashes, "downright", FALSE)
m <- m + increment
if (!any(new_flashes)) break
}
m[flashes] <- 0
n_flashes <- n_flashes + sum(flashes)
}
n_flashes
}
detect_synchronized <- function(m) {
step <- 1
while (TRUE) {
new_flashes <- flashes <- matrix(FALSE,
nrow = nrow(m),
ncol = ncol(m))
m <- m + 1
repeat {
new_flashes <- m > 9 & !flashes
flashes <- flashes | new_flashes
increment <-
shift(new_flashes, "up", FALSE) +
shift(new_flashes, "down", FALSE) +
shift(new_flashes, "left", FALSE) +
shift(new_flashes, "right", FALSE) +
shift(new_flashes, "upleft", FALSE) +
shift(new_flashes, "upright", FALSE) +
shift(new_flashes, "downleft", FALSE) +
shift(new_flashes, "downright", FALSE)
m <- m + increment
if (!any(new_flashes)) break
}
m[flashes] <- 0
if (all(flashes))
return(step)
else
step <- step + 1
}
}