Skip to content

Commit af57c8c

Browse files
committed
feat(2022): add day 2 in javascript
1 parent 5a8ab08 commit af57c8c

File tree

5 files changed

+2604
-10
lines changed

5 files changed

+2604
-10
lines changed

javascript/2022/day01.mjs

+12-8
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,20 @@
1-
import { sum, readInput, sortDESC } from './utils.mjs'
1+
import {
2+
sum,
3+
readInput,
4+
sortDESC,
5+
splitLines,
6+
removeEmpty,
7+
map,
8+
reduce,
9+
add,
10+
pipe,
11+
} from './utils.mjs'
212

313
const input = await readInput('01')
414

515
const parsedInput = input
616
.split('\n\n')
7-
.flatMap(group =>
8-
group
9-
.split('\n')
10-
.filter(l => l)
11-
.map(Number)
12-
.reduce(sum, 0)
13-
)
17+
.flatMap(pipe(splitLines, removeEmpty, map(Number), reduce(add, 0)))
1418
.slice()
1519
.sort(sortDESC)
1620

javascript/2022/day02.mjs

+74
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
import {
2+
readInput,
3+
sum,
4+
splitWhitespace,
5+
splitLines,
6+
removeEmpty,
7+
pipe,
8+
map,
9+
add,
10+
reduce,
11+
} from './utils.mjs'
12+
13+
const input = await readInput('02')
14+
const parsedInput = pipe(splitLines, removeEmpty, map(splitWhitespace))(input)
15+
16+
const scores = {
17+
win: 6,
18+
loss: 0,
19+
draw: 3,
20+
rock: 1,
21+
paper: 2,
22+
scissors: 3,
23+
}
24+
25+
const player1 = {
26+
A: 'rock',
27+
B: 'paper',
28+
C: 'scissors',
29+
}
30+
31+
const player2 = {
32+
X: 'rock',
33+
Y: 'paper',
34+
Z: 'scissors',
35+
}
36+
37+
const outcome = {
38+
X: 'loss',
39+
Y: 'draw',
40+
Z: 'win',
41+
}
42+
43+
const part1 = pipe(
44+
map(([p1, p2]) => [player1[p1], player2[p2]]),
45+
map(([p1, p2]) => {
46+
if (p1 === p2) return scores.draw + scores[p2]
47+
if (p1 === 'rock' && p2 === 'paper') return scores.win + scores.paper
48+
if (p1 === 'rock' && p2 === 'scissors') return scores.loss + scores.scissors
49+
if (p1 === 'paper' && p2 === 'rock') return scores.loss + scores.rock
50+
if (p1 === 'paper' && p2 === 'scissors') return scores.win + scores.scissors
51+
if (p1 === 'scissors' && p2 === 'rock') return scores.win + scores.rock
52+
if (p1 === 'scissors' && p2 === 'paper') return scores.loss + scores.paper
53+
}),
54+
reduce(add, 0)
55+
)(parsedInput)
56+
57+
const part2 = pipe(
58+
map(([p1, p2]) => [player1[p1], outcome[p2]]),
59+
map(([p1, p2]) => {
60+
if (p1 === 'rock' && p2 === 'loss') return scores.loss + scores.scissors
61+
if (p1 === 'rock' && p2 === 'draw') return scores.draw + scores.rock
62+
if (p1 === 'rock' && p2 === 'win') return scores.win + scores.paper
63+
if (p1 === 'paper' && p2 === 'loss') return scores.loss + scores.rock
64+
if (p1 === 'paper' && p2 === 'draw') return scores.draw + scores.paper
65+
if (p1 === 'paper' && p2 === 'win') return scores.win + scores.scissors
66+
if (p1 === 'scissors' && p2 === 'loss') return scores.loss + scores.paper
67+
if (p1 === 'scissors' && p2 === 'draw') return scores.draw + scores.scissors
68+
if (p1 === 'scissors' && p2 === 'win') return scores.win + scores.rock
69+
}),
70+
reduce(add, 0)
71+
)(parsedInput)
72+
73+
console.log('Part 1:', part1)
74+
console.log('Part 2:', part2)

0 commit comments

Comments
 (0)