-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathReto #9.js
More file actions
82 lines (60 loc) · 2.42 KB
/
Reto #9.js
File metadata and controls
82 lines (60 loc) · 2.42 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
/** Reto #9: 🦌 El reno robot aspirador
Los elfos han construido un reno 🦌 robot aspirador (@) para limpiar un poco el taller de cara a las navidades.
El reno se mueve sobre un tablero para recoger cosas del suelo (*) y debe evitar obstáculos (#).
Recibirás dos parámetros:
board: un string que representa el tablero.
moves: un string con los movimientos: 'L' (izquierda), 'R' (derecha), 'U' (arriba), 'D' (abajo).
Reglas del movimiento:
Si el reno recoge algo del suelo (*) durante los movimientos → devuelve 'success'.
Si el reno se sale del tablero o choca contra un obstáculo (#) → devuelve 'crash'.
Si el reno no recoge nada ni se estrella → devuelve 'fail'.
Ten en cuenta que si el reno recoge algo del suelo, ya es 'success', indepentientemente de si en movimientos posteriores se chocase con un obstáculo o saliese del tabler.
Importante: Ten en cuenta que en el board la primera y última línea están en blanco y deben descartarse.
Ejemplo:
*/
const board = `
.....
.*#.*
.@...
.....
`
console.log(moveReno(board, 'D'));
// ➞ 'fail' -> se mueve pero no recoge nada
console.log(moveReno(board, 'U'));
// ➞ 'success' -> recoge algo (*) justo encima
console.log(moveReno(board, 'RU'));
// ➞ 'crash' -> choca contra un obstáculo (#)
console.log(moveReno(board, 'RRRUU'));
// ➞ 'success' -> recoge algo (*)
console.log(moveReno(board, 'DD'));
// ➞ 'crash' -> se choca con la parte de abajo del tablero
console.log(moveReno(board, 'UUU'));
// ➞ 'success' -> recoge algo del suelo (*) y luego se choca por arriba
console.log(moveReno(board, 'RR'));
// ➞ 'fail' -> se mueve pero no recoge nada
/**
* @param {string} board - Represent the board situation
* @param {string} moves - Movement direction
* @returns {'fail' | 'crash' | 'success'}
*/
function moveReno(board, moves) {
const boardSquare = board.trim();
const firstNewLine = boardSquare.indexOf('\n');
const width = firstNewLine === -1 ? boardSquare.length : firstNewLine + 1;
let robot=boardSquare.indexOf('@');
const movements ={
'U': -width,
'D': width,
'L': -1,
'R': 1
};
for(const command of moves){
const nextPos = robot + movements[command];
const value = boardSquare[nextPos];
if (!value) return 'crash';
if( value === '*') return 'success';
if(value === '#' || value ==='\n') return 'crash';
robot = nextPos;
}
return 'fail';
}