ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScript の楽しい質問: 失われたカウボーイ

JavaScript の楽しい質問: 失われたカウボーイ

黄舟
黄舟オリジナル
2017-02-13 15:57:371205ブラウズ

昔、西への道がありました…

若いカウボーイは、指示に従い、ある場所から別の場所へ行かなければなりませんでした。このような指示「北」、「南」、「西」、「東」

明らかに、「NORTH」「SOUTH」は逆方向であり、「WEST」「EAST」も逆です。

一方向に進んで戻るのは間違いなく無駄な努力です。

このアクセス不能な西部の荒野では、悪天候と乏しい水資源があるため、エネルギーを節約することが重要です。そうしないと、死んでしまう可能性があります。

どのように賢明なルートを取るかが非常に重要です!

次のようなカウボーイへの指示:


plan = ["NORTH", "SOUTH", "SOUTH", "EAST", "WEST", "NORTH", "WEST"]

「北」「南」を見れば、そのようなルートは明らかに無理であり、その場所に留まるのが最善であることが一目でわかります。あなたは。
つまり、あなたの仕事は、エネルギーを節約するためにルートを合理化することです。

より良い解決策は次のようになります:


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"]

because"EAST", "WEST" Or " 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"
};

次に、文字列配列プランを後ろから前にたどって、逆方向の場合、配列から削除されオフセットされます。

次に、トラバーサル、削除、オフセットの 2 ラウンド目を開始し、3 ラウンド、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 中国語 Web サイト (www.php.cn) に注目してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。