# buch.R -rw-r--r-- 2.0 KiB View raw
                                                                                
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
71
72
73
74
75
76
#!/usr/bin/env Rscript

args <- commandArgs(TRUE)
if (length(args) < 1) {
	stop("usage: book.R page_count [max_pages]")
}

page_count <- as.numeric(args[1])
max_pages_per_day <- if (length(args) == 2) args[2] else 60
weekly_session_count <- 9 # 7 sessions per day +2 for extra weekend readings
week_count <- 1
while (page_count / (weekly_session_count * week_count) > max_pages_per_day) {
	week_count <- week_count + 1
}
pages_per_session <- round(page_count / (weekly_session_count * week_count))

woche <- c("MO", "DI", "MI", "DO", "FR", "SA", "SO")

weekly_session <- function(start) {
	pages <- c(
	seq(pages_per_session, (5 * pages_per_session),
		by = pages_per_session),
	6 * pages_per_session,
	9 * pages_per_session)

	return(pages + start)
}


cat(woche, "\n", sep="\t")
start <- 0
ideal_sessions <- numeric()
k <- 0
while (k < week_count) {
	current_week <- (weekly_session(start))
	ideal_sessions <- c(ideal_sessions, current_week)
	cat(current_week, "\n", sep="\t")
	start <- current_week[length(current_week)]
	k <- k + 1
}

actual_sessions <- numeric()
for (s in ideal_sessions) {
	cat(sprintf("Get to p.%s: ", s))
	# Rscripting is non-interactive, so you gotta do this to get input
	# https://thesquareplanet.com/blog/interactive-r-scripts/
	input <- readLines(file("stdin"), n = 1)
	# unlist comma input from here:
	# https://stackoverflow.com/a/11007431
	input <- as.numeric(unlist(strsplit(input, ",")))
	if (length(input) == 2) {
		input <- if (abs(s - input[1]) > abs(s - input[2])) input[2] else input[1]
		cat(input, "\n")
	}
	actual_sessions <- c(actual_sessions, input)
}

cat("SCHEDULE:\n")

i <- 0
last <- 999
for (tag in woche) {
	i <- i + 1
	daily_schedule <- sprintf("%s: pp. ", tag)
	j <- 0
	while (j < week_count) {
		index <- i + (7 * j)
		current <- actual_sessions[index]
		last <- if (index > 1) actual_sessions[index - 1] else 1
		daily_schedule <- paste(daily_schedule, sprintf("%s-%s", last, current), sep="")
		j <- j + 1
  		daily_schedule <- paste(daily_schedule, if (j != week_count) ", " else "\n", sep = "")
	}
	cat(daily_schedule)
}