Shit works
This commit is contained in:
parent
37169583ff
commit
b5d2058553
308
src/6/index.ts
308
src/6/index.ts
@ -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);
|
||||||
Loading…
x
Reference in New Issue
Block a user