Created
November 6, 2020 01:26
-
-
Save BrianRosamilia/4740529d0139514edc3a5e87a731054d to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
Given a river, determine whether it is crossable. | |
river = 'o~o~~o~~~o~~~~' | |
S 2 3 4 5 => true | |
river = 'ooo~o' | |
111 2 | |
'o~o~~o~~ooo~~' | |
1 2 3 3 | |
o rock | |
~ water | |
At any point your speed is k | |
Your next speed can be k - 1, k, or k + 1 | |
starting speed is 1 | |
*/ | |
function crossRiver(river) { | |
let speed = 1; | |
let moves = []; | |
let visited = []; | |
let i = 0; | |
while (i < river.length) { | |
if (i + speed + 1 >= river.length || i + speed >= river.length) return true; | |
if (river[i + speed + 1] == 'o' && !visited[i + speed + 1]) { | |
i = i + speed + 1; | |
speed++; | |
moves.push(speed + 1); | |
visited[i] = true; | |
} else if (river[i + speed] == 'o' && !visited[i + speed]) { | |
i = i + speed; | |
moves.push(speed); | |
visited[i] = true; | |
} else if (river[i + speed - 1] == 'o' && !visited[i + speed - 1]) { | |
i = i + speed - 1; | |
speed--; | |
moves.push(speed - 1); | |
visited[i] = true; | |
} else if (moves.length) { | |
i = i - moves.pop(); | |
} else { | |
return false; | |
} | |
}; | |
return true; | |
} | |
console.log(crossRiver('o~o~~o~~oo~o~~~')); | |
console.log(crossRiver('o~o~~o~~~o~~~~')); | |
console.log(crossRiver('o~o~~o~~ooo~~')); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment