Day 6 part 1

main
kirbylife 2024-12-10 00:51:53 -06:00
parent 80969f48f3
commit e389edd2b3
2 changed files with 95 additions and 3 deletions

92
day-6/main.js 100644
View File

@ -0,0 +1,92 @@
import fs from "node:fs";
const DIRECTIONS = {
UP: "up",
DOWN: "down",
LEFT: "left",
RIGHT: "right",
};
function rotate(currentDir) {
switch (currentDir) {
case DIRECTIONS.UP:
return DIRECTIONS.RIGHT;
case DIRECTIONS.RIGHT:
return DIRECTIONS.DOWN;
case DIRECTIONS.DOWN:
return DIRECTIONS.LEFT;
case DIRECTIONS.LEFT:
return DIRECTIONS.UP;
}
}
function getInput() {
const data = fs
.readFileSync("input2.txt", "utf8")
.split("\n")
.map((line) => line.split(""));
return data;
}
function part1() {
let data = getInput();
const HEIGHT = data.length;
const WIDTH = data[0].length;
let currentDir = DIRECTIONS.UP;
let actualPos = { x: 0, y: 0 };
// Search initial pos
for (let y = 0; y < HEIGHT; y++) {
const x = data[y].indexOf("^");
if (x == -1) continue;
data[y][x] = "X";
actualPos.y = y;
actualPos.x = x;
}
// console.log(actualPos);
// Start algorithm
let counter = 1;
let nextStep = null;
let newX = null;
let newY = null;
while (true) {
switch (currentDir) {
case DIRECTIONS.UP:
newY = actualPos.y - 1;
newX = actualPos.x;
break;
case DIRECTIONS.DOWN:
newY = actualPos.y + 1;
newX = actualPos.x;
break;
case DIRECTIONS.LEFT:
newY = actualPos.y;
newX = actualPos.x - 1;
break;
case DIRECTIONS.RIGHT:
newY = actualPos.y;
newX = actualPos.x + 1;
break;
}
nextStep = (data[newY] ?? [])[newX];
if (nextStep == undefined) break;
if (nextStep == ".") {
data[newY][newX] = "X";
actualPos.y = newY;
actualPos.x = newX;
counter++;
} else if (nextStep == "X") {
actualPos.y = newY;
actualPos.x = newX;
} else {
currentDir = rotate(currentDir);
}
}
console.log(counter);
// print board
// console.log(data.map((line) => line.join("")).join("\n"));
}
part1();

View File

@ -7,7 +7,8 @@ Día 1: Python
Día 2: Zig
Día 3: Bash
Día 4: LibreOffice Calc
Día 5: Julia
Día 5: Julia
Día 6: Javascript
Lenguajes por usar:
@ -19,12 +20,11 @@ Lenguajes por usar:
1. PHP
1. Java
1. Ruby
1. Javascript
1. ~~Javascript~~
1. ~~LibreOffice Calc~~
1. Rust
1. Nim
1. C#
1. Latino
1. D
1. ~~Bash~~
1. Crystal