# Advent of Code 2021-02 with R & JavaScript

Solving Advent of Code 2021-02 with R and JavaScript.

Like yesterday, trying to write JS code that looks like R code.

## Disclaimer

Disclaimer Obviously, this post contains a big spoiler about Advent of Code, as it gives solutions for solving 2021-02.

[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.

```
bubble::set_node_engine()
```

## Instructions

### One

- We start at a position [0, 0] (horizontal, depth), then
- forward X increases the horizontal position by X units
- down X increases the depth by X units
- up X decreases the depth by X units

Result is horizontal * depth.

### Two

- We start at a position [0, 0, 0] (horizontal, depth,), then
- down X increases your aim by X units
- up X decreases your aim by X units
- forward X does two things :
- It increases your horizontal position by X units
- It increases your depth by your aim multiplied by X

Result is horizontal * depth.

Find the complete instructions at: https://adventofcode.com/2021/day/2.

## Reading inputs

```
# Read
ipt <- read.delim("2021-02-aoc.txt", header = FALSE)$V1
```

```
const fs = require('fs')
var ipt = fs.readFileSync("2021-02-aoc.txt", 'utf8').split("\n").filter(x => x.length != 0);
```

## Part one

### R solution

```
# Horizontal and depth
start_pos <- c(horizontal = 0, depth = 0)
for (moves in ipt) {
move <- strsplit(moves, " ")[[1]]
if (move[1] == "up") {
start_pos[2] <- start_pos[2] - as.numeric(move[2])
}
if (move[1] == "down") {
start_pos[2] <- start_pos[2] + as.numeric(move[2])
}
if (move[1] == "forward") {
start_pos[1] <- start_pos[1] + as.numeric(move[2])
}
}
start_pos[1] * start_pos[2]
```

```
## horizontal
## 1727835
```

### JS solution

```
var start_pos = [0, 0]
// Gotcha: R for(x in y) is JS for(x of y)
for (moves of ipt) {
// In JS, object have methods, so the split function
// is containes inside the string object
move = moves.split(' ')
// Small gotcha here, JS i 0 based index
if (move[0] == "up") {
// R as.numeric is parseInt()
start_pos[1] = start_pos[1] - parseInt(move[1])
}
if (move[0] == "down") {
start_pos[1] = start_pos[1] + parseInt(move[1])
}
if (move[0] == "forward") {
start_pos[0] = start_pos[0] + parseInt(move[1])
}
}
```

```
start_pos[0] * start_pos[1]
```

```
## 1727835
```

## Part two

### R solution

```
# Horizontal, depth, and aim
start_pos <- c(horizontal = 0, depth = 0, aim = 0)
for (moves in ipt) {
move <- strsplit(moves, " ")[[1]]
if (move[1] == "up") {
start_pos[3] <- start_pos[3] - as.numeric(move[2])
}
if (move[1] == "down") {
start_pos[3] <- start_pos[3] + as.numeric(move[2])
}
if (move[1] == "forward") {
start_pos[1] <- start_pos[1] + as.numeric(move[2])
start_pos[2] <- start_pos[2] + (start_pos[3] * as.numeric(move[2]))
}
}
start_pos[1] * start_pos[2]
```

```
## horizontal
## 1544000595
```

### JS solution

```
var start_pos = [0, 0, 0]
for (moves of ipt) {
move = moves.split(' ')
if (move[0] == "up") {
start_pos[2] = start_pos[2] - parseInt(move[1])
}
if (move[0] == "down") {
start_pos[2] = start_pos[2] + parseInt(move[1])
}
if (move[0] == "forward") {
start_pos[0] = start_pos[0] + parseInt(move[1])
start_pos[1] = start_pos[1] + (start_pos[2] * parseInt(move[1]))
}
}
```

```
start_pos[0] * start_pos[1]
```

```
## 1544000595
```

## What do you think?