DEV Community

Colin Fay
Colin Fay

Posted on • Originally published at colinfay.me on

4 1

Advent of Code 2019-01 with R & JavaScript

Solving Advent of Code 2019-01 with R and JavaScript.

[Disclaimer] Obviously, this post contains a big spoiler about Adventof Code, as it gives solutions for solving day 1.

[Disclaimer bis] I’m no JavaScript expert so this might not be theperfect 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 Rcode. It runs thanks to the {bubble} package:https://github.com/ColinFay/bubble

Instructions

Find the instructions at: https://adventofcode.com/2019/day/1

R solution

Part one

# Read
ipt <- read.delim( "input1.txt", header = FALSE )
# Get the sum of each element, divided by 3, rounded down, and substracted 2
sum( floor( ipt$V1 / 3) - 2 )


## [1] 3361299

Enter fullscreen mode Exit fullscreen mode

Part two

Using a recursive function:https://en.wikipedia.org/wiki/Recursion_(computer_science)

floorish <- function(x, start = 0){
  loc <- floor( x / 3) - 2
  if (loc > 0){
    start <- start + loc
    floorish(loc, start)
  } else {
    return(start)
  } 
}
sum( purrr::map_dbl(ipt$V1, floorish) )


## [1] 5039071

Enter fullscreen mode Exit fullscreen mode

JS solution

Part one & Two

var fs = require('fs');

// Reading the file
var res = fs.readFileSync("input1.txt", 'utf8').split("\n").filter(x => x.length != 0);

// Turning to integer
res = res.map(x => parseInt(x));

// Doing the floor of division less 2
var val = res.map(x => Math.floor(x / 3) - 2);

// Suming
var add = (x, y) => x + y;

// Solution
console.log( val.reduce(add) );

// Creating the recursive function
function floorish(val, start = 0){
  loc = Math.floor(val / 3) - 2;
  if (loc > 0){
    start += loc;
    return floorish(loc, start);
  } else {
    return start;
  } 
}

// Doing the computation
console.log( res.map( x => floorish(x) ).reduce( add ) );


## 3361299
## 5039071

Enter fullscreen mode Exit fullscreen mode

Image of Datadog

The Future of AI, LLMs, and Observability on Google Cloud

Datadog sat down with Google’s Director of AI to discuss the current and future states of AI, ML, and LLMs on Google Cloud. Discover 7 key insights for technical leaders, covering everything from upskilling teams to observability best practices

Learn More

Top comments (0)

Postmark Image

Speedy emails, satisfied customers

Are delayed transactional emails costing you user satisfaction? Postmark delivers your emails almost instantly, keeping your customers happy and connected.

Sign up