아주 먼 옛날, 닿을 수 없는 서쪽으로 이어지는 길이 있었는데...
어린 카우보이는 지시에 따라 한 곳에서 다른 곳으로 이동해야 했습니다. "NORTH", "SOUTH", "WEST", "EAST"와 같은 지시사항입니다.
분명히 "NORTH"와 "SOUTH"는 반대 방향이고, "WEST"와 "EAST"그 반대이기도 합니다.
한 방향으로 갔다가 다시 돌아가는 것은 분명 쓸데없는 노력입니다.
악천후와 부족한 수자원으로 접근하기 어려운 서부 황야에서는 에너지를 절약하는 것이 중요합니다. 그렇지 않으면 죽을 수도 있습니다!
가장 현명한 길을 택하는 방법은 매우 중요합니다!
카우보이를 위한 지침은 다음과 같습니다.
plan = ["NORTH", "SOUTH", "SOUTH", "EAST", "WEST", "NORTH", "WEST"]
"NORTH" 및 를 한눈에 볼 수 있습니다. SOUTH", 이 길은 확실히 불합리하니 그 자리에 머무르는 것이 가장 좋습니다.
따라서 여러분의 임무는 경로를 간소화하여 에너지를 절약하는 것입니다.
더 나은 해결책은 다음과 같습니다:
plan = ["WEST"]
또 다른 예:
["NORTH", " SOUTH" , "EAST", "WEST"]
여기서 "NORTH" 및 "SOUTH"는 오프셋을 수행합니다. "EAST " 및 "WEST"는 오프셋되고 마지막으로 빈 배열이 반환됩니다.
더 복잡한 예를 보세요:
["NORTH", "EAST", "WEST", "SOUTH", "WEST", "WEST"]
"EAST", "WEST"는 ["NORTH", "SOUTH", "WEST", "WEST"]
"NORTH", "SOUTH"는 오프셋되어 최종적으로 ["WEST", "WEST"]를 얻습니다. 단, 다음과 같은 상황은 상쇄할 수 없으니 주의하시기 바랍니다.
["NORTH", "WEST", "SOUTH", "EAST"]
"EAST", "WEST" 또는 "NORTH", "SOUTH"는 인접하지 않고 분리되어 있기 때문입니다.
이런 경로 축소 기능을 어떻게 작성하는지 살펴보겠습니다. 문자열 배열을 매개변수로 받아들이고 새 문자열 배열을 반환합니다. 이렇게:dirReduc(["NORTH", "SOUTH", "SOUTH", "EAST", "WEST", "NORTH", "WEST"]) // ["WEST"] dirReduc(["NORTH", "SOUTH", "SOUTH", "EAST", "WEST", "NORTH"]) // []첫 번째 단계는 반대 방향인 방향의 매핑 관계를 설정하는 것입니다.
var opposite = { "NORTH":"SOUTH", "SOUTH":"NORTH", "EAST":"WEST", "WEST":"EAST" };다음으로 문자열 배열 계획을 뒤에서 앞으로 횡단하면서 반대 방향이 나타나면 배열에서 제거하고 오프셋합니다. 그런 다음 반대 방향을 찾을 수 없을 때까지 순회, 제거, 오프셋, 세 번째 라운드, N번째 라운드를 시작하고 루프에서 뛰어내립니다. 이때 배열이 유선형 최적 경로입니다.
function dirReduc(arr){ var flag = false; while(!flag){ for(var i=arr.length-2,flag=true;i>=0;i--){ if(opposite[arr[i]] === arr[i+1]){ arr.splice(i+1,1); arr.splice(i,1); i--; flag = false; } } } return arr; }
위 내용은 JavaScript 재미있는 질문: The Lost Cowboy의 내용입니다. 더 많은 관련 내용은 PHP 중국어 웹사이트(www.php)를 참고하세요. .cn)!