Advent of Code 202101 with R & JavaScript
Solving Advent of Code 202101 with R and JavaScript.
I’ll try in this post to write R code that looks like the JavaScript
one, using {purrr}
, to show how both syntaxes can look alike. The idea
is to highlight how you can leverage your {purrr}
knowledge when
writting JavaScript code.
Disclaimer
Disclaimer Obviously, this post contains a big spoiler about Advent of Code, as it gives solutions for solving day 1.
[Disclaimer bis] I’m no JavaScript expert so this might not be the perfect solution. TBH, that’s also the case for the R solution.
About the JavaScript code
The JavaScript code has been written in the same RMarkdown as the R
code. It runs thanks to the {bubble}
package:
https://github.com/ColinFay/bubble
Instructions

Count the number of times n is larger that n1

Count the number of times n + n1 + n2 is larger that n1 + n2 + n3
Find the complete instructions at: https://adventofcode.com/2021/day/1.
Reading inputs
# Read
library(purrr)
ipt < read.delim("202101aoc.txt", header = FALSE)$V1
// Reading the file and converting it to int
const fs = require('fs')
var ipt = fs.readFileSync("202101aoc.txt", 'utf8').split("\n").filter(x => x.length != 0);
ipt = ipt.map(x => parseInt(x));
Part one
R solution
2:length(ipt) >
map_dbl(
~ ipt[.x]  ipt[.x  1]
) >
keep(
~ .x > 0
) >
length()
## [1] 1154
JS solution
ipt.map(
// inside map() in JS, the second argument to the anonymous
// function is the index inside the array.
// It mimics what we have in map(2:length(ipt)) in R
(x, y) => ipt[y]  ipt[y1]
).filter(
// filter() will keep the element that matches the anonymous
// predicate function
x => x >= 0
).length;
## 1154
Part two
R solution
tmp < 3:length(ipt) >
map_dbl(
~ ipt[.x] + ipt[.x  1] + ipt[.x  2]
)
2:length(tmp) >
map_dbl(
~ tmp[.x]  tmp[.x  1]
) >
keep(
~ .x > 0
) >
length()
## [1] 1127
JS solution
var tmp = ipt.
map(
// Creating n + n1 + n2
(x, y) => ipt[y] + ipt[y1] + ipt[y2]
);
tmp.
map(
// Same as part 1
(x, y) => tmp[y]  tmp[y1]
).
filter(
// keeping the ones that have raised
x => x > 0
).
length;
## undefined
## undefined
## 1127
What do you think?