Maison >interface Web >js tutoriel >Question amusante JavaScript : le cowboy perdu

Question amusante JavaScript : le cowboy perdu

黄舟
黄舟original
2017-02-13 15:57:371218parcourir

Il y a bien longtemps, il y avait une route menant à l'ouest inaccessible...

Un jeune cow-boy, selon les instructions, devait se rendre d'un endroit à un autre. Des instructions comme celle-ci"NORD", "SUD", "OUEST", "EST".

Évidemment, "NORD" et "SUD" sont dans des directions opposées, "OUEST" et "EST"C'est aussi le contraire.

Marcher dans une direction puis revenir en arrière est sans aucun doute un effort inutile.

Dans cette nature sauvage de l'ouest inaccessible, avec du mauvais temps et des ressources en eau rares, il est important d'économiser un peu d'énergie, sinon vous risquez de mourir !

Comment emprunter la voie la plus sage est très important !

Instructions pour les cowboys, comme ceci :


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

Vous pouvez voir d'un coup d'oeil, "NORD"et"SUD", cet itinéraire est évidemment déraisonnable, il vaut mieux rester sur place.
Votre tâche consiste donc à rationaliser l'itinéraire pour économiser de l'énergie.

Une meilleure solution serait comme ceci :


plan = ["WEST"]

Un autre exemple :

["NORD", " SUD", "EST", "OUEST"]

Ici, "NORD" et "SUD" font le décalage, "EST " et "WEST" sont décalés, et finalement un tableau vide est renvoyé.

Regardez un exemple plus compliqué :

["NORD", "EST", "OUEST", "SUD", "OUEST", "OUEST"]

"EST", "OUEST" sont décalés pour obtenir ["NORD", "SUD", "OUEST", "OUEST"]

"NORD", "SUD" sont décalés, et finalement on obtient ["OUEST", "OUEST"].
Veuillez toutefois noter que la situation suivante ne peut être compensée :

["NORD", "OUEST", "SUD", "EST"]

Parce que "EST", "OUEST" ou "NORD", "SUD" ne sont pas adjacents, mais séparés.

Voyons comment écrire une telle fonction de réduction d'itinéraire.

Il accepte un tableau de chaînes comme paramètre et renvoie un nouveau tableau de chaînes.

Comme ceci :


dirReduc(["NORTH", "SOUTH", "SOUTH", "EAST", "WEST", "NORTH", "WEST"]) // ["WEST"]
dirReduc(["NORTH", "SOUTH", "SOUTH", "EAST", "WEST", "NORTH"]) // []

La première étape consiste à établir la relation cartographique des directions, qui sont les directions opposées :


var opposite = {
    "NORTH":"SOUTH",
    "SOUTH":"NORTH",
    "EAST":"WEST",
    "WEST":"EAST"
};

Ensuite, parcourez le plan du réseau de chaînes d'arrière en avant. Lorsque vous rencontrez la direction opposée, retirez-le du réseau et décalez-le.

Ensuite, commencez le deuxième tour de traversée, retrait, décalage, troisième tour, Nième tour, jusqu'à ce que vous ne puissiez pas trouver la direction opposée et sortir de la boucle.

Le tableau à l'heure actuelle est le meilleur itinéraire rationalisé.


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;
}


Ce qui précède est le contenu de la question amusante JavaScript : The Lost Cowboy. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www. .php.cn) !

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn