Want to share your content on R-bloggers? click here if you have a blog, or here if you don’t.
Happy December, R friends!
One of my favorite traditions in the R community is the Advent of Code, a series of puzzles released at midnight EST from December 1st through 25th, to be solved through programming in the language of your choosing. I usually do a few of them each year, and once tried to do every single one at the moment it released!
This year, I know I won’t be able to do it daily, but I’m going to do as many as I can using just data.table
solutions.
I’ll allow myself to use other packages when there isn’t any data.table
equivalent, but my solutions must be as data.table
-y as possible.
I’m going to abuse the blog post structure and update this file throughout the week.
library(data.table)
December 1st
Part One
d1 <- fread("day1_dat1.txt")
d1[, V1 := sort(V1)] d1[, V2 := sort(V2)] d1[, diff := abs(V1-V2)] sum(d1$diff)
[1] 2815556
Part Two
d1[, similarity := sum(V1 == d1$V2)*V1, by = V1] sum(d1$similarity)
[1] 23927637
December 2nd
Part One
d1 <- fread("day2_dat1.txt", fill = TRUE)
check_report <- function(vec) { vec <- na.omit(vec) has_neg <- vec < 0 has_pos <- vec > 0 inc_dec <- sum(has_neg) == length(vec) | sum(has_pos) == length(vec) too_big <- max(abs(vec)) > 3 return(inc_dec & !too_big) }
d1t <- transpose(d1) deltas <- d1t[-nrow(d1t)] - d1t[2:nrow(d1t)] res <- apply(deltas, 2, "check_report") sum(res)
[1] 479
Part Two
test_reports <- function(dat) { deltas <- dat[-nrow(dat)] - dat[2:nrow(dat)] res <- apply(deltas, 2, "check_report") res }
res <- test_reports(d1t) for (i in 1:nrow(d1t)) { res <- res | test_reports(d1t[-i,]) } sum(res)
[1] 531
Just for fun
I found the use of apply
deeply unsatisfying, even though it was fast, so just for fun:
d1t <- transpose(d1) deltas <- d1t[-nrow(d1t)] - d1t[2:nrow(d1t)] is_not_pos <- deltas <= 0 is_not_neg <- deltas >= 0 is_big <- abs(deltas) > 3 res_inc <- colSums(is_not_neg | is_big, na.rm = TRUE) res_dec <- colSums(is_not_pos | is_big, na.rm = TRUE) sum(res_inc == 0) + sum(res_dec == 0)
[1] 479
Yay.
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.
Continue reading: Advent of Code with data.table: Week One
Advent of Code: Leveraging data.table for Programming Puzzles
The Advent of Code, a series of increasingly complex programming puzzles typically solved in multiple programming languages, holds a prominent place in the R programming community’s festive traditions. The event extends from December 1st through to the 25th and provides users an intriguing platform to showcase their programming skills.
Long-term Implications
The long-term implications of using data.table and R to solve the Advent of Code puzzles are manifold. Firstly, data.table is a highly optimized data manipulation package in R which has a significant speed advantage. This advantage can enable programmers to solve larger-scale complex problems in a fraction of the time it might take using other R packages.
Moreover, the systematic approach to solving Advent of Code puzzles with data.table provides a real-world practical example of how efficient data manipulation techniques can be applied in programming using R. This practice serves as a learning tool, contributing to the improvement of technical programming skills among participants as well as observers.
Future Developments
As R and data.table continue to be optimized and enriched with new features, solving the Advent of Code puzzles with these resources will become increasingly efficient. Additionally, as more individuals participate in this event using R and its packages, more creative and effective solutions will be generated that can act as learning resources for others.
Actionable Advice
- Embrace Challenges: Participate in the Advent of Code event as it offers a platform to challenge yourself, solve problems using R, and learn from others.
- Use Optimized Packages: Utilize the data.table package where necessary for efficient data manipulation and querying. This method can significantly reduce the computation time required to solve complex problems.
- Share Your Solutions: Share your solutions publicly and provide explanations where possible to help others learn from your expertise and approach.
- Stay Updated: Constantly update your knowledge about the latest functions and features in R and its packages. Staying up-to-date allows you to incorporate these features in your solutions effectively.