diff --git a/src/2020-day-02.ts b/src/2020-day-02.ts index 860c0e7..3d01de7 100644 --- a/src/2020-day-02.ts +++ b/src/2020-day-02.ts @@ -18,24 +18,24 @@ let tasksResults: any[] = ['N/A', 'N/A']; describe('Day 02', () => { + let sample: PassEntry[]; + before(() => { + sample = getData(example); + }) describe('task01', () => { describe('parse', () => { - let rules: PassEntry[]; - before(() => { - rules = getData(example); - }) it('matches a line', () => { - assert.strictEqual(rules[0].min, 1); - assert.strictEqual(rules[0].max, 3); - assert.strictEqual(rules[0].letter, 'a'); - assert.strictEqual(rules[0].pass, 'abcde'); + assert.strictEqual(sample[0].min, 1); + assert.strictEqual(sample[0].max, 3); + assert.strictEqual(sample[0].letter, 'a'); + assert.strictEqual(sample[0].pass, 'abcde'); }); it('makes a table', () => { - let table = mkTable(rules[0]); + let table = mkTable(sample[0]); assert.strictEqual(table.a, 1); }) it('validate rules', () => { - let valid = checkRulesTask01(rules); + let valid = checkRulesTask01(sample); assert.strictEqual(valid.length, 2); }) }); @@ -46,8 +46,9 @@ describe('Day 02', () => { }); describe('test02', () => { it('Calculate', () => { - // assert.strictEqual(task02(example), expect02); - tasksResults[1] = task02(input); + assert.strictEqual(checkRulesTask02(sample).length, 1); + let rules = getData(readFileSync('./input/2020-day-02.txt', 'utf-8')); + tasksResults[1] = checkRulesTask02(rules).length; }); }); after(() => { @@ -92,6 +93,18 @@ function checkRulesTask01(rules: PassEntry[]): PassEntry[] { }); } +function checkRulesTask02(rules: PassEntry[]): PassEntry[] { + return rules.filter(rule => { + let p1 = rule.pass.charAt(rule.min - 1); + let p2 = rule.pass.charAt(rule.max - 1); + let m1 = (p1 === rule.letter); + let m2 = (p2 === rule.letter); + if (m1 && m2) return false; + if (!m1 && !m2) return false; + return true; + }); +} + function mkTable(rule: PassEntry) { let table: any = {}; for (let i = 0; i < rule.pass.length; i++) {