Skip to content

Commit 85de1c2

Browse files
feat(2020-day-02): find the number of valid passwords
Solution for part 1
1 parent ee012b2 commit 85de1c2

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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy