|
1 | 1 | /* eslint-env mocha */
|
2 | 2 | const { expect } = require('chai')
|
3 |
| -const { descrambleSignal } = require('./display') |
| 3 | +const { descrambleSignal, decodeSignal } = require('./display') |
4 | 4 |
|
5 | 5 | const testSingle = 'acedgfb cdfbe gcdfa fbcad dab cefabd cdfgeb eafb cagedb ab | cdfeb fcadb cdfeb cdbaf'
|
6 | 6 |
|
| 7 | +const testMultiple = `be cfbegad cbdgef fgaecd cgeb fdcge agebfd fecdb fabcd edb | fdgacbe cefdb cefbgd gcbe |
| 8 | +edbfga begcd cbg gc gcadebf fbgde acbgfd abcde gfcbed gfec | fcgedb cgb dgebacf gc |
| 9 | +fgaebd cg bdaec gdafb agbcfd gdcbef bgcad gfac gcb cdgabef | cg cg fdcagb cbg |
| 10 | +fbegcd cbd adcefb dageb afcb bc aefdc ecdab fgdeca fcdbega | efabcd cedba gadfec cb |
| 11 | +aecbfdg fbg gf bafeg dbefa fcge gcbea fcaegb dgceab fcbdga | gecf egdcabf bgf bfgea |
| 12 | +fgeab ca afcebg bdacfeg cfaedg gcfdb baec bfadeg bafgc acf | gebdcfa ecba ca fadegcb |
| 13 | +dbcfg fgd bdegcaf fgec aegbdf ecdfab fbedc dacgb gdcebf gf | cefg dcbef fcge gbcadfe |
| 14 | +bdfegc cbegaf gecbf dfcage bdacg ed bedf ced adcbefg gebcd | ed bcgafe cdgba cbgef |
| 15 | +egadfb cdbfeg cegd fecab cgb gbdefca cg fgcdab egfdb bfceg | gbdfcae bgc cg cgb |
| 16 | +gcafb gcf dcaebfg ecagb gf abcdeg gaef cafbge fdbac fegbdc | fgae cfgab fg bagce`.split('\n') |
| 17 | + |
7 | 18 | console.debug(
|
8 | 19 | testSingle.split('|')[0].trim()
|
9 | 20 | .split(' ').map(
|
@@ -31,5 +42,35 @@ describe('--- Day 8: Seven Segment Search ---', () => {
|
31 | 42 | expect(charCodes.map(code => code.length)).to.deep.equal(expectedLengths)
|
32 | 43 | })
|
33 | 44 | })
|
| 45 | + describe('decodeSignal()', () => { |
| 46 | + const testData = testMultiple[0].split('|').map((a) => a.trim()) |
| 47 | + const { charCodes } = descrambleSignal(testData[0]) |
| 48 | + |
| 49 | + it('decodes a display pattern using the provided map of display codes', () => { |
| 50 | + const result = decodeSignal(charCodes, testData[1]) |
| 51 | + expect(result[0]).to.equal(8) |
| 52 | + expect(result[3]).to.equal(4) |
| 53 | + }) |
| 54 | + it('throws an error if a digit doesn`t have a matching code', () => { |
| 55 | + expect( |
| 56 | + () => decodeSignal( |
| 57 | + [['a']], |
| 58 | + 'dcb' |
| 59 | + ) |
| 60 | + ).to.throw( |
| 61 | + 'No match found for dcb when cleaned up to b,c,d' |
| 62 | + ) |
| 63 | + }) |
| 64 | + it('throws an error if a digit has multiple matches (meaning a bad codes map)', () => { |
| 65 | + expect( |
| 66 | + () => decodeSignal( |
| 67 | + [['a'], ['d', 'c', 'b'], ['b', 'c', 'd']], |
| 68 | + 'dcb' |
| 69 | + ) |
| 70 | + ).to.throw( |
| 71 | + 'Too many matches for dcb when cleaned up to b,c,d. This most likely indicates a bad list of character codes.' |
| 72 | + ) |
| 73 | + }) |
| 74 | + }) |
34 | 75 | })
|
35 | 76 | })
|
0 commit comments