2021 - Day 2
This commit is contained in:
57
2021/02/solution.ts
Normal file
57
2021/02/solution.ts
Normal file
@@ -0,0 +1,57 @@
|
||||
const sample = await Deno.readTextFile("sample.txt");
|
||||
const input = await Deno.readTextFile("input.txt");
|
||||
|
||||
const solvePart1 = (data: string): number =>
|
||||
data
|
||||
.split("\n")
|
||||
.filter(Boolean)
|
||||
.map((line) => line.split(" "))
|
||||
.map(([action, amount]): [string, number] => [
|
||||
action,
|
||||
parseInt(amount) || 0,
|
||||
])
|
||||
.reduce(
|
||||
([h, d], [action, amount]): [number, number] => {
|
||||
if (action === "forward") {
|
||||
return [h + amount, d];
|
||||
} else if (action === "down") {
|
||||
return [h, d + amount];
|
||||
} else if (action === "up") {
|
||||
return [h, d - amount];
|
||||
}
|
||||
throw new Error(`Unknown action ${action}`);
|
||||
},
|
||||
[0, 0] as [number, number]
|
||||
)
|
||||
.reduce((total, value) => total * value, 1);
|
||||
|
||||
console.log("Sample:", solvePart1(sample));
|
||||
console.log("Input", solvePart1(input));
|
||||
|
||||
const solvePart2 = (data: string): number =>
|
||||
data
|
||||
.split("\n")
|
||||
.filter(Boolean)
|
||||
.map((line) => line.split(" "))
|
||||
.map(([action, amount]): [string, number] => [
|
||||
action,
|
||||
parseInt(amount) || 0,
|
||||
])
|
||||
.reduce(
|
||||
([h, d, a], [action, amount]): [number, number, number] => {
|
||||
if (action === "forward") {
|
||||
return [h + amount, d + amount * a, a];
|
||||
} else if (action === "down") {
|
||||
return [h, d, a + amount];
|
||||
} else if (action === "up") {
|
||||
return [h, d, a - amount];
|
||||
}
|
||||
throw new Error(`Unknown action ${action}`);
|
||||
},
|
||||
[0, 0, 0] as [number, number, number]
|
||||
)
|
||||
.filter((_, index) => index < 2)
|
||||
.reduce((total, value) => total * value, 1);
|
||||
|
||||
console.log("Sample:", solvePart2(sample));
|
||||
console.log("Input", solvePart2(input));
|
||||
Reference in New Issue
Block a user