From 8b3963fa6a5175d65c2ebf249b51a6cf428c63a2 Mon Sep 17 00:00:00 2001 From: Bas Dado Date: Sun, 5 Dec 2021 11:25:07 +0100 Subject: [PATCH] [CLEANUP] Code cleanup to reduce the amount of duplicate code each day --- functions/src/day.ts | 7 +++++++ functions/src/day1.ts | 7 ++++--- functions/src/day2.ts | 19 ++++++++++--------- functions/src/day3.ts | 13 +++++++------ functions/src/index.ts | 32 +++++++++++--------------------- functions/src/utils.ts | 2 +- 6 files changed, 40 insertions(+), 40 deletions(-) create mode 100644 functions/src/day.ts diff --git a/functions/src/day.ts b/functions/src/day.ts new file mode 100644 index 0000000..3c192d4 --- /dev/null +++ b/functions/src/day.ts @@ -0,0 +1,7 @@ + +interface Day { + part1(input: string[]): number; + part2(input: string[]): number; +} + +export default Day; \ No newline at end of file diff --git a/functions/src/day1.ts b/functions/src/day1.ts index a60b608..fb284a2 100644 --- a/functions/src/day1.ts +++ b/functions/src/day1.ts @@ -1,6 +1,7 @@ +import Day from "./day"; -class Day1 { - static part1(input: string[]): number { +class Day1 implements Day { + part1(input: string[]): number { const values = input.map(s => parseInt(s)); let res = 0; @@ -10,7 +11,7 @@ class Day1 { return res; } - static part2(input: string[]): number { + part2(input: string[]): number { const values = input.map(s => parseInt(s)); let res = 0; diff --git a/functions/src/day2.ts b/functions/src/day2.ts index 99a0597..67ca6b7 100644 --- a/functions/src/day2.ts +++ b/functions/src/day2.ts @@ -1,22 +1,23 @@ import Utils from "./utils"; +import Day from "./day"; -class Day2 { - static part1(input: string[]): number { +class Day2 implements Day { + part1(input: string[]): number { const forwardMoves = input.filter(s => s.startsWith("forward")) - .map(s => this.readUnits(s)); + .map(s => Day2.readUnits(s)); const finalForwardPosition = Utils.sum(forwardMoves); const depthMovesUp = input.filter(s => s.startsWith("up")) - .map(s => this.readUnits(s)); + .map(s => Day2.readUnits(s)); const depthMovesDown = input.filter(s => s.startsWith("down")) - .map(s => this.readUnits(s)); + .map(s => Day2.readUnits(s)); const finalDepthPosition = Utils.sum(depthMovesDown) - Utils.sum(depthMovesUp); return finalForwardPosition * finalDepthPosition; } - static part2(input: string[]): number { + part2(input: string[]): number { let depth = 0; let aim = 0; @@ -24,11 +25,11 @@ class Day2 { for (const entry of input) { if (entry.startsWith("up")) { - aim -= this.readUnits(entry); + aim -= Day2.readUnits(entry); } else if (entry.startsWith("down")) { - aim += this.readUnits(entry); + aim += Day2.readUnits(entry); } else if (entry.startsWith("forward")) { - const movement = this.readUnits(entry); + const movement = Day2.readUnits(entry); depth += aim * movement; x += movement; } diff --git a/functions/src/day3.ts b/functions/src/day3.ts index ceed1b2..4e2bdf7 100644 --- a/functions/src/day3.ts +++ b/functions/src/day3.ts @@ -1,12 +1,13 @@ import Utils from "./utils"; +import Day from "./day"; -class Day3 { +class Day3 implements Day { - public static part1(input: string[]): number { + public part1(input: string[]): number { - let sums = Utils.zeroes(input[0].length); + const sums = Utils.zeroes(input[0].length); - for (let value of input) { + for (const value of input) { for (let i = 0; i < value.length; i++) { if (value[i] === "1") { sums[i] += 1; @@ -20,9 +21,9 @@ class Day3 { return gamma * epsilon; } - public static part2(input: string[]): number { + public part2(input: string[]): number { - return this.findLifeSupportRating(input, "oxygen") * this.findLifeSupportRating(input, "CO2"); + return Day3.findLifeSupportRating(input, "oxygen") * Day3.findLifeSupportRating(input, "CO2"); } static findLifeSupportRating(input: string[], type: "oxygen" | "CO2"): number { diff --git a/functions/src/index.ts b/functions/src/index.ts index b389afe..fc50a5d 100644 --- a/functions/src/index.ts +++ b/functions/src/index.ts @@ -1,9 +1,10 @@ import * as functions from "firebase-functions"; import Utils from "./utils"; import Day1 from "./day1"; -import {Response} from "firebase-functions"; +import {Request, Response} from "firebase-functions"; import Day2 from "./day2"; import Day3 from "./day3"; +import Day from "./day"; // // Start writing Firebase Functions @@ -20,30 +21,19 @@ interface DayResult { } export const day = { - 1: functions.region("europe-west1").https.onRequest((request, response) => { + 1: functions.region("europe-west1").https.onRequest((request, response) => { processDay(new Day1(), request, response) }), + 2: functions.region("europe-west1").https.onRequest((request, response) => { processDay(new Day2(), request, response) }), + 3: functions.region("europe-west1").https.onRequest((request, response) => { processDay(new Day3(), request, response) }), - const input = Utils.parseInput(request); - const part1 = Day1.part1(input); - const part2 = Day1.part2(input); - sendResponse(response, part1, part2); +} - }), - 2: functions.region("europe-west1").https.onRequest((request, response) => { +function processDay(day: Day, request: Request, response: Response) { - const input = Utils.parseInput(request); - const part1 = Day2.part1(input); - const part2 = Day2.part2(input); - sendResponse(response, part1, part2); + const input = Utils.parseInput(request); + const part1 = day.part1(input); + const part2 = day.part2(input); + sendResponse(response, part1, part2); - }), - 3: functions.region("europe-west1").https.onRequest((request, response) => { - - const input = Utils.parseInput(request); - const part1 = Day3.part1(input); - const part2 = Day3.part2(input); - sendResponse(response, part1, part2); - - }), } function sendResponse(response: Response, part1: string | number, part2: string | number) { diff --git a/functions/src/utils.ts b/functions/src/utils.ts index d0445df..b85f13c 100644 --- a/functions/src/utils.ts +++ b/functions/src/utils.ts @@ -19,7 +19,7 @@ class Utils { static zeroes(length: number): number[] { - let res = []; + const res = []; for (let i = 0; i < length; i++) { res.push(0); }