diff --git a/functions/src/day2.ts b/functions/src/day2.ts new file mode 100644 index 0000000..3c32137 --- /dev/null +++ b/functions/src/day2.ts @@ -0,0 +1,31 @@ +import Utils from "./utils"; + +class Day2 { + static part1(input: string[]): number { + + const forwardMoves = input.filter(s => s.startsWith("forward")) + .map(s => this.readUnits(s)); + const finalForwardPosition = Utils.sum(forwardMoves); + + const depthMovesUp = input.filter(s => s.startsWith("up")) + .map(s => this.readUnits(s)); + const depthMovesDown = input.filter(s => s.startsWith("down")) + .map(s => this.readUnits(s)); + const finalDepthPosition = Utils.sum(depthMovesDown) - Utils.sum(depthMovesUp); + + return finalForwardPosition * finalDepthPosition; + } + + static part2(input: string[]): number { + + + // TODO implement + return 0; + } + + private static readUnits(input: string): number { + return parseInt(input.substr(input.indexOf(' ') + 1)); + } +} + +export default Day2; \ No newline at end of file diff --git a/functions/src/index.ts b/functions/src/index.ts index 9b2d5e1..2a20c89 100644 --- a/functions/src/index.ts +++ b/functions/src/index.ts @@ -2,6 +2,7 @@ import * as functions from "firebase-functions"; import Utils from "./utils"; import Day1 from "./day1"; import {Response} from "firebase-functions"; +import Day2 from "./day2"; // // Start writing Firebase Functions @@ -23,7 +24,14 @@ export const day = { 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) => { + + const input = Utils.parseInput(request); + const part1 = Day2.part1(input); + const part2 = Day2.part2(input); sendResponse(response, part1, part2); }), diff --git a/functions/src/utils.ts b/functions/src/utils.ts index 2b96e5f..7851b36 100644 --- a/functions/src/utils.ts +++ b/functions/src/utils.ts @@ -12,6 +12,10 @@ class Utils { throw Error("Invalid request"); } } + + static sum(values: number[]): number { + return values.reduce((a, b) => a + b, 0); + } } export default Utils; \ No newline at end of file diff --git a/input/day/2-example.http b/input/day/2-example.http new file mode 100644 index 0000000..0d051b4 --- /dev/null +++ b/input/day/2-example.http @@ -0,0 +1,11 @@ +POST http://localhost:5001/advent-of-code-2021-911a8/europe-west1/day-2 +Content-Type: text/plain + +forward 5 +down 5 +forward 8 +up 3 +down 8 +forward 2 + +### diff --git a/input/day/2.http b/input/day/2.http new file mode 100644 index 0000000..15e8c1a --- /dev/null +++ b/input/day/2.http @@ -0,0 +1,1005 @@ +POST http://localhost:5001/advent-of-code-2021-911a8/europe-west1/day-2 +Content-Type: text/plain + +forward 4 +down 9 +forward 2 +forward 2 +down 7 +up 2 +down 9 +up 8 +down 7 +down 9 +forward 4 +up 6 +down 2 +down 5 +down 1 +down 5 +forward 2 +up 4 +forward 2 +forward 3 +up 2 +forward 6 +up 8 +forward 8 +down 8 +up 8 +down 7 +down 2 +down 9 +forward 2 +forward 9 +down 4 +forward 8 +up 6 +down 3 +up 9 +forward 1 +forward 6 +up 3 +forward 8 +up 9 +forward 1 +down 9 +down 3 +down 7 +up 2 +up 7 +down 5 +forward 3 +down 1 +up 6 +down 2 +forward 4 +down 6 +down 8 +forward 2 +down 5 +forward 6 +down 5 +down 7 +forward 8 +forward 2 +down 9 +up 4 +forward 6 +forward 4 +up 6 +down 9 +down 7 +down 9 +forward 9 +forward 8 +down 7 +up 7 +forward 9 +forward 8 +up 1 +up 4 +down 3 +forward 6 +up 6 +down 2 +up 3 +down 6 +down 5 +forward 8 +forward 3 +forward 8 +down 4 +down 4 +down 5 +forward 6 +down 5 +forward 6 +down 2 +down 5 +up 4 +down 8 +up 5 +forward 5 +forward 6 +down 9 +up 5 +down 2 +forward 5 +down 7 +up 7 +down 9 +forward 2 +down 3 +down 3 +forward 8 +up 5 +up 1 +forward 1 +forward 3 +down 5 +forward 8 +forward 7 +forward 8 +down 5 +down 8 +up 2 +forward 8 +forward 8 +down 7 +forward 1 +forward 7 +down 6 +up 4 +forward 7 +forward 7 +down 3 +up 7 +forward 2 +down 7 +down 4 +forward 5 +down 8 +forward 9 +down 7 +forward 5 +up 6 +up 6 +down 8 +down 3 +forward 5 +forward 3 +down 8 +up 7 +forward 8 +up 6 +down 2 +forward 4 +up 3 +up 3 +down 9 +down 9 +up 1 +up 7 +forward 2 +down 1 +forward 9 +up 7 +up 6 +down 2 +down 3 +forward 4 +down 3 +down 3 +down 1 +forward 4 +forward 8 +forward 6 +forward 3 +up 4 +up 5 +up 4 +forward 1 +up 3 +down 9 +up 6 +forward 2 +down 5 +down 1 +forward 8 +forward 2 +down 6 +up 5 +up 3 +forward 7 +forward 2 +forward 7 +up 9 +forward 3 +up 9 +forward 1 +down 9 +forward 9 +down 3 +down 3 +down 2 +forward 9 +forward 2 +up 3 +forward 3 +down 7 +down 3 +forward 2 +forward 1 +forward 6 +up 9 +forward 4 +down 9 +down 8 +up 3 +up 5 +forward 8 +down 9 +forward 5 +forward 4 +down 5 +up 4 +forward 7 +forward 3 +down 9 +forward 7 +down 2 +down 7 +forward 3 +up 3 +forward 7 +down 9 +down 4 +down 8 +forward 8 +down 6 +forward 9 +forward 4 +up 9 +down 9 +down 6 +up 7 +up 2 +forward 2 +forward 7 +down 7 +forward 9 +down 6 +down 2 +forward 4 +forward 8 +down 4 +forward 4 +forward 4 +forward 6 +up 6 +down 9 +down 3 +down 7 +up 2 +up 2 +forward 4 +down 4 +forward 6 +down 2 +down 2 +forward 1 +down 1 +forward 7 +up 5 +forward 9 +forward 8 +down 4 +forward 8 +down 5 +up 4 +down 8 +forward 4 +forward 7 +down 9 +down 3 +forward 6 +down 6 +forward 6 +down 9 +down 6 +forward 5 +forward 5 +up 9 +down 9 +down 9 +down 1 +down 5 +forward 5 +down 7 +forward 3 +down 6 +forward 5 +forward 8 +down 6 +forward 7 +down 5 +forward 4 +down 4 +down 9 +forward 3 +down 9 +down 9 +down 1 +up 7 +forward 4 +up 1 +up 1 +forward 1 +down 9 +up 8 +down 8 +down 3 +down 7 +forward 4 +down 5 +down 5 +forward 7 +forward 7 +forward 6 +up 2 +down 4 +forward 8 +forward 3 +forward 3 +forward 2 +forward 4 +up 9 +up 1 +forward 2 +forward 2 +forward 6 +down 9 +up 8 +forward 4 +forward 5 +forward 4 +down 4 +down 8 +forward 6 +down 8 +forward 9 +forward 8 +down 1 +down 2 +forward 2 +up 4 +up 7 +forward 5 +down 7 +down 5 +down 3 +up 7 +down 4 +forward 8 +up 8 +down 1 +down 2 +up 6 +up 8 +forward 9 +down 5 +down 2 +forward 5 +forward 4 +up 6 +forward 7 +down 3 +up 5 +up 9 +forward 5 +forward 1 +down 6 +down 7 +forward 9 +down 8 +down 2 +forward 9 +forward 2 +down 3 +forward 9 +down 3 +down 9 +up 3 +forward 7 +up 2 +up 5 +forward 3 +down 9 +up 1 +down 2 +down 4 +down 6 +forward 5 +forward 5 +up 7 +up 3 +down 1 +down 1 +up 8 +down 4 +forward 1 +down 4 +down 5 +down 9 +forward 7 +up 2 +up 1 +down 7 +forward 9 +forward 9 +forward 8 +forward 9 +down 5 +forward 9 +forward 9 +up 9 +down 7 +down 8 +forward 2 +forward 9 +down 1 +forward 3 +forward 8 +up 4 +down 4 +forward 4 +forward 3 +down 7 +down 3 +forward 6 +forward 9 +forward 1 +down 2 +up 3 +down 9 +forward 5 +forward 6 +forward 8 +up 2 +up 1 +down 3 +up 4 +forward 1 +up 9 +forward 4 +down 1 +up 2 +down 8 +down 9 +forward 3 +down 2 +up 5 +forward 2 +down 6 +down 5 +down 8 +down 3 +down 7 +down 2 +forward 8 +down 9 +up 7 +down 7 +down 7 +down 7 +forward 4 +forward 1 +forward 9 +up 9 +forward 5 +forward 8 +forward 7 +forward 7 +down 1 +forward 3 +down 7 +forward 2 +forward 4 +up 7 +forward 1 +down 5 +forward 5 +forward 1 +down 8 +forward 7 +forward 2 +up 3 +down 1 +up 7 +down 1 +down 2 +forward 9 +forward 6 +forward 3 +forward 2 +down 4 +forward 7 +forward 7 +forward 5 +forward 7 +forward 2 +down 9 +down 8 +forward 8 +forward 9 +down 3 +up 7 +up 1 +down 4 +forward 2 +forward 7 +forward 3 +forward 9 +up 2 +down 3 +forward 4 +down 8 +down 6 +down 4 +down 6 +down 7 +forward 9 +down 9 +forward 8 +down 1 +down 1 +forward 1 +forward 1 +down 7 +down 3 +down 3 +forward 2 +down 7 +forward 8 +up 7 +down 5 +forward 7 +forward 9 +down 2 +forward 9 +forward 3 +forward 9 +forward 9 +down 3 +forward 1 +forward 7 +up 8 +forward 7 +forward 4 +forward 5 +forward 6 +down 4 +up 3 +down 5 +up 8 +up 5 +up 6 +forward 1 +down 1 +up 8 +down 8 +down 5 +forward 8 +up 9 +down 8 +forward 2 +up 6 +forward 3 +down 3 +down 8 +down 4 +forward 6 +forward 2 +down 9 +up 9 +down 2 +down 9 +up 1 +down 6 +up 2 +down 9 +forward 8 +forward 3 +forward 6 +down 6 +up 9 +up 8 +forward 4 +down 2 +forward 5 +up 4 +up 4 +down 5 +down 9 +forward 3 +down 1 +forward 1 +forward 6 +forward 2 +down 7 +forward 7 +up 5 +forward 2 +down 8 +forward 5 +down 1 +down 7 +forward 7 +down 4 +forward 7 +forward 2 +down 6 +forward 9 +forward 4 +up 3 +forward 8 +forward 2 +up 6 +up 3 +forward 9 +forward 4 +down 2 +forward 6 +down 1 +forward 5 +down 2 +up 1 +down 1 +forward 2 +forward 4 +down 7 +up 6 +forward 4 +forward 7 +up 8 +forward 3 +down 8 +forward 7 +down 2 +down 5 +forward 3 +forward 7 +down 5 +forward 2 +forward 8 +up 6 +forward 8 +down 7 +up 3 +down 2 +forward 2 +down 8 +down 2 +up 5 +up 1 +forward 6 +down 1 +forward 2 +down 1 +forward 6 +forward 9 +down 9 +down 8 +down 3 +forward 5 +forward 3 +down 3 +down 1 +forward 4 +forward 8 +forward 2 +down 7 +forward 9 +forward 4 +down 4 +forward 6 +down 4 +forward 8 +down 8 +down 2 +up 7 +down 9 +down 5 +up 4 +down 3 +up 5 +forward 8 +down 4 +down 6 +forward 1 +up 2 +down 6 +forward 4 +down 8 +forward 1 +up 7 +forward 6 +up 2 +forward 1 +down 8 +down 2 +forward 3 +down 3 +down 2 +up 9 +down 3 +down 4 +down 3 +forward 9 +down 6 +forward 8 +forward 8 +down 1 +forward 8 +down 5 +up 9 +up 5 +up 5 +forward 5 +forward 4 +down 7 +down 6 +forward 9 +up 4 +forward 7 +up 5 +forward 7 +down 5 +down 3 +forward 5 +down 8 +up 3 +forward 4 +up 2 +down 1 +down 6 +down 6 +up 3 +forward 5 +forward 8 +down 2 +forward 6 +down 5 +down 4 +forward 9 +down 6 +forward 6 +up 5 +forward 4 +forward 5 +forward 1 +up 6 +up 2 +down 8 +up 4 +up 2 +down 3 +forward 4 +down 5 +forward 8 +up 5 +forward 6 +forward 9 +down 6 +down 3 +up 3 +down 2 +up 9 +forward 5 +up 5 +forward 3 +forward 2 +down 5 +up 2 +down 5 +forward 8 +forward 2 +down 1 +up 2 +down 6 +up 8 +down 3 +down 2 +forward 2 +down 1 +forward 8 +forward 2 +up 6 +forward 6 +up 3 +up 8 +up 2 +up 4 +down 7 +forward 6 +down 3 +down 2 +forward 5 +down 7 +down 6 +forward 1 +down 4 +forward 4 +up 1 +down 3 +up 3 +down 4 +forward 1 +down 2 +forward 6 +down 7 +forward 3 +forward 1 +forward 5 +down 7 +down 9 +forward 7 +forward 2 +forward 7 +forward 8 +down 1 +down 1 +up 6 +forward 2 +up 7 +down 9 +up 4 +up 9 +forward 9 +forward 6 +down 3 +down 9 +forward 1 +forward 1 +up 8 +forward 6 +forward 1 +forward 9 +down 2 +down 1 +forward 2 +forward 9 +down 9 +down 6 +forward 5 +down 6 +forward 4 +down 3 +forward 1 +down 4 +up 5 +forward 6 +forward 3 +down 2 +up 3 +down 9 +down 2 +forward 1 +down 4 +up 2 +down 6 +forward 6 +forward 7 +forward 3 +forward 9 +up 7 +up 2 +forward 2 +up 2 +forward 1 +up 2 +forward 8 +forward 5 +down 6 +up 7 +down 4 +down 1 +up 8 +forward 1 +down 3 +up 8 +forward 8 +down 6 +down 1 +down 6 +forward 1 +forward 7 +up 3 +forward 6 +forward 1 +up 3 +down 5 +down 1 +forward 5 +down 5 +up 7 +up 3 +down 6 +forward 6 +up 7 +forward 5 +forward 2 +forward 1 +down 8 +forward 3 +down 3 +forward 5 +down 4 +up 4 +down 8 +down 7 +down 7 +up 9 +up 2 +down 4 +down 1 +down 4 +forward 9 +up 8 +up 4 +down 2 +forward 8 +forward 1 +down 2 +up 5 +down 3 +down 8 +down 8 +down 6 +down 5 +forward 7 +down 3 +forward 5 +down 6 +down 9 +down 2 +forward 8 +down 4 +up 2 +forward 4 +down 8 +down 5 +down 4 +forward 2 +up 3 +forward 4 +up 3 +down 8 +down 2 +up 8 +forward 4 +forward 6 +down 3 +forward 9 +forward 6 +forward 8 +forward 5 +forward 1 +forward 5 +down 3 +up 2 +forward 4 +down 4 +down 3 +forward 1 +forward 3 +forward 7 +forward 9 +down 2 +up 4 +down 3 +up 8 +forward 9 +down 5 +up 9 +down 1 +up 4 +forward 7 +forward 2 +forward 4 +up 8 +down 4 +down 1 +forward 8 +down 4 +down 7 +up 1 +down 3 +down 2 +forward 5 +up 6 +down 7 +forward 2 + +###