|
| 1 | +/* eslint-env mocha */ |
| 2 | +const { expect } = require('chai') |
| 3 | +const { render, chartLine, parseLines } = require('./vents') |
| 4 | + |
| 5 | +const testData = `0,9 -> 5,9 |
| 6 | +8,0 -> 0,8 |
| 7 | +9,4 -> 3,4 |
| 8 | +2,2 -> 2,1 |
| 9 | +7,0 -> 7,4 |
| 10 | +6,4 -> 2,0 |
| 11 | +0,9 -> 2,9 |
| 12 | +3,4 -> 1,4 |
| 13 | +0,0 -> 8,8 |
| 14 | +5,5 -> 8,2` |
| 15 | + |
| 16 | +const sampleMap = `.......1.. |
| 17 | +..1....1.. |
| 18 | +..1....1.. |
| 19 | +.......1.. |
| 20 | +.112111211 |
| 21 | +.......... |
| 22 | +.......... |
| 23 | +.......... |
| 24 | +.......... |
| 25 | +222111....` |
| 26 | + |
| 27 | +const parsedTestData = parseLines(testData) |
| 28 | + |
| 29 | +describe('--- Day 5: Hydrothermal Venture ---', () => { |
| 30 | + describe('Part 1', () => { |
| 31 | + describe('render()', () => { |
| 32 | + it('displays a visual map of the vents', () => { |
| 33 | + expect(render([[0, 0, 0, 0, 0, 0, 0, 1, 0, 0], |
| 34 | + [0, 0, 1, 0, 0, 0, 0, 1, 0, 0], |
| 35 | + [0, 0, 1, 0, 0, 0, 0, 1, 0, 0], |
| 36 | + [0, 0, 0, 0, 0, 0, 0, 1, 0, 0], |
| 37 | + [0, 1, 1, 2, 1, 1, 1, 2, 1, 1], |
| 38 | + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], |
| 39 | + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], |
| 40 | + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], |
| 41 | + [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], |
| 42 | + [2, 2, 2, 1, 1, 1, 0, 0, 0, 0]])) |
| 43 | + .to.equal(sampleMap) |
| 44 | + }) |
| 45 | + }) |
| 46 | + describe('chartLine()', () => { |
| 47 | + it('charts a line between two points', () => { |
| 48 | + // 10x10 empty grid |
| 49 | + let data = [...new Array(10)].map(() => { |
| 50 | + return [...new Array(10)].map(() => 0) |
| 51 | + }) |
| 52 | + // Map some horizontal and vertical lines |
| 53 | + data = chartLine(data, 0, 9, 5, 9) |
| 54 | + data = chartLine(data, 9, 4, 3, 4) |
| 55 | + data = chartLine(data, 2, 2, 2, 1) |
| 56 | + data = chartLine(data, 7, 0, 7, 4) |
| 57 | + data = chartLine(data, 0, 9, 2, 9) |
| 58 | + data = chartLine(data, 3, 4, 1, 4) |
| 59 | + expect(render(data)).to.equal(sampleMap) |
| 60 | + }) |
| 61 | + }) |
| 62 | + it('skips diagonal lines', () => { |
| 63 | + // 10x10 empty grid |
| 64 | + let data = [...new Array(10)].map(() => { |
| 65 | + return [...new Array(10)].map(() => 0) |
| 66 | + }) |
| 67 | + // Map some lines |
| 68 | + parsedTestData.forEach((row) => { |
| 69 | + data = chartLine(data, ...row) |
| 70 | + }) |
| 71 | + expect(render(data)).to.equal(sampleMap) |
| 72 | + }) |
| 73 | + }) |
| 74 | +}) |
0 commit comments