Advent of Code 2020-09 with R
[This article was first published on Colin Fay, and kindly contributed to R-bloggers]. (You can report issue about the content on this page here)
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.
Solving Advent of Code 2020-09 with R & Neo4j.
[Disclaimer] Obviously, this post contains a big spoiler about Advent of Code.
Instructions
We have a XMAS
code, which:
-
Start with 25 numbers
-
Any following number should be the sum of one of the possible pairs from the previous 25
-
In step 2, find the consecutive set of number that sums to the result of part 1, and add its min and max
Find the complete instructions at: https://adventofcode.com/2020/day/9.
R solution
Part one
# Reading the data input <- read.delim( sep = " ", "2020-09-aoc.txt", header = FALSE, stringsAsFactors = FALSE ) for (i in 26:length(input$V1)){ # The 25 starting numbers to_get <- (i - 25):(i-1) # The 26th number should be between the # sum of the two lowest number and the sum # of the two highest lower_bond <- sum( head( sort(input$V1[to_get]), 2 ) ) higher_bond <- sum( tail( sort( input$V1[to_get] ), 2 ) ) if ( !dplyr:::between(input$V1[i], lower_bond, higher_bond) ){ output1 <<- input$V1[i] print(output1) break } } ## [1] 530627549
Part Two
for (i in 1:length(input$V1)){ # We will try to find any sequence in 1:n, then 2:n, # then 3:n, etc, that sums to output1 selection <- input$V1[i:length(input$V1)] c_s <- cumsum(selection) == output1 if ( any(c_s) ){ bounds <- selection[1:which(c_s)] print( sum( min(bounds), max(bounds) ) ) break } } ## [1] 77730285
To leave a comment for the author, please follow the link and comment on their blog: Colin Fay.
R-bloggers.com offers daily e-mail updates about R news and tutorials about learning R and many other topics. Click here if you're looking to post or find an R/data-science job.
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.