Skip to content

Commit f7b32ec

Browse files
committed
✨ Add challenge-01 solution
1 parent 5f5c903 commit f7b32ec

File tree

3 files changed

+79
-0
lines changed

3 files changed

+79
-0
lines changed
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
# Desafío 1: ¡Consigue acceso a la terminal!
2+
3+
## Problema
4+
5+
Estamos en problemas. La IA ΩMEGA está descontrolada. Por suerte, he conseguido añadir una contraseña para evitar que acceda a esta terminal. El sistema no es difícil, pero nos debería dar el tiempo suficiente.
6+
7+
Te voy a dar una lista de números y, al lado, los movimientos que debes hacer en estos números. Imagina los candados numéricos esos que van con combinaciones.
8+
9+
**El número de la izquierda es la combinación inicial y las cadenas de texto de la derecha son los movimientos que debes hacer.**
10+
11+
Siempre empezamos del primer número de la izquierda. Los movimientos son:
12+
13+
- R (Right) movernos al siguiente dígito
14+
- L (Left) desplazarnos al dígito anterior
15+
- U (Up) incrementar ese dígito
16+
- D (Down) decrementar el dígito actual
17+
18+
Si llegamos a la derecha del todo y recibimos un R, volvemos al primer dígito. Si recibimos L y estamos en el primero, vamos al último. En el caso de que el dígito actual sea 9 y recibamos una U, pasará a 0. Y si es D y ese dígito es 0, pasará a ser 9.
19+
20+
¿Lo entiendes? ¡Es muy importante que lo entiendas! Mira, te dejo unos ejemplos:
21+
22+
```ttxt
23+
000 URURD -> 119
24+
1111 UUURUUU -> 4411
25+
9999 LULULULD -> 8000
26+
```
27+
28+
¿Lo captas? Vale, pues para desbloquear la terminal debes enviar el número al ejecutar esta combinación:
29+
30+
```txt
31+
528934712834 URDURUDRUDLLLLUUDDUDUDUDLLRRRR
32+
```
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
/* eslint-disable implicit-arrow-linebreak */
2+
const processCombination = (start, moves) => {
3+
const digits = Array.from(start, Number);
4+
let positionInitial = 0;
5+
const totalDigits = digits.length;
6+
7+
const actions = {
8+
U: () => (digits[positionInitial] = (digits[positionInitial] + 1) % 10),
9+
D: () =>
10+
(digits[positionInitial] = (digits[positionInitial] - 1 + 10) % 10),
11+
R: () => (positionInitial = (positionInitial + 1) % totalDigits),
12+
L: () =>
13+
(positionInitial = (positionInitial - 1 + totalDigits) % totalDigits),
14+
};
15+
16+
[...moves].forEach((move) => actions[move]());
17+
18+
return digits.join('');
19+
};
20+
21+
module.exports = processCombination;
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
const processCombination = require('./solution');
2+
3+
describe('2024 | 01-consigue-acceso-a-la-terminal', () => {
4+
const testCases = [
5+
{
6+
input: ['000', 'URURD'],
7+
output: '119',
8+
},
9+
{
10+
input: ['1111', 'UUURUUU'],
11+
output: '4411',
12+
},
13+
{
14+
input: ['9999', 'LULULULD'],
15+
output: '8000',
16+
},
17+
{
18+
input: ['528934712834', 'URDURUDRUDLLLLUUDDUDUDUDLLRRRR'],
19+
output: '628934712834',
20+
},
21+
];
22+
23+
it.each(testCases)('should return $output', ({ input, output }) => {
24+
expect(processCombination(...input)).toBe(output);
25+
});
26+
});

0 commit comments

Comments
 (0)