Skip to content
This repository has been archived by the owner on Apr 12, 2024. It is now read-only.

Commit

Permalink
Add day 4
Browse files Browse the repository at this point in the history
  • Loading branch information
danscan committed Dec 8, 2019
1 parent d606c27 commit ad3fa74
Show file tree
Hide file tree
Showing 5 changed files with 3,622 additions and 0 deletions.
17 changes: 17 additions & 0 deletions days/4/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
const validatePassword = require('./lib/validatePassword');

const RANGE = [284639, 748759];

let validPasswords = [];

for (let i = RANGE[0]; i <= RANGE[1]; i = i + 1) {
console.log(i);
if (validatePassword(String(i))) {
console.log('VALID!');
validPasswords.push(i);
}
}

console.log('validPasswords:');
console.log(validPasswords);
console.log(validPasswords.length);
23 changes: 23 additions & 0 deletions days/4/lib/validatePassword.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
// rule 1 = Digits can only increase from left to right
// rule 2 = The password must contain two consecutive repeat digits that are NOT part of a longer group of repeat digits
module.exports = function validatePassword(passwordNumber) {
let onlyIncreasing = true;
let twoAdjacent = false;

for (let i = 0; i < password.length; i++) {
const previousDigit = password[i - 1];
const digit = password[i];
const nextDigit = password[i + 1];
const digitAfterNext = password[i + 2];

if (previousDigit !== digit && digit === nextDigit && digit !== digitAfterNext) {
twoAdjacent = true;
}

if (Number(digit) > Number(nextDigit)) {
onlyIncreasing = false;
}
}

return twoAdjacent && onlyIncreasing;
}
37 changes: 37 additions & 0 deletions days/4/lib/validatePassword.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
const validatePassword = require('./validatePassword');

it('validates correct passwords', () => {
expect(validatePassword(334455)).toBe(true);
expect(validatePassword(333445)).toBe(true);
expect(validatePassword(288999)).toBe(true);
expect(validatePassword(348899)).toBe(true);
expect(validatePassword(345899)).toBe(true);
});

it('invalidates incorrect passwords due to decreasing digits', () => {
// Rule 2 Passes = 4
expect(validatePassword(334454)).toBe(false);
expect(validatePassword(334454)).toBe(false);
expect(validatePassword(344561)).toBe(false);
expect(validatePassword(345561)).toBe(false);
expect(validatePassword(345661)).toBe(false);
expect(validatePassword(324467)).toBe(false);

// Rule 2 Passes < 4
expect(validatePassword(300011)).toBe(false);
expect(validatePassword(333544)).toBe(false);
expect(validatePassword(333244)).toBe(false);
});

it('invalidates incorrect passwords due to no doubles', () => {
expect(validatePassword(345678)).toBe(false);
expect(validatePassword(456789)).toBe(false);
});

it('invalidates incorrect passwords due to only doubles belonging to a longer repeating sequence', () => {
expect(validatePassword(333333)).toBe(false);
expect(validatePassword(333444)).toBe(false);
expect(validatePassword(333456)).toBe(false);
expect(validatePassword(345556)).toBe(false);
expect(validatePassword(345666)).toBe(false);
});
12 changes: 12 additions & 0 deletions days/4/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"name": "4",
"version": "1.0.0",
"main": "index.js",
"license": "MIT",
"scripts": {
"test": "jest"
},
"devDependencies": {
"jest": "^24.9.0"
}
}
Loading

0 comments on commit ad3fa74

Please sign in to comment.