Skip to content

Instantly share code, notes, and snippets.

@HannesOberreiter
Created December 7, 2020 22:27
Show Gist options
  • Save HannesOberreiter/cc8dc9f3c4182ab317dced8acdbc6f33 to your computer and use it in GitHub Desktop.
Save HannesOberreiter/cc8dc9f3c4182ab317dced8acdbc6f33 to your computer and use it in GitHub Desktop.
Day 07 of Pain
library(tidyverse)
a <- read_lines("07.txt")
a <- str_remove_all(a, "(bags?)|(\\.)|(\\s)") %>%
as_tibble() %>%
separate(., value, c("outer", "bags"), sep = "contain") %>%
separate_rows(., bags, sep = ",") %>%
extract(., bags, c("number", "inner"), regex ="([1-9])([a-z]+)", convert = T) %>%
replace_na(list(number = 0, inner = "none"))
# Part 1 ####
our_bag = "shinygold"
bag_counter = 0
search_bags <- a
search_term <- our_bag
while(TRUE){
result <- search_bags[search_bags$inner %in% search_term,]
if(nrow(result) == 0) break
search_term = unique(result$outer)
bag_counter = bag_counter + length(search_term)
search_bags <- search_bags %>% filter(!(outer %in% search_term))
}
bag_counter # result 1
# Step 2
search_bags <- a %>% add_column(help_count = 1)
search_term = our_bag
bag_counter = 0
while(TRUE){
result <- search_bags[search_bags$outer %in% search_term,]
if(nrow(result) == 0 | sum(result$number) == 0) break
search_term = unique(result$inner)
bag_counter = bag_counter + sum(result$number*result$help_count)
inner_search = result %>%
group_by(inner) %>%
summarise(h1 = sum(number*help_count))
for(i in 1:nrow(inner_search)){
print(inner_search$inner[i])
inner_logi = search_bags$outer == inner_search$inner[i]
search_bags$help_count[inner_logi] = inner_search$h1[i]
}
}
bag_counter # result 2
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment