Heim >Web-Frontend >js-Tutorial >Lustige JavaScript-Frage: Der verlorene Cowboy
Vor langer Zeit führte eine Straße in den unerreichbaren Westen...
Ein junger Cowboy musste den Anweisungen zufolge von einem Ort zum anderen gehen. Anweisungen wie diese"NORDEN", "SÜDEN", "WEST", "OST".
Offensichtlich sind "NORDEN" und "SÜDEN" in entgegengesetzte Richtungen, "WEST" und "OST"Es ist auch das Gegenteil.
In eine Richtung zu gehen und dann zurückzugehen ist zweifellos eine nutzlose Anstrengung.
In dieser unzugänglichen westlichen Wildnis, bei schlechtem Wetter und knappen Wasserressourcen ist es wichtig, etwas Energie zu sparen, sonst kann man sterben!
Wie man den klügsten Weg einschlägt, ist sehr wichtig!
Anleitung für Cowboys, so:
plan = ["NORTH", "SOUTH", "SOUTH", "EAST", "WEST", "NORTH", "WEST"]
Man sieht auf einen Blick, "NORTH"und„SÜDEN“, diese Route ist offensichtlich unvernünftig, am besten bleibt man dort, wo man ist.
Ihre Aufgabe besteht also darin, die Route zu optimieren, um Energie zu sparen.
Eine bessere Lösung wäre so:
plan = ["WEST"]
Ein weiteres Beispiel:
["NORTH" , " SOUTH", "EAST", "WEST"]
Hier machen "NORTH" und "SOUTH" den Versatz, "EAST". „ und „WEST“ werden versetzt und schließlich wird ein leeres Array zurückgegeben.
Sehen Sie sich ein komplizierteres Beispiel an:
["NORTH", "EAST", "WEST", "SOUTH", "WEST", "WEST"]
"OST", "WEST" werden versetzt, um ["NORTH", "SOUTH", "WEST", "WEST"]
"NORTH", "SOUTH" werden versetzt, und schließlich erhalten wir ["WEST", "WEST"]. Bitte beachten Sie jedoch, dass die folgende Situation nicht ausgeglichen werden kann:
["NORTH", "WEST", "SOUTH", "EAST"]
„OST“, „WEST“ oder „NORD“, „SÜD“ nicht benachbart, sondern getrennt sind.
Sehen wir uns an, wie man eine solche Routenreduzierungsfunktion schreibt. Es akzeptiert ein String-Array als Parameter und gibt ein neues String-Array zurück. So:dirReduc(["NORTH", "SOUTH", "SOUTH", "EAST", "WEST", "NORTH", "WEST"]) // ["WEST"] dirReduc(["NORTH", "SOUTH", "SOUTH", "EAST", "WEST", "NORTH"]) // []Der erste Schritt besteht darin, die Zuordnungsbeziehung der Richtungen festzulegen, bei denen es sich um entgegengesetzte Richtungen handelt:
var opposite = { "NORTH":"SOUTH", "SOUTH":"NORTH", "EAST":"WEST", "WEST":"EAST" };Als nächstes durchqueren Sie den String-Array-Plan von hinten nach vorne. Wenn Sie auf die entgegengesetzte Richtung stoßen, entfernen Sie ihn aus dem Array und versetzen Sie ihn. Dann beginnen Sie mit der zweiten Runde des Durchquerens, Entfernens, Versetzens, der dritten Runde und der N-ten Runde, bis Sie die entgegengesetzte Richtung nicht mehr finden und aus der Schleife springen können. Das Array ist derzeit die optimierte beste Route.
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; }
Das Obige ist der Inhalt der lustigen JavaScript-Frage: The Lost Cowboy. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www .php.cn)!