Skip to content

Instantly share code, notes, and snippets.

@gacardinal
Created December 6, 2020 04:45
Show Gist options
  • Save gacardinal/5ac19b6f3f5a0d86bb05120d2180167c to your computer and use it in GitHub Desktop.
Save gacardinal/5ac19b6f3f5a0d86bb05120d2180167c to your computer and use it in GitHub Desktop.
Advent of Code 2020 Day 5 TypeScript
import { readFileSync } from 'fs';
const findRowNumber = (address: string, lowerBoundary: number, upperBoundary: number): number => {
if (!address.length) {
return lowerBoundary;
}
const remainingAddress = address.slice(1);
const distance = ((upperBoundary - lowerBoundary) / 2);
if (address[0] === 'F' || address[0] === 'L') {
upperBoundary = Math.floor(upperBoundary - distance);
} else {
lowerBoundary = Math.ceil(lowerBoundary + distance);
}
return findRowNumber(remainingAddress, lowerBoundary, upperBoundary);
};
const getSeatId = (address: string) => {
const rowNumber = findRowNumber(address.slice(0, 7), 0, 127);
const colNumber = findRowNumber(address.slice(7), 0, 7);
return (rowNumber * 8) + colNumber;
};
const findSurroundedSeat = (seatIds: number[]) => {
for (let i = 0; i < seatIds.length - 2; i++) {
if (seatIds[i + 2] - seatIds[i] !== 2) {
return (seatIds[i + 1] + 1);
}
}
}
const boardingPasses = readFileSync('input.txt').toString('utf8').split('\n');
const seatIds = boardingPasses.map(bp => getSeatId(bp));
console.log(`Chapter 1: ${Math.max(...seatIds)}`);
seatIds.sort((a, b) => a - b)
console.log(`Chapter 2 : ${findSurroundedSeat(seatIds)}`);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment