Heim >Web-Frontend >js-Tutorial >TIL: LIFO-Lösung und reguläre Ausdruckstechniken【CodeWars】
Bei der Herausforderung „Routenreduzierung“ werden Sie aufgefordert, die kürzeste Route aus einer Anordnung von Wegbeschreibungen zu finden.
Input -> Output ["NORTH", "SOUTH", "SOUTH", "EAST", "WEST", "NORTH", "WEST"] -> ["WEST"] /* Because moving "NORTH" and "SOUTH", or "EAST" and "WEST", is unnecessary. */ /* Case: omit the first "NORTH"-"SOUTH" pair ["NORTH", "SOUTH", "SOUTH", "EAST", "WEST", "NORTH", "WEST"] -> ["SOUTH", "EAST", "WEST", "NORTH", "WEST"] Case: omit the "EAST"-"WEST" pair -> ["SOUTH", "NORTH", "WEST"] Case: omit the "NORTH"-"SOUTH" pair -> ["WEST"] */ // this case cannot be reduced: ["NORTH", "WEST", "SOUTH", "EAST"] -> ["NORTH", "WEST", "SOUTH", "EAST"]
function dirReduc(plan) { var opposite = { 'NORTH': 'SOUTH', 'EAST': 'WEST', 'SOUTH': 'NORTH', 'WEST': 'EAST'}; return plan.reduce(function(dirs, dir){ if (dirs[dirs.length - 1] === opposite[dir]) dirs.pop(); // Remove last direction if it's the opposite else dirs.push(dir); // Otherwise, add current direction to the stack return dirs; }, []); }
Dies ist ein LIFO-Ansatz (Last-in-First-out), der mithilfe von Reduce implementiert wird.
function dirReduce(arr) { let str = arr.join(''), pattern = /NORTHSOUTH|EASTWEST|SOUTHNORTH|WESTEAST/; while (pattern.test(str)) str = str.replace(pattern,''); // Remove pairs while they exist return str.match(/(NORTH|SOUTH|EAST|WEST)/g)||[]; }
Alternative Version:
function dirReduc(arr) { const pattern = /NORTHSOUTH|EASTWEST|SOUTHNORTH|WESTEAST/; let str = arr.join(''); while (pattern.test(str)) { str = str.replace(pattern, ''); // Remove pairs while they exist } const result = str.match(/(NORTH|SOUTH|EAST|WEST)/g); return result || []; }
Ich glaube, der Mindestfall für diese Lösung ist wie folgt:
1. ["SOUTH", "EAST", "WEST", "NORTH"] -> [] 2. ["NORTH", "WEST", "SOUTH", "EAST"] -> ["NORTH", "WEST", "SOUTH", "EAST"]
Ich bevorzuge Lösung 2, da sie prägnant ist und reguläre Ausdrücke auf clevere Weise verwendet. Anfangs konnte ich mir nicht vorstellen, es mit regulären Ausdrücken zu lösen, aber die Verwendung von Join-, Match-, While-, Replacement- und Testmethoden zum Eliminieren von Paaren ist beeindruckend.
Wenn Sie neugierig auf diese Lösungen sind oder weitere Herausforderungen erkunden möchten, besuchen Sie hier.
Gerne können Sie unten einen Kommentar hinterlassen!
Danke fürs Lesen?
Das obige ist der detaillierte Inhalt vonTIL: LIFO-Lösung und reguläre Ausdruckstechniken【CodeWars】. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!