Advertisement · 728 × 90
#
Hashtag
#AoCDay6
Advertisement · 728 × 90
#Day 6 - Trash Compactor - Part 1

#load the puzzle input, transpose it, and setup the sums and products across all numeric columns
D6P1 <- read.table("D6input.txt", sep = "" , header = F , na.strings ="", stringsAsFactors= F) |> t()
D6P1 <- data.frame(D6P1) |> rename(pm = ncol(D6P1)) |> mutate(across(starts_with("X"), as.numeric)) 
numeric_cols <- D6P1[sapply(D6P1, is.numeric)]
D6P1$numericcolssum <- rowSums(numeric_cols)
D6P1$numericcolsprod <- apply(numeric_cols, 1, prod)
D6P1 <- D6P1 |> mutate(correctresult = if_else(pm == "+",numericcolssum, numericcolsprod))

print(paste("answer is",sum(D6P1$correctresult)))

#Day 6 - Trash Compactor - Part 1 #load the puzzle input, transpose it, and setup the sums and products across all numeric columns D6P1 <- read.table("D6input.txt", sep = "" , header = F , na.strings ="", stringsAsFactors= F) |> t() D6P1 <- data.frame(D6P1) |> rename(pm = ncol(D6P1)) |> mutate(across(starts_with("X"), as.numeric)) numeric_cols <- D6P1[sapply(D6P1, is.numeric)] D6P1$numericcolssum <- rowSums(numeric_cols) D6P1$numericcolsprod <- apply(numeric_cols, 1, prod) D6P1 <- D6P1 |> mutate(correctresult = if_else(pm == "+",numericcolssum, numericcolsprod)) print(paste("answer is",sum(D6P1$correctresult)))

#Part 2 - need to re-read in the data - the spaces matter now!

D6P2 <- data.frame(input = readLines("D6input.txt"), stringsAsFactors = FALSE)  
char_matrix <- str_split_fixed(D6P2$input, "", n = nchar(D6P2$input[1])) |> t() 

D6P2 <- as.data.frame(char_matrix) |> rename(pm = ncol(char_matrix)) |> mutate(across(starts_with("V"), as.numeric)) 
numeric_cols <- D6P2[sapply(D6P2, is.numeric)]
D6P2$numericcolssum <- rowSums(numeric_cols, na.rm = T)

D6P2 <- D6P2 |> filter(numericcolssum > 0) |>
  mutate(across(starts_with("V"), as.character)) |> 
  mutate(across(starts_with("V"), ~ replace_na(.,""))) |>
  mutate(newnum = as.numeric(do.call(paste0, across(starts_with("V"))))) |>  #paste the chars back together in the right order 
  mutate(indexno = ifelse(pm != " ", 1, NA), indexno = cumsum(replace_na(indexno, 0))) |> #give each set of numbers a URN
  mutate(pm = na_if(pm, " ")) |> fill(pm, .direction = "down")  #fill in the plus/mult symbols in the blank bits

additions <- D6P2 |> filter(pm == "+") |> group_by(indexno) |> summarise(result = sum(newnum)) |> ungroup()
mults <- D6P2 |> filter(pm == "*") |> group_by(indexno) |> summarise(result = prod(newnum)) |> ungroup()

print(paste("answer is",sum(additions$result)+sum(mults$result)))

#Part 2 - need to re-read in the data - the spaces matter now! D6P2 <- data.frame(input = readLines("D6input.txt"), stringsAsFactors = FALSE) char_matrix <- str_split_fixed(D6P2$input, "", n = nchar(D6P2$input[1])) |> t() D6P2 <- as.data.frame(char_matrix) |> rename(pm = ncol(char_matrix)) |> mutate(across(starts_with("V"), as.numeric)) numeric_cols <- D6P2[sapply(D6P2, is.numeric)] D6P2$numericcolssum <- rowSums(numeric_cols, na.rm = T) D6P2 <- D6P2 |> filter(numericcolssum > 0) |> mutate(across(starts_with("V"), as.character)) |> mutate(across(starts_with("V"), ~ replace_na(.,""))) |> mutate(newnum = as.numeric(do.call(paste0, across(starts_with("V"))))) |> #paste the chars back together in the right order mutate(indexno = ifelse(pm != " ", 1, NA), indexno = cumsum(replace_na(indexno, 0))) |> #give each set of numbers a URN mutate(pm = na_if(pm, " ")) |> fill(pm, .direction = "down") #fill in the plus/mult symbols in the blank bits additions <- D6P2 |> filter(pm == "+") |> group_by(indexno) |> summarise(result = sum(newnum)) |> ungroup() mults <- D6P2 |> filter(pm == "*") |> group_by(indexno) |> summarise(result = prod(newnum)) |> ungroup() print(paste("answer is",sum(additions$result)+sum(mults$result)))

Well - I only got half way this year in #AdventOfCode :( It has been an insanely busy December and I just didn't have the time! I always say I will come back in January and finish it off, but I never do. Maybe when I retire :)

Here's #AoCDay6 using #RStats

Happy Christmas R-heads!

2 0 1 0