Skip to content

Commit 92bd9ff

Browse files
feat(2020-day-06): tally how many questions answered by all users in a group
1 parent 44c5bfe commit 92bd9ff

File tree

2 files changed

+34
-5
lines changed

2 files changed

+34
-5
lines changed

2020/day-06/questions.js

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,32 @@ const alphabet = [...'abcdefghijklmnopqrstuvwxyz']
55
* at least one passenger in the group.
66
* Multiple people answering doesn't matter.
77
*/
8-
const groupChecksum = (answers) => {
8+
const groupChecksumAnyone = (answers) => {
99
return alphabet.reduce((sum, ltr) => {
1010
if (String(answers).includes(ltr)) { sum++ }
1111
return sum
1212
}, 0)
1313
}
1414

15+
/**
16+
* Counts which questions were answered by
17+
* all passengers in the group.
18+
*/
19+
const groupChecksumEveryone = (answers) => {
20+
const results = Object.assign({}, ...alphabet.map(key => ({ [key]: 0 })))
21+
const people = answers.trim().split(/[\n\r]+/)
22+
people.forEach((person) => {
23+
alphabet.forEach((ltr) => {
24+
if (String(person).includes(ltr)) { results[ltr]++ }
25+
})
26+
})
27+
// tally the questions where everyone answered
28+
return Object.keys(results)
29+
.filter((res) => results[res] === people.length)
30+
.length
31+
}
32+
1533
module.exports = {
16-
groupChecksum
34+
groupChecksum: groupChecksumAnyone,
35+
groupChecksumEveryone
1736
}

2020/day-06/questions.test.js

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/* eslint-env mocha */
22
const { expect } = require('chai')
3-
const { groupChecksum } = require('./questions')
3+
const { groupChecksum, groupChecksumEveryone } = require('./questions')
44

55
const testData = {
66
groups: [
@@ -19,15 +19,25 @@ const testData = {
1919
a`,
2020
'b'
2121
],
22-
checksums: [6, 3, 3, 3, 1, 1]
22+
checksumsAnyone: [6, 3, 3, 3, 1, 1],
23+
checksumsEveryone: [3, 3, 0, 1, 1, 1]
2324
}
2425

2526
describe('--- Day 6: Custom Customs ---', () => {
2627
describe('Part 1', () => {
2728
describe('groupChecksum()', () => {
2829
it('tallies the number of unique questions answered collectively by a group', () => {
2930
testData.groups.forEach((group, idx) => {
30-
expect(groupChecksum(group)).to.deep.equal(testData.checksums[idx])
31+
expect(groupChecksum(group)).to.deep.equal(testData.checksumsAnyone[idx])
32+
})
33+
})
34+
})
35+
})
36+
describe('Part 2', () => {
37+
describe('groupChecksumEveryone()', () => {
38+
it('tallies the number of questions answered by everyone in a group', () => {
39+
testData.groups.forEach((group, idx) => {
40+
expect(groupChecksumEveryone(group)).to.deep.equal(testData.checksumsEveryone[idx])
3141
})
3242
})
3343
})

0 commit comments

Comments
 (0)