
This blog post is second in the Advent of Code 2021 series and shows a JavaScript-based solution to the problem described in Day 2: Dive!.
All solutions are in this GitHub repository.
Solving Part One
The goal is to find the horizontal position and depth of a moving submarine based on a set of given instructions.
According to the problem the initial depth and horizontal positions are 0.
let depth = 0
let horizontalPosition = 0
We can read the set of instructions using the readInput utility created on Day 1. Then we can split the data line by line.
const commands = data.split('\n')
Each line contains a command type and a number of steps. To use these, we can split the line by the space character, then convert the steps to a number.
const [type, stepsAsString] = command.split(' ')
const steps = Number(stepsAsString)
Finally, we can calculate the depth and horizontal positions based on the command type and steps to move according to the rules described in the challenge.
switch (type) {
case 'forward':
horizontalPosition += steps
break
case 'down':
depth += steps
break
case 'up':
depth -= steps
break
default:
break
}
The final solution:
import { URL, fileURLToPath } from 'url'
import { readInput } from '../utils/readInput.js'
const solve = (data) => {
const commands = data.split('\n')
let depth = 0
let horizontalPosition = 0
commands.forEach((command) => {
const [type, stepsAsString] = command.split(' ')
const steps = Number(stepsAsString)
switch (type) {
case 'forward':
horizontalPosition += steps
break
case 'down':
depth += steps
break
case 'up':
depth -= steps
break
default:
break
}
})
return depth * horizontalPosition
}
const inputPath = fileURLToPath(new URL('./input.txt', import.meta.url))
const data = await readInput(inputPath)
console.log(solve(data))
Solving Part Two
The second part of the problem requires calculating depth and horizontal position in a slightly different way using new rules and an aim value.
let aim = 0
The new rules can be written in JavaScript as follows:
switch (type) {
case 'forward':
horizontalPosition += steps
depth += aim * steps
break
case 'down':
aim += steps
break
case 'up':
aim -= steps
break
default:
break
}
The final solution for part two is on my GitHub repository.
Conclusion
Day 2 was about calculating values such as horizontal position and depth of a moving submarine based on a set of given commands. I had fun solving the challenge and the utility functions added on Day 1 helped solve the second challenge somewhat faster.
Comments
Join the discussionNo comments yet. Be the first to comment.
Advent of Code 2021
In this series we solve programming challenges from the Advent of Code 2021 using JavaScript.




