Recorrido de un regalo en la fábrica
Simula el recorrido de un regalo dentro de una fábrica y devuelve cómo termina. Para ello debes crear una función runFactory(factory).
factory es un string[] donde cada celda puede ser:
< ^ v movimientos . salida correcta Ten en cuenta que todas las filas tienen la misma longitud y que no habrá otros sÃmbolos.
El regalo siempre empieza en la posición (0,0) (arriba a la izquierda). En cada paso lee la celda actual y se mueve según la dirección. Si llega a una celda con un punto (.) significa que ha salido correctamente de la fábrica.
Resultado
Devuelve uno de estos valores:
‘completed’ si llega a un . ‘loop’ si visita una posición dos veces ‘broken’ si sale fuera del tablero Ejemplos
runFactory([
'>>.'
]) // 'completed'
runFactory([
'>>>'
]) // 'broken'
runFactory([
'>><'
]) // 'loop'
runFactory([
'>>v',
'..<'
]) // 'completed'
runFactory([
'>>v',
'<<<'
]) // 'broken'
runFactory([
'>v.',
'^..'
]) // 'completed'
runFactory([
'v.',
'^.'
]) // 'loop'
type Factory = string[]
type Result = 'completed' | 'broken' | 'loop'
function runFactory(factory: Factory): Result {
const directions: Record<string, [number, number]> = {
'>': [0, 1],
'<': [0, -1],
'^': [-1, 0],
'v': [1, 0]
}
const visited = new Set<string>()
let row = 0
let col = 0
while (true) {
const key = `${row},${col}`
if (visited.has(key)) return 'loop'
visited.add(key)
const cell = factory[row][col]
if (cell === '.') return 'completed'
const [dRow, dCol] = directions[cell]
row += dRow
col += dCol
if (row < 0 || row >= factory.length || col < 0 || col >= factory[0].length) {
return 'broken'
}
}
}