Task 02
This commit is contained in:
parent
d5e07fbd8d
commit
d2e5d7c9b4
|
@ -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) === '#';
|
||||
}
|
Loading…
Reference in New Issue