This commit is contained in:
Pilot 2020-12-03 01:52:53 -05:00 committed by pilot
parent d5e07fbd8d
commit d2e5d7c9b4
1 changed files with 41 additions and 15 deletions

View File

@ -23,13 +23,13 @@ let tasksResults: any[] = ['N/A', 'N/A'];
describe('Day 02', () => {
let sample = example.split('\n');
let m = (sample.length * 3) / sample[0].length;
let m = neededPanels(3, sample);
let input: string[];
let panels: number;
before(() => {
input = readFileSync('./input/2020-day-03.txt', 'utf-8')
.split('\n');
panels = (input.length * 3) / input[0].length;
panels = neededPanels(3, input);
})
describe('task01', () => {
it('find a safe location', () => {
@ -40,41 +40,67 @@ describe('Day 02', () => {
})
it('Calculate', () => {
assert.strictEqual(task01(m, sample), 7);
assert.strictEqual(task01(panels, input), 171);
tasksResults[0] = task01(panels, input)
});
});
describe('test02', () => {
it('Calculate', () => {
// assert.strictEqual(task02(input), 0);
// tasksResults[1] = task02(input);
assert.strictEqual(task02(1, 3, input), 171);
assert.strictEqual(task02(2, 1, sample), 2);
let slopes = [
task02(1, 1, input),
task02(1, 3, input),
task02(1, 5, input),
task02(1, 7, input),
task02(2, 1, input),
];
assert.strictEqual(slopes[1], 171);
tasksResults[1] = slopes.reduce((t, c) => {
console.log(c, t);
return t *= c
}, 1);
});
});
it('mark', () => {
task02(2, 1, input);
});
after(() => {
console.log('\ntask 01:', tasksResults[0]);
console.log('\ntask 02:', tasksResults[1]);
});
});
function task01(m: number, input: string[]): number {
let dist = 3;
function task01(panels: number, input: string[], down: number = 1, right: number = 3): number {
let trees = 0;
input.forEach((row: string, i: number) => {
trees += isTreeLocation(m, dist*i, row) ? 1 : 0;
});
for (let i = 0; i < input.length; i++) {
let d = i * down;
let r = i * right;
if (input[d]) {
trees += isTreeLocation(panels, r, input[d]) ? 1 : 0;
}
}
return trees;
}
// function task02(input: number[]): number {
// return task01(input);
// }
function task02(right: number, down: number, input: string[]): number {
return task01(neededPanels(down, input), input, right, down);
}
function neededPanels(y: number, i:string[]) {
return Math.ceil(i.length * y / i[0].length);
}
function isTreeLocation(m: number, col: number, pattern: string): boolean {
function isTreeLocation(panels: number, col: number, pattern: string): boolean {
let c = pattern;
for (let i = 0; i < m; i++) {
for (let i = 0; i < panels; i++) {
c += pattern;
}
// if (c.charAt(col) === '#') {
// console.log(c.substr(0, col) + 'X' + c.substr(col + 1));
// }
return c.charAt(col) === '#';
}