Aloha, today we are going to fold up the manual, which allows us to use the thermal device.
#manual
mat <- as.matrix(read.csv(file = "day_thirteen_paper", header = FALSE))
dot_mat <- matrix(data = NA, ncol = max(mat[, 1] + 1), nrow = max(mat[, 2] + 1))
dot_mat[cbind(mat[, 2] + 1 , mat[, 1] + 1)] <- 1
#instructions
instructions <- read.csv(file = "day_thirteen_instructions", sep = " ", header = FALSE)
instructions <- instructions[["V3"]]
instructions <- strsplit(instructions, split = "=")
instructions <- lapply(instructions, function(x) {
return(data.frame("axis" = x[1], "value" = as.integer(x[2]) + 1))
})
Next we define a function, which folds the transparent manual, given an axis and the position.
FoldMatrix <- function(m, ax_is = "y", value) {
if(ax_is == "y") {
#fold y
y <- value
y_y <- min(max(seq(nrow(m) - y)), max(y - seq(y)))
where_one <- m[y + seq(y_y), ] == 1
m[y - seq(y_y), ][where_one] <- 1
m <- m[-c(y : nrow(m)), ]
} else {
y <- value
y_y <- min(max(seq(ncol(m) - y)), max(y - seq(y)))
where_one <- m[, y + seq(y_y)] == 1
m[, y - seq(y_y)][where_one] <- 1
m <- m[, -c(y : ncol(m))]
}
return(m)
}
Now we fold the paper given the instruction set.
for(i in seq(instructions)){
ins_set <- instructions[[i]]
dot_mat <- FoldMatrix(dot_mat, ax_is = ins_set[, 1], value = ins_set[, 2])
print(sum(dot_mat, na.rm = TRUE))
}
## [1] 678
## [1] 559
## [1] 462
## [1] 383
## [1] 316
## [1] 269
## [1] 224
## [1] 188
## [1] 158
## [1] 137
## [1] 113
## [1] 95
dot_mat
## [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14]
## [1,] 1 1 1 1 NA NA 1 1 NA NA 1 1 1 1
## [2,] 1 NA NA NA NA 1 NA NA 1 NA 1 NA NA NA
## [3,] 1 1 1 NA NA 1 NA NA NA NA 1 1 1 NA
## [4,] 1 NA NA NA NA 1 NA NA NA NA 1 NA NA NA
## [5,] 1 NA NA NA NA 1 NA NA 1 NA 1 NA NA NA
## [6,] 1 1 1 1 NA NA 1 1 NA NA 1 NA NA NA
## [,15] [,16] [,17] [,18] [,19] [,20] [,21] [,22] [,23] [,24] [,25] [,26]
## [1,] NA 1 NA NA 1 NA 1 NA NA NA NA 1
## [2,] NA 1 NA NA 1 NA 1 NA NA NA NA 1
## [3,] NA 1 1 1 1 NA 1 NA NA NA NA 1
## [4,] NA 1 NA NA 1 NA 1 NA NA NA NA 1
## [5,] NA 1 NA NA 1 NA 1 NA NA NA NA 1
## [6,] NA 1 NA NA 1 NA 1 1 1 1 NA 1
## [,27] [,28] [,29] [,30] [,31] [,32] [,33] [,34] [,35] [,36] [,37] [,38]
## [1,] NA NA 1 NA 1 1 1 1 NA 1 1 1
## [2,] NA NA 1 NA NA NA NA 1 NA 1 NA NA
## [3,] 1 1 1 NA NA NA 1 NA NA 1 1 1
## [4,] NA NA 1 NA NA 1 NA NA NA 1 NA NA
## [5,] NA NA 1 NA 1 NA NA NA NA 1 NA NA
## [6,] NA NA 1 NA 1 1 1 1 NA 1 NA NA
## [,39] [,40]
## [1,] 1 NA
## [2,] NA NA
## [3,] NA NA
## [4,] NA NA
## [5,] NA NA
## [6,] NA NA
Printing the matrix reveals the code. “ECFHLHZF”.