# Advent of Code 2021

**R on Tea & Stats**, 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.

It’s that time of year again. And not just for Secret Santa—it’s time for the Advent of Code, a series of programming puzzles in the lead-up to Christmas.

I’m doing the 2021 challenge in R—in the form of an open-source R package, to demonstrate a test-driven workflow.

Each puzzle description typically comes with a few simple examples of inputs and outputs.
We can use these to define expectations for unit tests with the **testthat** package.
Once a function passes the unit tests, it should be ready to try with the main puzzle input.

Check my **adventofcode2021** repository on GitHub for the latest.

remotes::install_github('Selbosh/adventofcode2021')

## Day 1 – Sonar Sweep

### Increases

To count the number of times elements are increasing in a vector it’s as simple as

depths <- c(199, 200, 208, 210, 200, 207, 240, 269, 260, 263) sum(diff(depths) > 0) ## [1] 7

for which I defined a function called `increases`

.

### Rolling sum

For part two, we first want to calculate the three-depth moving sum, then we count the increases as in part one.
There are plenty of solutions in external R packages for getting lagged (and leading) vectors, for instance `dplyr::lag()`

and `dplyr::lead()`

:

depths + dplyr::lead(depths) + dplyr::lead(depths, 2) ## [1] 607 618 618 617 647 716 769 792 NA NA

Or you could even calculate the rolling sum using a pre-made solution in **zoo** (Z’s Ordered Observations, a time-series analysis package).

zoo::rollsum(depths, 3) ## [1] 607 618 618 617 647 716 769 792

To avoid loading any external packages at this stage, I defined my own base R function called `rolling_sum()`

, which uses `tail`

and `head`

with negative lengths to omit the first and last elements of the vector:

head(depths, -2) + head(tail(depths, -1), -1) + tail(depths, -2) ## [1] 607 618 618 617 647 716 769 792

As David Schoch points out, you can just use the `lag`

argument of `diff`

to make this entire puzzle into a one-liner:

sapply(c(1, 3), \(lag) sum(diff(depths, lag) > 0)) ## [1] 7 5

**leave a comment**for the author, please follow the link and comment on their blog:

**R on Tea & Stats**.

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.