Skip to content

Commit

Permalink
2024/04
Browse files Browse the repository at this point in the history
  • Loading branch information
fabrice404 committed Dec 4, 2024
1 parent c12ab50 commit 807dab3
Show file tree
Hide file tree
Showing 4 changed files with 92 additions and 2 deletions.
89 changes: 89 additions & 0 deletions 2024/04/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
import AoCPuzzle from '../../puzzle';
import { Point } from '../../types';

export default class Puzzle extends AoCPuzzle {
private xmasWords = 0;

private highlightCell(p: Point): void {
this.grid[p.y][p.x] = `\x1b[42m${this.grid[p.y][p.x]}\x1b[0m`;
}

private findXmas(p: Point): void {
for (let y = -1; y <= 1; y += 1) {
for (let x = -1; x <= 1; x += 1) {
if (x === 0 && y === 0) {
continue;
}
if (
(p.y + (3 * y)) >= 0 && (p.y + (3 * y)) < this.grid.length &&
(p.x + (3 * x)) >= 0 && (p.x + (3 * x)) < this.grid[0].length &&
this.grid[p.y + (1 * y)][p.x + (1 * x)].includes("M") &&
this.grid[p.y + (2 * y)][p.x + (2 * x)].includes("A") &&
this.grid[p.y + (3 * y)][p.x + (3 * x)].includes("S")
) {
this.xmasWords += 1;
this.grid[p.y][p.x] = "\x1b[42mX\x1b[0m"
this.grid[p.y + (1 * y)][p.x + (1 * x)] = "\x1b[42mM\x1b[0m"
this.grid[p.y + (2 * y)][p.x + (2 * x)] = "\x1b[42mA\x1b[0m"
this.grid[p.y + (3 * y)][p.x + (3 * x)] = "\x1b[42mS\x1b[0m"
}
}
}
}

public async part1(): Promise<string | number> {
for (let y = 0; y < this.grid.length; y += 1) {
for (let x = 0; x < this.grid[y].length; x += 1) {
if (this.grid[y][x].includes("X")) {
this.findXmas({ x, y });
}
}
}

if (this.isExample) {
this.printGrid();
}
return this.xmasWords;
}

private masXShapedWords = 0;

private findMasXShapedWords(p: Point): void {
if (p.y >= 1 && p.y < this.grid.length - 1 &&
p.x >= 1 && p.x < this.grid[0].length - 1) {
const tl = this.grid[p.y - 1][p.x - 1]
const tr = this.grid[p.y - 1][p.x + 1]
const bl = this.grid[p.y + 1][p.x - 1]
const br = this.grid[p.y + 1][p.x + 1]

if (
((tl.includes('M') && br.includes('S')) || (tl.includes('S') && br.includes('M'))) &&
((tr.includes('M') && bl.includes('S')) || (tr.includes('S') && bl.includes('M')))
) {
this.masXShapedWords += 1;
this.highlightCell({ x: p.x, y: p.y });
this.highlightCell({ x: p.x - 1, y: p.y - 1 });
this.highlightCell({ x: p.x + 1, y: p.y - 1 });
this.highlightCell({ x: p.x - 1, y: p.y + 1 });
this.highlightCell({ x: p.x + 1, y: p.y + 1 });
}
}
}

public async part2(): Promise<string | number> {
this.setInput(this.input);

for (let y = 0; y < this.grid.length; y += 1) {
for (let x = 0; x < this.grid[y].length; x += 1) {
if (this.grid[y][x].includes("A")) {
this.findMasXShapedWords({ x, y });
}
}
}

if (this.isExample) {
this.printGrid();
}
return this.masXShapedWords;
}
}
1 change: 1 addition & 0 deletions 2024/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,3 +5,4 @@ Day | Part 1 | Part 1 | Part 2 | Part 2
1 | 0.070ms <br/><sub><sup>11</sup></sub> | 0.712ms <br/><sub><sup>2367773</sup></sub> | 0.037ms <br/><sub><sup>31</sup></sub> | 0.129ms <br/><sub><sup>21271939</sup></sub>
2 | 0.054ms <br/><sub><sup>2</sup></sub> | 0.686ms <br/><sub><sup>585</sup></sub> | 0.038ms <br/><sub><sup>4</sup></sub> | 0.757ms <br/><sub><sup>626</sup></sub>
3 | 0.102ms <br/><sub><sup>161</sup></sub> | 0.301ms <br/><sub><sup>162813399</sup></sub> | 0.087ms <br/><sub><sup>48</sup></sub> | 0.158ms <br/><sub><sup>53783319</sup></sub>
4 | 0.182ms <br/><sub><sup>18</sup></sub> | 2.555ms <br/><sub><sup>2569</sup></sub> | 0.161ms <br/><sub><sup>9</sup></sub> | 3.249ms <br/><sub><sup>1998</sup></sub>
2 changes: 1 addition & 1 deletion 2024/stats.json
Original file line number Diff line number Diff line change
@@ -1 +1 @@
{"1":{"part1ExampleResult":11,"part1ExampleTime":0.06974999999999909,"part1Result":2367773,"part1Time":0.7124579999999696,"part2ExampleResult":31,"part2ExampleTime":0.03674999999998363,"part2Result":21271939,"part2Time":0.12887499999999363},"2":{"part1ExampleResult":2,"part1ExampleTime":0.05358300000000327,"part1Result":585,"part1Time":0.6856249999999591,"part2ExampleResult":4,"part2ExampleTime":0.037833000000034644,"part2Result":626,"part2Time":0.7567500000000109},"3":{"part1ExampleResult":161,"part1ExampleTime":0.10170800000003055,"part1Result":162813399,"part1Time":0.30133299999999963,"part2ExampleResult":48,"part2ExampleTime":0.08725000000004002,"part2Result":53783319,"part2Time":0.15795799999995097}}
{"1":{"part1ExampleResult":11,"part1ExampleTime":0.06974999999999909,"part1Result":2367773,"part1Time":0.7124579999999696,"part2ExampleResult":31,"part2ExampleTime":0.03674999999998363,"part2Result":21271939,"part2Time":0.12887499999999363},"2":{"part1ExampleResult":2,"part1ExampleTime":0.05358300000000327,"part1Result":585,"part1Time":0.6856249999999591,"part2ExampleResult":4,"part2ExampleTime":0.037833000000034644,"part2Result":626,"part2Time":0.7567500000000109},"3":{"part1ExampleResult":161,"part1ExampleTime":0.10170800000003055,"part1Result":162813399,"part1Time":0.30133299999999963,"part2ExampleResult":48,"part2ExampleTime":0.08725000000004002,"part2Result":53783319,"part2Time":0.15795799999995097},"4":{"part1ExampleResult":18,"part1ExampleTime":0.18233299999997143,"part1Result":2569,"part1Time":2.5545000000000186,"part2ExampleResult":9,"part2ExampleTime":0.16058399999997164,"part2Result":1998,"part2Time":3.2487499999999727}}
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<!-- auto-generated -->
| Year | Stars | |
| --- | --- | --- |
| [2024](./2024) | 6 | ⭐️⭐️⭐️<br/>⭐️⭐️⭐️ |
| [2024](./2024) | 8 | ⭐️⭐️⭐️⭐️<br/>⭐️⭐️⭐️⭐️ |
| [2023](./2023) | 50 | ⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️<br/>⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️ |
| [2022](./2022) | 39 | ⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️<br/>⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️ |
| [2021](./2021) | 30 | ⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️<br/>⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️⭐️ |
Expand Down

0 comments on commit 807dab3

Please sign in to comment.