Skip to content

Commit be91e9e

Browse files
feat[2020-day-02]: find the number of valid passwords
Solution for part 1
1 parent 29c7a5f commit be91e9e

File tree

4 files changed

+1031
-9
lines changed

4 files changed

+1031
-9
lines changed

2020/day-02/cleanupPasswords.js

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ const splitRule = (rule) => {
2727
/**
2828
* Validates a password against the specified rule
2929
*/
30-
const isValid = (rule, password) => {
30+
const isValidPassword = (rule, password) => {
3131
// count how many times `rule.char` exists in `password`
3232
const count = (
3333
password.match(
@@ -40,8 +40,15 @@ const isValid = (rule, password) => {
4040
return true
4141
}
4242

43+
const isValidRecord = (record) => {
44+
const { rule, password } = splitRecord(record)
45+
const { min, max, char } = splitRule(rule)
46+
return isValidPassword({ min, max, char }, password)
47+
}
48+
4349
module.exports = {
4450
splitRecord,
4551
splitRule,
46-
isValid
52+
isValidRecord,
53+
isValidPassword
4754
}

2020/day-02/cleanupPasswords.test.js

Lines changed: 17 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 { splitRecord, splitRule, isValid } = require('./cleanupPasswords')
3+
const { splitRecord, splitRule, isValidPassword, isValidRecord } = require('./cleanupPasswords')
44

55
const testData = [
66
'1-3 a: abcde',
@@ -27,13 +27,27 @@ describe('--- Day 2: Password Philosophy ---', () => {
2727
})
2828
})
2929
})
30-
describe('isValid()', () => {
30+
describe('isValidPassword()', () => {
3131
it('checks if a specified password matches the specified rule', () => {
3232
const expectedResults = [true, false, true]
3333
testData.forEach((row, idx) => {
3434
const { rule, password } = splitRecord(row)
3535
const { min, max, char } = splitRule(rule)
36-
expect(isValid({ min, max, char }, password))
36+
expect(isValidPassword({ min, max, char }, password))
37+
.to.equal(expectedResults[idx])
38+
})
39+
})
40+
it('won\'t allow more than the specified character count', () => {
41+
const badPass = 'abcabcabcabc'
42+
expect(isValidPassword({ min: 2, max: 3, char: 'a' }, badPass))
43+
.to.equal(false)
44+
})
45+
})
46+
describe('isValidRecord()', () => {
47+
it('checks if a specified record contains valid rule and password', () => {
48+
const expectedResults = [true, false, true]
49+
testData.forEach((row, idx) => {
50+
expect(isValidRecord(row))
3751
.to.equal(expectedResults[idx])
3852
})
3953
})

0 commit comments

Comments
 (0)