Skip to content

Instantly share code, notes, and snippets.

@0916dhkim
Created December 24, 2022 21:23
Show Gist options
  • Save 0916dhkim/80803a31231d69c72fb463d0866ab2a0 to your computer and use it in GitHub Desktop.
Save 0916dhkim/80803a31231d69c72fb463d0866ab2a0 to your computer and use it in GitHub Desktop.
Advent of Code Day 4
const { readFile } = require("fs/promises");
async function readRawInput() {
const path = "./input.txt";
const content = await readFile(path, { encoding: "utf-8" });
return content;
}
function parseLine(line) {
const pairs = line.split(",");
const firstPair = parseRangeString(pairs[0]);
const secondPair = parseRangeString(pairs[1]);
return isFullyContained(firstPair, secondPair);
}
function parseRangeString(rangeString) {
const pair = rangeString.split("-");
const firstNumber = Number(pair[0]);
const secondNumber = Number(pair[1]);
return [firstNumber, secondNumber];
}
function isFullyContained(firstPair, secondPair) {
if (firstPair[0] <= secondPair[0] && firstPair[1] >= secondPair[1]) {
return true;
}
if (firstPair[0] >= secondPair[0] && firstPair[1] <= secondPair[1]) {
return true;
}
return false;
}
async function main() {
const raw = await readRawInput();
const lines = raw.split("\n");
const numberOfFullyContainingAssignments = lines
.map(parseLine)
.reduce((a, b) => a + (b ? 1 : 0), 0);
console.log(numberOfFullyContainingAssignments);
}
main();
const { readFile } = require("fs/promises");
async function readRawInput() {
const path = "./input.txt";
const content = await readFile(path, { encoding: "utf-8" });
return content;
}
function parseLine(line) {
const pairs = line.split(",");
const firstPair = parseRangeString(pairs[0]);
const secondPair = parseRangeString(pairs[1]);
return isOverlapped(firstPair, secondPair);
}
function parseRangeString(rangeString) {
const pair = rangeString.split("-");
const firstNumber = Number(pair[0]);
const secondNumber = Number(pair[1]);
return [firstNumber, secondNumber];
}
function isOverlapped(firstPair, secondPair) {
if (firstPair[1] >= secondPair[0] && firstPair[0] <= secondPair[0]) {
return true;
}
if (secondPair[1] >= firstPair[0] && secondPair[0] <= firstPair[0]) {
return true;
}
return false;
}
async function main() {
const raw = await readRawInput();
const lines = raw.split("\n");
const numberOfOverlappingAssignments = lines
.map(parseLine)
.reduce((a, b) => a + (b ? 1 : 0), 0);
console.log(numberOfOverlappingAssignments);
}
main();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment