aboutsummaryrefslogtreecommitdiff
path: root/2023/19/solve.js
blob: 4a501789daf4467c2a75314ae94ea1fd31663e58 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
const fs = require("fs");
let [workflows, parts] = fs.readFileSync("input", "utf8").trim().split("\n\n");
workflows = workflows.split("\n").map((l) => [l.split("{")[0], l .split("{")[1] .slice(0, -1).split(",").map((w) => w.split(":"))]);
parts = parts.split("\n").map((l) => l.slice(1, -1));

const findWorkflow = (name) => workflows.filter(([n, _]) => name == n)[0][1];

let part1 = 0;
for (const part of parts) {
  eval(part);
  let workflow = "in";
  while (workflow != "A" && workflow != "R") {
    const rules = findWorkflow(workflow);
    for (const rule of rules) {
      if (rule.length == 1) {
        workflow = rule[0];
        break;
      } else if (eval(rule[0]) == true) {
        workflow = rule[1];
        break;
      }
    }
  }
  if (workflow == "A") part1 += x + m + a + s;
}
console.log(part1);

let part2 = 0