main.js 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. const fs = require('fs');
  2. const readline = require('readline');
  3. const ROCK = 1;
  4. const PAPER = 2;
  5. const SCISSORS = 3;
  6. const LOSE = 0;
  7. const DRAW = 3;
  8. const WIN = 6;
  9. function isWin(input, output) {
  10. return ((input === ROCK && output == PAPER) ||
  11. (input === PAPER && output === SCISSORS) ||
  12. (input === SCISSORS && output === ROCK));
  13. }
  14. function isLoss(input, output) {
  15. return input != output && !isWin(input, output);
  16. }
  17. function getSymbol(input, expected) {
  18. if (expected === DRAW)
  19. return input;
  20. if (expected === WIN) {
  21. if (isWin(input, ROCK)) return ROCK;
  22. if (isWin(input, PAPER)) return PAPER;
  23. if (isWin(input, SCISSORS)) return SCISSORS;
  24. } else {
  25. if (isLoss(input, ROCK)) return ROCK;
  26. if (isLoss(input, PAPER)) return PAPER;
  27. if (isLoss(input, SCISSORS)) return SCISSORS;
  28. }
  29. }
  30. async function main() {
  31. let part1 = 0;
  32. let part2 = 0;
  33. for await (let line of readline.createInterface({ input: process.stdin })) {
  34. let input;
  35. let output;
  36. let expectResult;
  37. if (!line || !line.length)
  38. continue;
  39. switch (line[0]) {
  40. case 'A': input = ROCK; break;
  41. case 'B': input = PAPER; break;
  42. case 'C': input = SCISSORS; break;
  43. }
  44. switch (line[2]) {
  45. case 'X': output = ROCK; expectResult = LOSE; break;
  46. case 'Y': output = PAPER; expectResult = DRAW; break;
  47. case 'Z': output = SCISSORS; expectResult = WIN; break;
  48. }
  49. part1 += output;
  50. part2 += expectResult + getSymbol(input, expectResult);
  51. if (isWin(input, output))
  52. part1 += WIN;
  53. else if (input === output)
  54. part1 += DRAW;
  55. }
  56. console.log("Score part1: ", part1);
  57. console.log("Score part2: ", part2);
  58. };
  59. (main());