const inst: number[] = require("fs").readFileSync(0).toString().trim().split(" ").map(Number); const steps: number = inst.length - 1; const force: number[][] = [ [1,2,2,2,2], [0,1,3,4,3], [0,3,1,3,4], [0,4,3,1,3], [0,3,4,3,1] ]; let dp: number[][][] = Array.from( {length: 2}, (_, i) => Array.from({length: 5}, () => Array.from({length: 5}, () => i===1 ? 0 : Infinity ) ) ); let currentIsZero: boolean = true; for(let i=steps-1; i >= 0; i--) { const current: number = currentIsZero ? 0 : 1; const next: number = currentIsZero ? 1 : 0; const target: number = inst[i]; for(let l=0; l<5; l++) { for(let r=0; r<5; r++) { const moveLeft: number = dp[next][target][r] + force[l][target]; const moveRight: number = dp[next][l][target] + force[r][target]; dp[current][l][r] = Math.min(moveLeft, moveRight); } } currentIsZero = !currentIsZero; } console.log(dp[currentIsZero ? 1 : 0][0][0]);