Advent of Code 2021 - Day 13

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”.

Avatar
Moritz Mueller-Navarra

A Data Scientist using R

Related