Skip to content

Commit e46b3a1

Browse files
authored
Merge pull request #12 from lundgren2/day11
Add day 11 2020
2 parents 532c91a + 764dd01 commit e46b3a1

File tree

8 files changed

+267
-0
lines changed

8 files changed

+267
-0
lines changed
File renamed without changes.
File renamed without changes.
File renamed without changes.

src/2020/day11/input

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
LLLLL.L.LLLLLLL.LL.LLLLL.LLLLLLL..LLLLL.LLLLL.L..LLLLL..LLLLLLLL.LLLL.LLL.LLLLLLL.LLLLLLLLLL
2+
LLLLLLL.LLLLL..LLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLL.LLLLLL.LL.LLLLLLLLL.LLLLLL.LLLLLLLLLL
3+
LLLL.LLLLLLLL.LLLLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLL.LLLLL.LLLLLLLLL.LLLLLLLLL.LLLLLL.LLLL.LLLLL
4+
LLLLLL.LLLLLLLLLLLLLLLL.LLLLLL.LLLLLLLL.L.LLL.LLLLLLLL.LLLLLL.LLLLLLLLLLLL.LLLLLL.LLLL.LLLLL
5+
LLLLLLLLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLLL.LLL.L.LLLLLLLL.LLLLLLLLL.LLLLLLLL..LLLLLLLLLLLLL.LLL
6+
LLLLLLL.LLLLL.LLLLLLLLL.LLLLLLLL.LLLLLL.LLLLL.LL.LLLLLL.LLLLL.LL.LLLLLLLLL..LLLLLLLLLLLLLLLL
7+
L.....L.....LL.LL.L.L..L............L.L.L.........L...L...LLLL..L.....L.L.L.....L.LLLL.....L
8+
LLLLLLL.LLLLL.LLLLLLLLL.LLLLLLLL..LLLLL.LLLLLLLL.LLLLL.LLL.LLLLL.LLLLLLLLL.LLLLLLLLLL.LLLLLL
9+
.LLLLLLLLLLLL.LLLLLLLLLLLLLLLLLL.LLLL.LLLLLLLLL.LLLLLL.LLL.LLLLL.LLLLLLLLL.LLLLLL.LLLLL.L.LL
10+
LLLL.LL.LLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLLLL
11+
LL.LLL..LLLLL.LLLLLLL.L.LLLLLLLL.LLLLLL.LLLLLLLL.LLLLL.LLLLLLLLL.LLLLLLLLLLLLLLLL.LLLLLLLLLL
12+
LLLLLLLLLLLLL..LLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLL..LLLLLLL..LLLLLLLLL.LLLLLL.LLLLLLLLLL
13+
LLLLLL..LLLLLLLLLLLLLLL.LLLLLLLLLLLLLLL.LLLLLLLL.LLLLL.LLLLLLLLLLLLLLLLLLL.LLLLLL.LLLLLLLLLL
14+
LLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLL.LLLLLL.LLL.LLLL.LLL.LLLLLLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLLLLL
15+
LLLLLLLLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLLL.LL.LLLLLLLLLLLLLLLLL.LLL.LLLLLLLLL.L.LLLL.LLLL.LLLLL
16+
LLLLLLL.LLLLL.LLLLLLLLL.LLLLLLLL.LLLLLL.LLLLL.LLLLLLLL.L.LLLLLLLLLLLLLLLL..LLLLLL.LLLLLLLLLL
17+
L..L..L.L.LLL.....L......LL.L.LL.L.LL....L.....LL..LL..LL...L....L.L.L......L..L.L.LL..LLLLL
18+
LLLLLLL.LLLLL.LLLLLLL.L.LLLL.LLLLLLLLLL.LLLLLLLL.LLLLL.LLLLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLLL
19+
LLLLLLLLLLLLL.LLLLLLLLL.LLLLLLL..LLLLLLLL.LLLLLL..LLLLLLLLLLLLLL.L.LLLLLLLLLLLLLL.LLLLLLLLLL
20+
LLLLLLL.LLLLL.LLLLLLLLL.LLLLLLLL.LLLLL.LLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLL.L.LLLLLL.LLLLLLLL.L
21+
LLLLLLL.LLLLL.LLLLLLLLLLLLL.LLLL.LLLLLL.LLLLLLL.LLLLL.LLLLLLLLLL.LLLLLLLLLLLLLLLL.LLLLLLLLL.
22+
LLLLL.LLLLLLL.LLLLLLLLL.LLLLLLLL.LLLLL..LLLLLLLL.LLL.L.LLLLLL.LLL.LLLLLLLL.LLLLLL..LLLLLLLLL
23+
LLLLL.LLLLL.L.LLLLL.LLL.LLLLLLLLLLLLLLL.LLLLLLLLLLLLLL.LLLLLLLLL.LLL.LLLLLLLLLLLL.LLLLLLLLLL
24+
LLLLLLL.LLLLLLLLLLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLL.LLLLLLLLLLLLLLL.LLLLLLLLL.LLL.LL.LLLLLLLLLL
25+
..LL..L.L..LL..L..LL...LLL.L.L.L.......L........L........L.L......L.L..LL...L..LLLLL..L.....
26+
LLLLLLL.LLLLL.LLLLLL.L..L.LLLLLL.LLLLLL.LLLLL.LLLLLLLL.LLLLLLLLL.LLLLLLLLL.LLLLLL.LLLLLLLLLL
27+
LLLLLLLLLL.LL.LLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLL.L.LLLLLLL.LLLLLLL.LLL.LLLL.LLLLLLL.LL
28+
LL.LLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLL.LLLLL.LL.L
29+
LLLLLLL.LLLLL.LLLLLLLLL.LLLLLLLLLL.LLLL.LLLLLLLL.LLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLL
30+
LLLLLLLLLLLLL.LLLLLLLLL.LLLLLLLLLLLLL.LLLLL.LLLL.LLLLL.LLLLLLLLLLLL.LLLLLL.LLLLLL.LLLLLLLLLL
31+
LLLLLLL.LLL.LLLLLLLLLLLL.LLLLLLLLLLLLLL.LLLLLLLL.LLLLL.LLLLLLLLL.LLLLLLLLLLL.LLLLLL.LLLLLLLL
32+
..LLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLL.LLLLLLLLLL.LLLLL.LLLLL.LLL.LLLLLLLLL.LLL.LL.LLLLLLLLLL
33+
LLLLLLL.LLLLL.LLLLLLLLL.LLLLLLLL.LLLLLL.LLLLLLLL.LLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLL.LLLLLLLLLL
34+
....L...L.....L.....LLLL......L.L......L........LL...L....LLLL....LL......LL...........L.L.L
35+
LLLLLLL.LLLLLLLLLLLL.LL.L.LL.LLLLLLLLLL.LLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLL.LL.LL..LLLLLLLLLL
36+
LLLL.LL.L.LLL.LLLLLLLLLLLLLLLLLL.LLLLLL.LLLLLLLL.L.LLL.LLLLLLLLL.LLLLLLLLL.LLLLLL.LLLLL.LLLL
37+
LLLLLLL.LLLLL..LLLLLLLL.LLLLLLLL.LLLLL..LLLLL.LLL.LLLLLLLLLLLLLL.LLLLLLLLL.LLLL.LLLLLLLLLLLL
38+
LLLLLLL.LLLLLLLLLLLLLLL.LLLLLLLL.LLLLL...LLLLLLLLLL.LL.LLLLLLLLLLLLLLLLL.L..LLLLL.LLLLLLLLLL
39+
LLLLLLL.LLLLLLLLLLLLLLL..LLL.LL..LLL....LLLLLLLL.LLLLL.LLLLLLLLLLLLL.LLLLL.LLLLLL.LLLLL.LLLL
40+
LLLLLLL.LLLLLLLL.LLLLLL.LLLLLLLLLLLLLLL.LLLLLLLLLLLLLL.LLLLLLLLLL..LLLLLLL.LLLLLL.LLLLLLLLLL
41+
LL.LLLLLLLLLLLLLLLLLLLL.LLLLLLLL.LLLLLL.LLLLLLLL.LLLLL.LLLLLLL.L.LLLLLLLLLLLLLLLLLLLLLLLLLLL
42+
L.LLLLLLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLLLLLLLL.LLL.LLLLL.LLLL.LLLL.LLLLLLLLL.LL.LL..LLLLLLLLLL
43+
LL......L.....LL....L.L..L.L.L..L..L......LL...L.L.L.LL..LLLL.LLL....L..L...L...L..L.LLL..L.
44+
LLLLLL.LL.LLLLLLLLLLLLL.LLLLLLLL.LLLLLL.LLLLLLLL.LLL.LLLLLLLLLLL.LLLLLLLLLLLLLLLL.LLLLLLLLLL
45+
LLLLLLLLLLLLLLLLLLLLLLL.LLLLL.LLLLLLLLLLLLLLLLLL.LLLLLL.LLLLLLLL.LLL.LLLLLLLLLLLLLLLLLLLLLLL
46+
LLLLLLL.LLLLL.LLLLLLLL..LLLLLLLL.LLLLLLLLLLLLLLL.LLLLL.LLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLL
47+
LLLL.LL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.L.LLLLLLLLLL.LLLL.LLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLL
48+
LLLLLLL.LLL.LLLLLLLLLLLLLLLLLLLL.LLLLLL.LLLLLLLL..LLLL.LLLLLLLLLL.LLLLLL.LLL.LL.L.LLLLLLLL.L
49+
LLLLLLL.LLLLL.LLLL.LLLLLLLLLLLLL.LL..LLLLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.L
50+
LLLLL.LLLLLLL.LLLLLLLLL.LLLLLLLL.LLLLLL.LLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLL.LLLLLL.LLLLLLLLLL
51+
LLL..LLLLLLLL.LLLLLLLLLLLLLL.LLL.LLLL.LLLLLLLLLL.LLLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLLL.LLLLLLLL
52+
.....L....L.......L...L..LL.LL.LL.L.L.L..L..L..LLL..L.......LL.LL..LL......LL.L..L....L.....
53+
LL.LLLL.LLLLL.LLLLLLLLL.LLLLL..LLLLLLLL..LLLLLLL.LLLLL.LLLLLLLLLLLLLLLLLLL.LLLLLL.LLLL..LLLL
54+
LLLLL.L.LLLLL.LLLLLLLLL.LLLLLLLL.LLLLLL.LLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLLLL.LLLLLL.LLLLLLLLLL
55+
LLLLLLL.LLLLL.LLLLLLLLL.LLLLLLLL.LLLLLL.LLLLLLLL.LLLLLLLLLLLL.LLLLLLLLLLLLLLLLLLLLLL.LLLLLLL
56+
LLLLLLLLLLLLL.LLLLLLLLLLLLLLLLLL.LLLLL..LLLLLLLLLLLLLL.LLLLLLLLL.L.LLLLLLLLLLLLLL.LLLLLLLLLL
57+
LLLLLLL.LLLLL.LLLLLLLLL.L.LLL.LL.LLLLLL.LLLLLLLL.LL..LLLLLLLLLLLLLLLLLLLLL.LLLLLL.LLLLLLLLLL
58+
.....LL.....L.L...............L..........LLL................LLLL.....L.L............L..L..LL
59+
LLLLLL..LLL.L.LLLLLLLLLLLLLL.LLL.LL.LLL.LLLLLLLLLLL.LL.LLLLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLLLLL
60+
LLL.LLL.LLLLL.LLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLL.LLL.LLLL.LLLLL.LLLLLLLLLL..LLLLL.LLLLLLLL.L
61+
LLLLLL..LLLLL.LLLL.LLLL.LLLLLLLL.LLLL.L.LLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLLLL.LLLLLLLLLLLLLLLLL
62+
LLLLLLL.LLLLLLLLL.LLLLL.LLLLLLLL.LLLLLL.LLLLLLLL.LLLLLLLLLLLLLLLLLL..LLLLLLLLLLLL.LLLLLLLLLL
63+
LLLLLLL.LLLLL.LLLLLLLLL.LLLLLLLLLLLLLLL.L.LLLLLL.LLLLL.LLLLLLLLL..LLL.LLLLLLLLLLLLLLLLLLLLLL
64+
.L.L.L.......L...LL....LLL.L.....LL..L.L..LLLL......L.LL......L.L.L.....LL...L....L..L.LL..L
65+
LLLLLLL.L.LLL.LLLLLL.LL.LLLL.LLL.LLLLLL.LLLLLLLL.L..L.L.LLLLLLLL.LLLLLLLLL.LLL..LLLLL.LLLLLL
66+
LLLLLL..LLLLL.LLLLLLLLL.L.LLLLLL.LLLLLL.LLLLLLLL.LLLLL.LLLLLLLLLL..LLLLLLL.LLLLLL.LLLLLLLLLL
67+
LLLLLLLLLLLL..LLLLLLLLL.L.LLLLLLL.LLLLL.LLLL.LLL.LLLLL.LLLLLLLLL.LLLLLLLLL.LLLLLL.LLLLLLLLLL
68+
LLLLLLL.LLLLL.LLLLLLL.L.LLLLLLLLLLLLLLLLLLLLLLLL.LLLLL.LLLLLLLLL.LLLLLLLLL.LLLLLL.LLLLLLLLLL
69+
LLLL.LL.LLLLL.LLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLL.LLLLL.LLL.LLLLLLLLLLLLLLLL.LLLLLLLLLL
70+
LLLLL.L.LLLLL.LLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLLLL.LLLL.LLLLLLLLL.LLLLLLLLLLLLLLLL.LLLLL.LLL.
71+
L.......LL.....L..L....LLL..L..LL....LL....L.LL.......LLL.....LL.L...LLLLL..L..LL.LL.LL..LL.
72+
LLL.LLLLLLLLL.LLLLLLLLL.LLLLLLLL.LLLLLL.LLLLLL.L.LLLLLLLLLLLLLLLLL.LLLLLLL.LLLLLLLLLLLLLLLLL
73+
LLLLLLL.LL.LL.LLLLLLLLLLLLLLLLLL.LLLLLL.LLLLLL...LLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
74+
LLLLLLL.LLL.L.L.LLLLLLLLLLLLL.LLLLLLLL..LLLLLLL..LL.LLLLLLLLLLLL.LLLLLLLLL.LLLLLLLLL.LLLLLLL
75+
LLLLLLLLLLLLLL.LLLLLLLLLLLLLLLLL.LLLLLL.LLLLLLL..LLLLLLLLLLLLLLL.LLLLLLLLL.LLLLLL.LLLLLLLLLL
76+
LLLLLLL.LLLLL.LLLL.LLLL.LLLLLLLL.LL..LL.LLLLLLLL.LLLLL.LLLLLLLLL.LLLLLLLLLLLLLLLL.LLLL.LLLLL
77+
L.LLLLL.LLLLLLLLLLLLLLL.LLLLLL.L.LLLLLL.LLLLLLLL.LLLLL.LLLLLLLLL.LLL.LLLLLLLLLLLLLLLLLL.L.LL
78+
LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.L.LLLL.LLLLLLLLL.L.L..LLLL.LLLL.LLLLL.LLLLLLLLLL.LL.LLLLLLL
79+
LLLLLLLLLLLLLLLLLLL.LLL.LLLLLLLL.LLLLL..LLLLLLLL.LLL.L.LLLL.LLL..LLLLLLLLLLLLLLLLLLLL.LLLLLL
80+
.L..LL...LL...L..LL......L.LLLL.L...L.LL..LLL............LL....LL.LL..L..L...L...L...L...LL.
81+
LL.LLLL.LLLLLL.LLLLLL.L.LLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLLLLLLL.LLLLLLLLLL.LLLLLLLLLLLLLLL.L
82+
LLLLLLL.LLLLLLLLLLLLLLLLLLLLLLLL.LLLLLL.LLLLLLLL.LLLLL.LLLLLLLLL.LLLLLLLLLLLLLLLL.LLLLLLLLL.
83+
LLLLLLL.LLLLL.LLLLLLLLL.LLLLL.L..LLLLLLL.LLLLLL..LLLLL.LLLLLLLLL.LL.LLLLLL.LL.LL.LLLLLLLLLLL
84+
LLL.LLL.LLLLL.LLL.LLLLL.LLLLLLL.LLLLLLL.L.LLLLLL.LLLLLLLLLL.LLLL.LLLLLLLLLL.LLLLLLLLLLLLLLLL
85+
LLLLLLL.LLLLL..L.LLLLLL.LLLLLLLLLLLLLLLLLLLLLLLLLLLLLL.LLLLLLLLL.LLLLLLLLL.LLLLL..LLLLLLLLLL
86+
LLLLLLL.LLLLLLLLLLLLLLL..L.LLL.L.LLLLLL.LLLLLLLLLLL.LLLLLLL.LLLLLLLLLLLLLL.LLLLLL.LLLLLLLLLL
87+
LLLLLLL.LLLLLLLLLLLLLLLLLL.LLLLL.LLLLLL.LLL.L.LLLLLLLL.LLLLLLL.L..LLLLLLLL.LLLL.L.LLLLLLLLLL
88+
LLLLLLLLLLLLL.L.LLLLLL.LLLLLLLLL.LLLLLL.LLLLL.LLLLLLLL.LLLLLLLLLLLLLLLLLLL.LLLLLL.LLLL.LLLL.
89+
LLLLLLLLLLLLLLL.LLLL.LLLLLLLLLLLLLLLLLL.LLLLLLLL.LLLLL.LLLLLLLLLLLLL.LLLLL.LLLLLL..LLLLLLLLL
90+
LLLLLLL.LL.LL.LLLLLLLLL.LLLLLLLLLLLLLLL.L.LLLLLL.LLLLL.LLLLLLLLL.LLLLLLL.L.LLLLLLLLLLLLLLLLL

src/2020/day11/part1.ts

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
const cloneSeats = (seats: string[][]) => JSON.parse(JSON.stringify(seats));
2+
3+
const countOccupiedSeats = (seats: string[]) => {
4+
return seats.reduce((acc, seat) => {
5+
if (seat === '#') return acc + 1;
6+
return acc;
7+
}, 0);
8+
};
9+
10+
const countAdjacentSeats = (seats: string[][], i: number, j: number) => {
11+
const prevRow = seats[i - 1];
12+
const nextRow = seats[i + 1];
13+
const currentRow = seats[i];
14+
15+
return countOccupiedSeats([
16+
prevRow && prevRow[j], // UP
17+
nextRow && nextRow[j], // DOWN
18+
currentRow[j - 1] && currentRow[j - 1], // LEFT
19+
currentRow[j + 1] && currentRow[j + 1], // RIGHT
20+
prevRow && prevRow[j - 1] && prevRow[j - 1], // UP LEFT
21+
prevRow && prevRow[j + 1] && prevRow[j + 1], // UP RIGHT
22+
nextRow && nextRow[j - 1] && nextRow[j - 1], // DOWN LEFT
23+
nextRow && nextRow[j + 1] && nextRow[j + 1], // DOWN RIGHT
24+
]);
25+
};
26+
27+
// const printSeats = (seats: string[][]) => {
28+
// console.log(seats.map(seat => seat.join('').slice(0) + '\n').join(''));
29+
// };
30+
31+
const updateSeats = (seats: string[][]): string[][] => {
32+
const newSeats = cloneSeats(seats);
33+
let seatChanged = false;
34+
35+
for (let i = 0; i < seats.length; i++) {
36+
for (let j = 0; j < seats[0].length; j++) {
37+
if (seats[i][j] === 'L') {
38+
if (countAdjacentSeats(seats, i, j) === 0) {
39+
newSeats[i][j] = '#';
40+
seatChanged = true;
41+
}
42+
} else if (seats[i][j] === '#') {
43+
if (countAdjacentSeats(seats, i, j) >= 4) {
44+
newSeats[i][j] = 'L';
45+
seatChanged = true;
46+
}
47+
}
48+
}
49+
}
50+
51+
seats = cloneSeats(newSeats);
52+
// Update seats if state has changed
53+
if (seatChanged) return updateSeats(seats);
54+
return seats;
55+
};
56+
57+
export const part1 = (input: string) => {
58+
const seats = input.split('\n').map(a => a.split(''));
59+
// printSeats(seats);
60+
return countOccupiedSeats(updateSeats(seats).join(',').split(','));
61+
};

src/2020/day11/part2.ts

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
const cloneSeats = (seats: string[][]) => JSON.parse(JSON.stringify(seats));
2+
3+
const countOccupiedSeats = (seats: string[]) => {
4+
return seats.reduce((acc, seat) => {
5+
if (seat === '#') return acc + 1;
6+
return acc;
7+
}, 0);
8+
};
9+
10+
type Directions = Record<string, number[]>;
11+
12+
export const countAdjacentSeats = (seats: string[][], i: number, j: number) => {
13+
const directions: Directions = {
14+
UP: [0, -1],
15+
DOWN: [0, 1],
16+
LEFT: [-1, 0],
17+
RIGHT: [1, 0],
18+
UP_LEFT: [-1, -1],
19+
UP_RIGHT: [1, -1],
20+
DOWN_LEFT: [-1, 1],
21+
DOWN_RIGHT: [1, 1],
22+
};
23+
24+
return Object.keys(directions).reduce((count, direction) => {
25+
const [stepX, stepY] = directions[direction];
26+
let x = j + stepX;
27+
let y = i + stepY;
28+
29+
while (x >= 0 && x < seats[0].length && y >= 0 && y < seats.length) {
30+
if (seats[y][x] === 'L') return count;
31+
else if (seats[y][x] === '#') return count + 1;
32+
x += stepX;
33+
y += stepY;
34+
}
35+
return count;
36+
}, 0);
37+
};
38+
39+
const updateSeats = (seats: string[][]): string[][] => {
40+
const newSeats = cloneSeats(seats);
41+
let seatChanged = false;
42+
for (let i = 0; i < seats.length; i++) {
43+
for (let j = 0; j < seats[0].length; j++) {
44+
const currentSeat = seats[i][j];
45+
if (currentSeat === '.') continue;
46+
if (currentSeat === 'L') {
47+
if (countAdjacentSeats(seats, i, j) === 0) {
48+
newSeats[i][j] = '#';
49+
seatChanged = true;
50+
}
51+
} else if (currentSeat === '#') {
52+
if (countAdjacentSeats(seats, i, j) >= 5) {
53+
newSeats[i][j] = 'L';
54+
seatChanged = true;
55+
}
56+
}
57+
}
58+
}
59+
// Update seats if state has changed
60+
if (seatChanged) {
61+
return updateSeats(cloneSeats(newSeats));
62+
}
63+
return seats;
64+
};
65+
66+
export const part2 = (input: string) => {
67+
const seats = input.split('\n').map(a => a.split(''));
68+
return countOccupiedSeats(updateSeats(seats).join(',').split(','));
69+
};
70+
71+
// const printSeats = (seats: string[][]) => {
72+
// console.log(seats.map(seat => seat.join('').slice(0) + '\n').join(''));
73+
// };

src/2020/day11/test.spec.ts

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import {readInput} from '../../utils';
2+
3+
import {part1} from './part1';
4+
import {part2} from './part2';
5+
6+
describe('Advent of Code 2020 - Day 11', () => {
7+
let input: string;
8+
let testInput: string;
9+
beforeAll(async () => {
10+
input = await readInput(__dirname + '/input');
11+
testInput = await readInput(__dirname + '/test_input');
12+
});
13+
14+
describe('part 1', () => {
15+
it('should output 37 ', () => {
16+
expect(part1(testInput)).toBe(37);
17+
});
18+
19+
it('should output 2126 from input', () => {
20+
expect(part1(input)).toBe(2126);
21+
});
22+
});
23+
24+
describe('part 2', () => {
25+
it('should output 26 ', () => {
26+
expect(part2(testInput)).toBe(26);
27+
});
28+
29+
it('should output 1914 from input', () => {
30+
expect(part2(input)).toBe(1914);
31+
});
32+
});
33+
});

src/2020/day11/test_input

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
L.LL.LL.LL
2+
LLLLLLL.LL
3+
L.L.L..L..
4+
LLLL.LL.LL
5+
L.LL.LL.LL
6+
L.LLLLL.LL
7+
..L.L.....
8+
LLLLLLLLLL
9+
L.LLLLLL.L
10+
L.LLLLL.LL

0 commit comments

Comments
 (0)