Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 'use strict';
- class Position {
- constructor(x, y, key) {
- this.x = x;
- this.y = y;
- this.keys = []
- this.keys.push(key)
- }
- addKey(key) {
- this.keys.push(key)
- }
- }
- var positions = []
- positions.push(new Position(0, 0, 0))
- var currentX = 0
- var currentY = 0
- var currentKey = 0
- var navigation = 0
- function addStep(x, y) {
- if (positions.find(function(element) {
- return element.x == x && element.y == y
- }) == null) {
- positions.push(new Position(x, y, ++currentKey))
- } else {
- positions[positions.findIndex(function(element) {
- return element.x == x && element.y == y
- })].addKey(++currentKey)
- }
- currentX = x
- currentY = y
- }
- var fs = require('fs');
- var textByLine = fs.readFileSync('map.txt').toString().split(", ");
- textByLine.forEach (function(element) {
- var rotate = element.substring(0,1)
- if (rotate == "R") {
- navigation++;
- } else {
- navigation--;
- }
- if (navigation > 3) {
- navigation = 0
- }
- if (navigation < 0) {
- navigation = 3
- }
- for (var i = 0; i < parseInt(element.substring(1)); i++) {
- switch(navigation) {
- case 0:
- addStep(currentX, currentY + 1)
- break;
- case 1:
- addStep(currentX + 1, currentY)
- break;
- case 2:
- addStep(currentX, currentY - 1)
- break;
- case 3:
- addStep(currentX - 1, currentY)
- break;
- default:
- break;
- }
- }
- })
- function checkMap(x, y, element) {
- if (map[y][x] == ".") {
- let index = positions.findIndex(function(element_2) {
- return element_2.x == x && element_2.y == y
- })
- for (var i = 0; i < element.keys.length; i++) {
- for (var j = 0; j < positions[index].keys.length; j++) {
- if (Math.abs(element.keys[i] - positions[index].keys[j]) == 1) {
- map[positions[index].y][positions[index].x] = parseInt(map[element.y][element.x]) + 1
- newIterable.push(positions[index])
- }
- }
- }
- }
- }
- var xxx = []
- var yyy = []
- positions.forEach(function(element) {
- xxx.push(element.x)
- yyy.push(element.y)
- })
- let minX = Math.min.apply(null, xxx)
- let minY = Math.min.apply(null, yyy)
- positions.forEach(function(element) {
- element.x -= minX
- element.y -= minY
- })
- xxx = []
- yyy = []
- positions.forEach(function(element) {
- xxx.push(element.x)
- yyy.push(element.y)
- })
- let maxX = Math.max.apply(null, xxx)
- let maxY = Math.max.apply(null, yyy)
- var map = []
- for (var i = 0; i <= maxY; i++) {
- map.push([])
- for (var j = 0; j <= maxX; j++) {
- map[i].push("#")
- }
- }
- positions.forEach(function(element) {
- map[element.y][element.x] = "."
- })
- map[positions[0].y][positions[0].x] = 0
- var lastIterable = [positions[0]]
- var newIterable = []
- while (true) {
- lastIterable.forEach(function(element) {
- if (element.x != 0) {
- checkMap(element.x - 1, element.y, element)
- }
- if (element.x != maxX) {
- checkMap(element.x + 1, element.y, element)
- }
- if (element.y != 0) {
- checkMap(element.x, element.y - 1, element)
- }
- if (element.y != maxY) {
- checkMap(element.x, element.y + 1, element)
- }
- })
- lastIterable = newIterable
- newIterable = []
- if (lastIterable.length == 0) {
- break;
- }
- }
- var strMap = ""
- for (var i = 0; i <= maxY; i++) {
- for (var j = 0; j <= maxX; j++) {
- strMap += map[i][j]
- }
- strMap += "\n"
- }
- console.log(strMap)
- console.log(map[positions[positions.length - 1].y][positions[positions.length - 1].x])
- console.log("\nizi ;)")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement