>  기사  >  웹 프론트엔드  >  JavaScript 재미있는 질문: 잃어버린 카우보이

JavaScript 재미있는 질문: 잃어버린 카우보이

黄舟
黄舟원래의
2017-02-13 15:57:371198검색

아주 먼 옛날, 닿을 수 없는 서쪽으로 이어지는 길이 있었는데...

어린 카우보이는 지시에 따라 한 곳에서 다른 곳으로 이동해야 했습니다. "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)!


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.