Shit works

This commit is contained in:
MeerrettichMeister 2024-12-06 21:26:27 +01:00
parent 37169583ff
commit b5d2058553

View File

@ -139,155 +139,179 @@ let count = 0;
board1.visited.forEach(row => row.forEach(stop => stop === '?' ? count++ : count)) board1.visited.forEach(row => row.forEach(stop => stop === '?' ? count++ : count))
console.log(count) console.log(count)
//Bruteforce //Bruteforce
// const board2 = new Board(content); const board2 = new Board(content);
// let obsCounter = 0;
// for (let i = 0; i < board2.sizeY + 1; i++) {
// for (let j = 0; j < board2.sizeX + 1; j++) {
// const field = new Board(content)
// if ((i === field.posisiton.y && j === field.posisiton.x)) {
// continue;
// }
// if (field.board[i][j] === '#') {
// continue;
// }
// field.board[i][j] = '#'
// field.visited[i][j] = '#'
// const visited: Helper[][] = Array(field.sizeY+1).fill(undefined).map(() => Array(field.sizeX+1).fill({
// visited: false,
// direction: undefined
// }))
// let limit = false;
// let outOfBounds = false;
// while (!outOfBounds) {
// let free = false;
// while (!free) {
// switch (field.dir) {
// case "UP": {
// if (field.posisiton.y - 1 < 0 || field.board[field.posisiton.y - 1][field.posisiton.x] === '#') {
// field.nextDir();
// } else {
// free = true;
// }
// break;
// }
// case "RIGHT": {
// if (field.posisiton.x + 1 > field.sizeX || field.board[field.posisiton.y][field.posisiton.x + 1] === '#') {
// field.nextDir();
// } else {
// free = true;
// }
// break;
// }
// case "DOWN": {
// if (field.posisiton.y + 1 > field.sizeY || field.board[field.posisiton.y + 1][field.posisiton.x] === '#') {
// field.nextDir();
// } else {
// free = true;
// }
// break;
// }
// case "LEFT": {
// if (field.posisiton.x - 1 < 0 || field.board[field.posisiton.y][field.posisiton.x - 1] === '#') {
// field.nextDir();
// } else {
// free = true;
// }
// break;
// }
// }
// }
// if (visited[field.posisiton.y][field.posisiton.x].visited && visited[field.posisiton.y][field.posisiton.x].direction === field.dir) {
// limit = true;
// break;
// }
// visited[field.posisiton.y][field.posisiton.x] = {visited: true, direction: field.dir}
// field.visited[field.posisiton.y][field.posisiton.x] = '?';
// field.move();
// if (!(field.posisiton.x < field.sizeX && field.posisiton.x >= 0 && field.posisiton.y < field.sizeY && field.posisiton.y >= 0)) {
// outOfBounds = true;
// }
//
// }
// if (limit) {
// board2.board[i][j] = "O"
// // let output = "";
// // field.visited.forEach(row => {
// // row.forEach(char => output = output.concat(char))
// // output = output.concat('\n');
// // })
// // writeFileSync(`out\\output${i}${j}.txt`,output);
// obsCounter++;
// }
// }
// }
// console.log(obsCounter);
path.splice(0, 1);
let obsCounter = 0; let obsCounter = 0;
for (const point of path) { for (let i = 0; i < board2.sizeY + 1; i++) {
const field = new Board(content); for (let j = 0; j < board2.sizeX + 1; j++) {
if (field.posisiton.x === point.x && field.posisiton.y === point.y){ const field = new Board(content)
continue; if ((i === field.posisiton.y && j === field.posisiton.x)) {
} continue;
field.board[point.y][point.x] = '#' }
field.visited[point.y][point.x] = '#' if (field.board[i][j] === '#') {
const visited: Helper[][] = Array(field.sizeY + 1).fill(undefined).map(() => Array(field.sizeX + 1).fill({ continue;
visited: false, }
direction: undefined field.board[i][j] = '#'
})) field.visited[i][j] = '#'
let limit = false; const visited: Helper[][] = Array(field.sizeY+1).fill(undefined).map(() => Array(field.sizeX+1).fill({
let outOfBounds = false; visited: false,
while (!outOfBounds) { direction: undefined
let free = false; }))
while (!free) { let limit = false;
switch (field.dir) { let outOfBounds = false;
case "UP": { while (!outOfBounds) {
if (field.posisiton.y - 1 < 0 || field.board[field.posisiton.y - 1][field.posisiton.x] === '#') { let free = false;
field.nextDir(); while (!free) {
} else { switch (field.dir) {
free = true; case "UP": {
if (field.posisiton.y - 1 < 0) {
outOfBounds = true;
free = true;
} else if (field.board[field.posisiton.y - 1][field.posisiton.x] === '#') {
field.nextDir();
} else {
free = true;
}
break;
} }
break; case "RIGHT": {
} if (field.posisiton.x + 1 > field.sizeX) {
case "RIGHT": { outOfBounds = true;
if (field.posisiton.x + 1 > field.sizeX || field.board[field.posisiton.y][field.posisiton.x + 1] === '#') { free = true;
field.nextDir(); } else if (field.board[field.posisiton.y][field.posisiton.x + 1] === '#') {
} else { field.nextDir();
free = true; } else {
free = true;
}
break;
} }
break; case "DOWN": {
} if (field.posisiton.y + 1 > field.sizeY) {
case "DOWN": { outOfBounds = true;
if (field.posisiton.y + 1 > field.sizeY || field.board[field.posisiton.y + 1][field.posisiton.x] === '#') { free = true;
field.nextDir(); } else if (field.board[field.posisiton.y + 1][field.posisiton.x] === '#') {
} else { field.nextDir();
free = true; } else {
free = true;
}
break;
} }
break; case "LEFT": {
} if (field.posisiton.x - 1 < 0) {
case "LEFT": { outOfBounds = true;
if (field.posisiton.x - 1 < 0 || field.board[field.posisiton.y][field.posisiton.x - 1] === '#') { free = true;
field.nextDir(); } else if (field.board[field.posisiton.y][field.posisiton.x - 1] === '#') {
} else { field.nextDir();
free = true; } else {
free = true;
}
break;
} }
break;
} }
} }
} if (visited[field.posisiton.y][field.posisiton.x].visited && visited[field.posisiton.y][field.posisiton.x].direction === field.dir) {
if (visited[field.posisiton.y][field.posisiton.x].visited && visited[field.posisiton.y][field.posisiton.x].direction === field.dir) { limit = true;
limit = true; break;
break; }
} visited[field.posisiton.y][field.posisiton.x] = {visited: true, direction: field.dir}
visited[field.posisiton.y][field.posisiton.x] = {visited: true, direction: field.dir} field.visited[field.posisiton.y][field.posisiton.x] = '?';
field.visited[field.posisiton.y][field.posisiton.x] = '?'; field.move();
field.move(); if (!(field.posisiton.x < field.sizeX && field.posisiton.x >= 0 && field.posisiton.y < field.sizeY && field.posisiton.y >= 0)) {
if (!(field.posisiton.x < field.sizeX && field.posisiton.x >= 0 && field.posisiton.y < field.sizeY && field.posisiton.y >= 0)) { outOfBounds = true;
outOfBounds = true; }
}
} }
if (limit) { if (limit) {
obsCounter++; board2.board[i][j] = "O"
// let output = "";
// field.visited.forEach(row => {
// row.forEach(char => output = output.concat(char))
// output = output.concat('\n');
// })
// writeFileSync(`out\\output${i}${j}.txt`,output);
obsCounter++;
}
} }
} }
console.log(obsCounter); console.log(obsCounter);
path.splice(0, 1);
// let obsCounter = 0;
// for (const point of path) {
// const field = new Board(content);
// if (field.posisiton.x === point.x && field.posisiton.y === point.y) {
// continue;
// }
// field.board[point.y][point.x] = '#'
// field.visited[point.y][point.x] = '#'
// const visited: Helper[][] = Array(field.sizeY + 1).fill(undefined).map(() => Array(field.sizeX + 1).fill({
// visited: false,
// direction: undefined
// }))
// let limit = false;
// let outOfBounds = false;
// while (!outOfBounds) {
// let free = false;
// while (!free) {
// switch (field.dir) {
// case "UP": {
// if (field.posisiton.y - 1 < 0) {
// outOfBounds = true;
// free = true;
// } else if (field.board[field.posisiton.y - 1][field.posisiton.x] === '#') {
// field.nextDir();
// } else {
// free = true;
// }
// break;
// }
// case "RIGHT": {
// if (field.posisiton.x + 1 > field.sizeX) {
// outOfBounds = true;
// free = true;
// } else if (field.board[field.posisiton.y][field.posisiton.x + 1] === '#') {
// field.nextDir();
// } else {
// free = true;
// }
// break;
// }
// case "DOWN": {
// if (field.posisiton.y + 1 > field.sizeY) {
// outOfBounds = true;
// free = true;
// } else if (field.board[field.posisiton.y + 1][field.posisiton.x] === '#') {
// field.nextDir();
// } else {
// free = true;
// }
// break;
// }
// case "LEFT": {
// if (field.posisiton.x - 1 < 0) {
// outOfBounds = true;
// free = true;
// } else if (field.board[field.posisiton.y][field.posisiton.x - 1] === '#') {
// field.nextDir();
// } else {
// free = true;
// }
// break;
// }
// }
// }
// if (visited[field.posisiton.y][field.posisiton.x].visited && visited[field.posisiton.y][field.posisiton.x].direction === field.dir) {
// limit = true;
// break;
// }
// visited[field.posisiton.y][field.posisiton.x] = {visited: true, direction: field.dir}
// field.visited[field.posisiton.y][field.posisiton.x] = '?';
// field.move();
// if (!(field.posisiton.x < field.sizeX && field.posisiton.x >= 0 && field.posisiton.y < field.sizeY && field.posisiton.y >= 0)) {
// outOfBounds = true;
// }
//
// }
// if (limit) {
// obsCounter++;
// }
// }
// console.log(obsCounter);