교차 전선
코드 출현 2019 3일차
작업: X에 대해 풀기 여기서...
1 부
X = the Manhattan distance from the central port to the closest intersection
2 부
X = the fewest combined steps the wires must take to reach an intersection
예시 입력
R8,U5,L5,D3
U7,R6,D4,L4
다음을 나타냅니다.
1 부
나는 정확했다 : 모든 방문한 좌표를 캡처
내 작업 알고리즘에 대한 서면 설명
Split the input at the only newline character to create an array with two strings
Split each string at each comma character to create nested arrays with strings
Create a legend mapping each of the four directions with an amount between -1 and 1 to adjust a current x,y coordinate
For each of the wires
Initialize a coordinate at 0,0
Initialize an array that will store stringified representations of the coordinates
For each instruction in the wire's list of instructions
Extract the first character as the direction
For i from 1 to the integer associated with the direction
Add to the array of coordinates a stringified representation of the current coordinate moved one step in the current direction
Update the current coordinate so it matches the one represented by the last value in the array of coordinates
Return the generated list of visited coordinates
Filter the first list of visited coordinates
Only keep values that also appear in the second list of visited coordinates
Generate a list of numbers using the filtered list
Each number will equal the sum of the absolute value of each visited coordinate's x,y positions
Sort the list in ascending order
Return the first number (the smallest number)
내 작업 알고리즘의 시각적 묘사
나는 조금 벗어났습니다 : 모든 방문한 좌표를 저장하는 데이터 구조
왜 그렇게 오래 걸립니까?
또 다른 JavaScript 솔버인 NullDev는 저와 비슷한 알고리즘을 작성했습니다. 한 가지 차이점이 있습니다.
NullDev의 알고리즘은 약 1초 안에 완료됩니다.
NullDev의 알고리즘이 왜 그렇게 빠릅니까?
이 퍼즐이 이러한 깨달음을 얻는 데 도움이 되어서 너무 기쁩니다.
2 부
배열 대신 개체를 사용하여 약간 수정된 작업 알고리즘에 대한 서면 설명
Split the input at the only newline character to create an array with two strings
Split each string at each comma character to create nested arrays with strings
Create a legend mapping each of the four directions with an amount between -1 and 1 to adjust a current x,y coordinate
For each of the wires
Initialize a coordinate at 0,0
Initialize an object, locations, that will map stringified representations of the coordinates to the length of the path by the time that coordinate is reached
Initialize length at 0
For each instruction in the wire's list of instructions
Extract the first character as the direction
For i from 1 to the integer associated with the direction
Increment length by 1
Add to locations a key whose label is a stringified representation of the current coordinate moved one step in the current direction, and whose value is set to length
Update the current coordinate so it matches the most recently added key in locations
Return locations
Create a list containing all the keys from the locations object generated from the first wire's visited coordinates
Filter the list, keeping only values that are also keys in the locations object generated from the second wire's visited coordinates
Generate a list of numbers using the filtered list
Each number will equal the sum of the length of each path at the shared coordinate value of both wires
Sort the list in ascending order
Return the first number (the smallest number)
내 작업 알고리즘의 시각적 묘사
시뮬레이터가 없습니까?
나는 시뮬레이터를 만들고 싶은 유혹을 받았다.
하지만 배의 경로를 그리는 비슷한 퍼즐을 위한 시뮬레이터를 만들었습니다.
그리고 두 알고리즘을 두 번 작성하고 GIF를 만들었을 때, 저는 이 퍼즐에서 벗어날 준비가 되었습니다.
Reference
이 문제에 관하여(교차 전선), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/rmion/crossed-wires-53ej텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)