Advertisement
Guest User

Untitled

a guest
Nov 12th, 2019
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.00 KB | None | 0 0
  1. 'use strict';
  2.  
  3. class Position {
  4. constructor(x, y, key) {
  5. this.x = x;
  6. this.y = y;
  7. this.keys = []
  8. this.keys.push(key)
  9. }
  10.  
  11. addKey(key) {
  12. this.keys.push(key)
  13. }
  14. }
  15.  
  16.  
  17. var positions = []
  18. positions.push(new Position(0, 0, 0))
  19. var currentX = 0
  20. var currentY = 0
  21. var currentKey = 0
  22. var navigation = 0
  23.  
  24. function addStep(x, y) {
  25. if (positions.find(function(element) {
  26. return element.x == x && element.y == y
  27. }) == null) {
  28. positions.push(new Position(x, y, ++currentKey))
  29. } else {
  30. positions[positions.findIndex(function(element) {
  31. return element.x == x && element.y == y
  32. })].addKey(++currentKey)
  33. }
  34. currentX = x
  35. currentY = y
  36. }
  37.  
  38. var fs = require('fs');
  39. var textByLine = fs.readFileSync('map.txt').toString().split(", ");
  40.  
  41. textByLine.forEach (function(element) {
  42. var rotate = element.substring(0,1)
  43.  
  44. if (rotate == "R") {
  45. navigation++;
  46. } else {
  47. navigation--;
  48. }
  49.  
  50. if (navigation > 3) {
  51. navigation = 0
  52. }
  53.  
  54. if (navigation < 0) {
  55. navigation = 3
  56. }
  57.  
  58. for (var i = 0; i < parseInt(element.substring(1)); i++) {
  59. switch(navigation) {
  60. case 0:
  61. addStep(currentX, currentY + 1)
  62. break;
  63. case 1:
  64. addStep(currentX + 1, currentY)
  65. break;
  66. case 2:
  67. addStep(currentX, currentY - 1)
  68. break;
  69. case 3:
  70. addStep(currentX - 1, currentY)
  71. break;
  72. default:
  73. break;
  74. }
  75. }
  76. })
  77.  
  78. function checkMap(x, y, element) {
  79. if (map[y][x] == ".") {
  80.  
  81. let index = positions.findIndex(function(element_2) {
  82. return element_2.x == x && element_2.y == y
  83. })
  84.  
  85. for (var i = 0; i < element.keys.length; i++) {
  86. for (var j = 0; j < positions[index].keys.length; j++) {
  87. if (Math.abs(element.keys[i] - positions[index].keys[j]) == 1) {
  88. map[positions[index].y][positions[index].x] = parseInt(map[element.y][element.x]) + 1
  89. newIterable.push(positions[index])
  90. }
  91. }
  92. }
  93. }
  94. }
  95.  
  96. var xxx = []
  97. var yyy = []
  98.  
  99. positions.forEach(function(element) {
  100. xxx.push(element.x)
  101. yyy.push(element.y)
  102. })
  103.  
  104. let minX = Math.min.apply(null, xxx)
  105. let minY = Math.min.apply(null, yyy)
  106.  
  107. positions.forEach(function(element) {
  108. element.x -= minX
  109. element.y -= minY
  110. })
  111.  
  112. xxx = []
  113. yyy = []
  114.  
  115. positions.forEach(function(element) {
  116. xxx.push(element.x)
  117. yyy.push(element.y)
  118. })
  119.  
  120. let maxX = Math.max.apply(null, xxx)
  121. let maxY = Math.max.apply(null, yyy)
  122.  
  123. var map = []
  124.  
  125. for (var i = 0; i <= maxY; i++) {
  126. map.push([])
  127. for (var j = 0; j <= maxX; j++) {
  128. map[i].push("#")
  129. }
  130. }
  131.  
  132. positions.forEach(function(element) {
  133. map[element.y][element.x] = "."
  134. })
  135.  
  136. map[positions[0].y][positions[0].x] = 0
  137.  
  138. var lastIterable = [positions[0]]
  139. var newIterable = []
  140.  
  141. while (true) {
  142. lastIterable.forEach(function(element) {
  143. if (element.x != 0) {
  144. checkMap(element.x - 1, element.y, element)
  145. }
  146.  
  147. if (element.x != maxX) {
  148. checkMap(element.x + 1, element.y, element)
  149. }
  150.  
  151. if (element.y != 0) {
  152. checkMap(element.x, element.y - 1, element)
  153. }
  154.  
  155. if (element.y != maxY) {
  156. checkMap(element.x, element.y + 1, element)
  157. }
  158. })
  159.  
  160. lastIterable = newIterable
  161. newIterable = []
  162.  
  163. if (lastIterable.length == 0) {
  164. break;
  165. }
  166. }
  167. var strMap = ""
  168. for (var i = 0; i <= maxY; i++) {
  169. for (var j = 0; j <= maxX; j++) {
  170. strMap += map[i][j]
  171. }
  172. strMap += "\n"
  173. }
  174.  
  175. console.log(strMap)
  176.  
  177. console.log(map[positions[positions.length - 1].y][positions[positions.length - 1].x])
  178.  
  179. console.log("\nizi ;)")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement