2023 - Day 1
This commit is contained in:
@@ -0,0 +1,63 @@
|
||||
const sample = await Deno.readTextFile("sample.txt");
|
||||
const sample2 = await Deno.readTextFile("sample2.txt");
|
||||
const input = await Deno.readTextFile("input.txt");
|
||||
|
||||
const wordsToNumbers: Record<string, number> = {
|
||||
one: 1,
|
||||
two: 2,
|
||||
three: 3,
|
||||
four: 4,
|
||||
five: 5,
|
||||
six: 6,
|
||||
seven: 7,
|
||||
eight: 8,
|
||||
nine: 9,
|
||||
};
|
||||
|
||||
const getNumberStringsFromString = (data: string): string[] =>
|
||||
data.match(/(\d)/g) ?? [];
|
||||
|
||||
const getNumberStringsAndNumberWordsFromString = (data: string): string[] =>
|
||||
Array.from(
|
||||
data.matchAll(
|
||||
new RegExp(`(?=(\\d|${Object.keys(wordsToNumbers).join("|")}))`, "gi"),
|
||||
),
|
||||
(x) => x[1],
|
||||
);
|
||||
|
||||
const replaceWordNumbersToNumbers = (data: string): string =>
|
||||
data.replace(
|
||||
new RegExp(Object.keys(wordsToNumbers).join("|"), "gi"),
|
||||
(match) => String(wordsToNumbers[match]),
|
||||
);
|
||||
|
||||
const solvePart1 = (data: string): number =>
|
||||
data
|
||||
.split("\n")
|
||||
.filter(Boolean)
|
||||
.map(getNumberStringsFromString)
|
||||
.map((numbers) => [
|
||||
numbers[0],
|
||||
numbers[numbers.length - 1],
|
||||
])
|
||||
.map(([a, b]) => parseFloat(a + b))
|
||||
.reduce((s, v) => s + v);
|
||||
|
||||
console.log("Sample:", solvePart1(sample)); // 142
|
||||
console.log("Input", solvePart1(input)); // 55090
|
||||
|
||||
const solvePart2 = (data: string): number =>
|
||||
data
|
||||
.split("\n")
|
||||
.filter(Boolean)
|
||||
.map(getNumberStringsAndNumberWordsFromString)
|
||||
.map((numbers) => numbers.map(replaceWordNumbersToNumbers))
|
||||
.map((numbers) => [
|
||||
numbers[0],
|
||||
numbers[numbers.length - 1],
|
||||
])
|
||||
.map(([a, b]) => parseFloat(a + b))
|
||||
.reduce((s, v) => s + v);
|
||||
|
||||
console.log("Sample2:", solvePart2(sample2)); //281
|
||||
console.log("Input", solvePart2(input)); //54845
|
||||
Reference in New Issue
Block a user