Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const fs = require("fs");
- function part1() {
- const bag = { red: 12, green: 13, blue: 14 };
- const isValid = (colour) => {
- let flag = true;
- Object.keys(bag).forEach((key) => {
- if (colour.endsWith(key) && Number(colour.replace(key, "")) > bag[key])
- flag = false;
- });
- return flag;
- };
- let total = 0;
- fs.readFileSync("./input.txt")
- .toString()
- .split("\n")
- .forEach((line) => {
- line = line.replaceAll(/\s+/g, "").slice(4).split(":");
- let id = Number(line[0]);
- let validFlag = true;
- line[1].split(";").forEach((game) => {
- game.split(",").forEach((colour) => {
- if (!isValid(colour)) {
- validFlag = false;
- return;
- }
- });
- if (!validFlag) return;
- });
- total += validFlag ? id : 0;
- });
- console.log(`Part 1: ${total}`);
- }
- function part2() {
- let sum = 0;
- fs.readFileSync("./input.txt")
- .toString()
- .split("\n")
- .forEach((line) => {
- const minColours = { red: 0, green: 0, blue: 0 };
- line
- .replaceAll(/\s+/g, "")
- .split(":")[1]
- .split(";")
- .forEach((game) => {
- game.split(",").forEach((colour) => {
- const [colourMatched, amount] = [
- colour.match(/[a-z]+/g)[0],
- Number(colour.match(/[0-9]+/g)[0]),
- ];
- if (minColours[colourMatched] < amount)
- minColours[colourMatched] = amount;
- });
- });
- sum += Object.values(minColours).reduce((acc, curr) => acc * curr);
- });
- console.log(`Part 2: ${sum}`);
- }
- part1();
- part2();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement