main.js 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. const fs = require('fs');
  2. const readline = require('readline');
  3. function compareArray(a, b) {
  4. for (let i =0; i < a.length; ++i) {
  5. let comp = compare(a[i], b[i]);
  6. if (comp !== 0) return comp;
  7. }
  8. return a.length === b.length ? 0 : -1;
  9. }
  10. function compare(a, b) {
  11. if (b === undefined) return 1;
  12. if (Array.isArray(a) || Array.isArray(b))
  13. return compareArray(Array.isArray(a) ? a : [a], Array.isArray(b) ? b : [b]);
  14. if (a < b) return -1;
  15. if (a > b) return 1;
  16. return 0;
  17. }
  18. async function main() {
  19. let allLines = [[[2]], [[6]]];
  20. let lines = [];
  21. let index = 1;
  22. let total = 0;
  23. for await (let line of readline.createInterface({ input: process.stdin })) {
  24. if (line.length) {
  25. const data = JSON.parse(line);
  26. lines.push(data);
  27. allLines.push(data);
  28. } else {
  29. if (compare(lines[0], lines[1]) > 0)
  30. total += index;
  31. ++index;
  32. lines = [];
  33. }
  34. }
  35. allLines = allLines.sort(compare);
  36. console.log("Part 1: ", total);
  37. console.log("Part 2: ", (allLines.findIndex(i => compare(i, [[2]]) === 0) +1) *
  38. (allLines.findIndex(i => compare(i, [[6]]) === 0) +1));
  39. };
  40. (main());