-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path03-backtracking.R
63 lines (50 loc) · 1.54 KB
/
03-backtracking.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
library(tidyverse)
# Task 3------------------------------------------------------------------------
# 1) Filter collatz_df to retain starting integers that exhibit backtracking in their seq
has_backtracking <- function(seq) {
if (length(seq) <= 2) {
return(FALSE)
}
for (i in 2:(length(seq) - 1)) {
if (seq[i] < seq[1] && seq[i + 1] > seq[1]) {
return(TRUE)
}
}
return(FALSE)
}
backtracks_df <- collatz_df %>%
filter(sapply(seq, has_backtracking))
# 2) What is the most frequently occurring number of times they go above their starting integer?
count_backtrack <- function(seq) {
sum(seq > seq[1])
}
mode_backtrack <- backtracks_df %>%
mutate( backtrack_counts = sapply(seq, count_backtrack)) %>%
count(backtrack_counts) %>%
arrange(desc(n)) %>%
pull(backtrack_counts) %>%
first()
# 3) What is the maximum value reached after the first backtrack for these sequences?
first_backtrack <- function(seq) {
start <- seq[1]
first <- start
reached_backtrack <- FALSE
for (i in seq) {
if (reached_backtrack && i > first) {
first <- i
}
if (i < start) {
reached_backtrack <- TRUE
}
}
return(first)
}
max_after_backtrack <- backtracks_df %>%
mutate(max_after_backtrack = sapply(seq, first_backtrack)) %>%
pull(max_after_backtrack)
# 4) Are backtracking sequences more common among even or odd starting integers?
# Give the frequency counts for even and odd backtracking integers
even_odd_backtrack <- backtracks_df %>%
group_by(parity) %>%
summarise(frequency = n()) %>%
pull(2)