-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathday2.js
49 lines (42 loc) · 1.03 KB
/
day2.js
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
const { readFile } = require('./utils')
const { length, pipe, filter } = require('ramda')
const input = readFile('./2.input.txt')
.map((contents) => contents.trim().split('\n'))
.map((entries) =>
entries.map((entry) => {
const [range, letter, value] = entry.split(' ')
const [min, max] = range.split('-').map(Number)
return {
min,
max,
letter: letter[0],
value: value.split(''),
}
})
)
const star1 = input
.map((passwords) =>
passwords.filter((p) => {
const { min, max, letter, value } = p
const lettersFound = pipe(
filter((x) => x === letter),
length
)(value)
return lettersFound >= min && lettersFound <= max
})
)
.map(length)
const star2 = input
.map((passwords) =>
passwords.filter((p) => {
const { min, max, letter, value } = p
return value[min - 1] === letter
? value[max - 1] !== letter
: value[max - 1] === letter
})
)
.map(length)
module.exports = {
star1,
star2,
}