Day 6 part 1
parent
80969f48f3
commit
e389edd2b3
|
@ -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();
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue