From ed6a91564fb67b9a7c8e99d891a78b1a76100489 Mon Sep 17 00:00:00 2001 From: derped Date: Tue, 6 Dec 2022 07:11:23 +0100 Subject: [PATCH] Day 06 --- deno.json | 3 +- src/06_TuningTrouble/TuningTrouble.ts | 44 +++++++++++++++++++++++++++ src/06_TuningTrouble/input.txt | 1 + 3 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 src/06_TuningTrouble/TuningTrouble.ts create mode 100644 src/06_TuningTrouble/input.txt diff --git a/deno.json b/deno.json index ff01145..f76fb8a 100644 --- a/deno.json +++ b/deno.json @@ -29,6 +29,7 @@ "Day02": "cd ./src/02_RockPaperScissors && deno run --allow-read=./input.txt RockPaperScissors.ts", "Day03": "cd ./src/03_RucksackReorganization && deno run --allow-read=./input.txt RucksackReorganization.ts", "Day04": "cd ./src/04_CampCleanup && deno run --allow-read=./input.txt CampCleanup.ts", - "Day05": "cd ./src/05_SupplyStacks && deno run --allow-read=./input.txt SupplyStacks.ts" + "Day05": "cd ./src/05_SupplyStacks && deno run --allow-read=./input.txt SupplyStacks.ts", + "Day06": "cd ./src/06_TuningTrouble && deno run --allow-read=./input.txt TuningTrouble.ts" } } diff --git a/src/06_TuningTrouble/TuningTrouble.ts b/src/06_TuningTrouble/TuningTrouble.ts new file mode 100644 index 0000000..7939a04 --- /dev/null +++ b/src/06_TuningTrouble/TuningTrouble.ts @@ -0,0 +1,44 @@ +const input = Deno.readTextFileSync('./input.txt').trimEnd(); + +function findMsgFrame(stream: string, messageLength: number) { + for (let index = messageLength; index < stream.length; index++) { + const frame = new Set(stream.slice(index - messageLength, index)); + if (frame.size === messageLength) return index; + } + return -1; +} + +function findMsgSlidingFrame(stream: string, messageLength: number) { + const frame: Record = {}; + for (let index = 0; index < stream.length; index++) { + const charAdd = stream[index]; + frame[charAdd] = charAdd in frame ? ++frame[charAdd] : 1; + + const charRemove = stream[index - messageLength]; + const count = frame[charRemove]; + if (count > 1) frame[charRemove] = --frame[charRemove]; + else delete frame[charRemove]; + + if (Object.keys(frame).length === messageLength) return ++index; + } + return -1; +} + +function findMsgRegex(stream: string, messageLength: number) { + let re = '(.)'; + const backRefs = []; + for (let i = 1; i < messageLength; i++) { + backRefs.push(`\\${i}`); + re += `(.)(?