웹 프론트엔드 JS 튜토리얼 JavaScript 재미있는 질문: 잃어버린 카우보이

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

Feb 13, 2017 pm 03:57 PM

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

어린 카우보이는 지시에 따라 한 곳에서 다른 곳으로 이동해야 했습니다. "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([&quot;NORTH&quot;, &quot;SOUTH&quot;, &quot;SOUTH&quot;, &quot;EAST&quot;, &quot;WEST&quot;, &quot;NORTH&quot;, &quot;WEST&quot;]) // [&quot;WEST&quot;]
dirReduc([&quot;NORTH&quot;, &quot;SOUTH&quot;, &quot;SOUTH&quot;, &quot;EAST&quot;, &quot;WEST&quot;, &quot;NORTH&quot;]) // []
로그인 후 복사

첫 번째 단계는 반대 방향인 방향의 매핑 관계를 설정하는 것입니다.


var opposite = {
    &quot;NORTH&quot;:&quot;SOUTH&quot;,
    &quot;SOUTH&quot;:&quot;NORTH&quot;,
    &quot;EAST&quot;:&quot;WEST&quot;,
    &quot;WEST&quot;:&quot;EAST&quot;
};
로그인 후 복사

다음으로 문자열 배열 계획을 뒤에서 앞으로 횡단하면서 반대 방향이 나타나면 배열에서 제거하고 오프셋합니다.

그런 다음 반대 방향을 찾을 수 없을 때까지 순회, 제거, 오프셋, 세 번째 라운드, N번째 라운드를 시작하고 루프에서 뛰어내립니다.

이때 배열이 유선형 최적 경로입니다.


function dirReduc(arr){
    var flag = false;
    while(!flag){
        for(var i=arr.length-2,flag=true;i&gt;=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으로 문의하세요.

뜨거운 기사 태그

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

JavaScript로 문자열 문자를 교체하십시오 JavaScript로 문자열 문자를 교체하십시오 Mar 11, 2025 am 12:07 AM

JavaScript로 문자열 문자를 교체하십시오

사용자 정의 Google 검색 API 설정 자습서 사용자 정의 Google 검색 API 설정 자습서 Mar 04, 2025 am 01:06 AM

사용자 정의 Google 검색 API 설정 자습서

예제 색상 JSON 파일 예제 색상 JSON 파일 Mar 03, 2025 am 12:35 AM

예제 색상 JSON 파일

8 멋진 jQuery 페이지 레이아웃 플러그인 8 멋진 jQuery 페이지 레이아웃 플러그인 Mar 06, 2025 am 12:48 AM

8 멋진 jQuery 페이지 레이아웃 플러그인

자신의 Ajax 웹 응용 프로그램을 구축하십시오 자신의 Ajax 웹 응용 프로그램을 구축하십시오 Mar 09, 2025 am 12:11 AM

자신의 Ajax 웹 응용 프로그램을 구축하십시오

' this ' 자바 스크립트로? ' this ' 자바 스크립트로? Mar 04, 2025 am 01:15 AM

' this ' 자바 스크립트로?

소스 뷰어와의 jQuery 지식을 향상시킵니다 소스 뷰어와의 jQuery 지식을 향상시킵니다 Mar 05, 2025 am 12:54 AM

소스 뷰어와의 jQuery 지식을 향상시킵니다

모바일 개발을위한 10 개의 모바일 치트 시트 모바일 개발을위한 10 개의 모바일 치트 시트 Mar 05, 2025 am 12:43 AM

모바일 개발을위한 10 개의 모바일 치트 시트

See all articles