Execution of All Suffix Instructions Staying in a Grid
MediumStringSimulation
Solution
export function executeInstructions(n: number, startPos: number[], s: string): number[] {
function isMovable(y: number, x: number) {
return 0 <= y && y < n && 0 <= x && x < n;
}
function move(y: number, x: number, instruction: string) {
switch (instruction) {
case 'U':
return [y - 1, x];
case 'D':
return [y + 1, x];
case 'L':
return [y, x - 1];
case 'R':
return [y, x + 1];
default:
return [y, x];
}
}
function execute(y: number, x: number, startIndex: number) {
let executeCount = 0;
for (let i = startIndex; i < s.length; i++) {
[y, x] = move(y, x, s[i]);
if (!isMovable(y, x)) {
return executeCount;
}
executeCount += 1;
}
return executeCount;
}
const [sy, sx] = startPos;
return Array.from(s, (_, i) => execute(sy, sx, i));
}