From b5d2058553985382546bd8c72260125ae6ec7c9a Mon Sep 17 00:00:00 2001 From: MeerrettichMeister Date: Fri, 6 Dec 2024 21:26:27 +0100 Subject: [PATCH] Shit works --- src/6/index.ts | 308 ++++++++++++++++++++++++++----------------------- 1 file changed, 166 insertions(+), 142 deletions(-) diff --git a/src/6/index.ts b/src/6/index.ts index 5bd388e..00a0626 100644 --- a/src/6/index.ts +++ b/src/6/index.ts @@ -139,155 +139,179 @@ let count = 0; board1.visited.forEach(row => row.forEach(stop => stop === '?' ? count++ : count)) console.log(count) //Bruteforce -// 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); +const board2 = new Board(content); 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 || field.board[field.posisiton.y - 1][field.posisiton.x] === '#') { - field.nextDir(); - } else { - free = true; +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) { + 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 || field.board[field.posisiton.y][field.posisiton.x + 1] === '#') { - field.nextDir(); - } else { - free = true; + 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; } - break; - } - case "DOWN": { - if (field.posisiton.y + 1 > field.sizeY || field.board[field.posisiton.y + 1][field.posisiton.x] === '#') { - field.nextDir(); - } else { - free = true; + 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; } - break; - } - case "LEFT": { - if (field.posisiton.x - 1 < 0 || field.board[field.posisiton.y][field.posisiton.x - 1] === '#') { - field.nextDir(); - } else { - free = true; + 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; } - 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 (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++; + } + 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); \ No newline at end of file +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); \ No newline at end of file