Skip to content

Commit 19c786c

Browse files
authored
Merge pull request #9 from marcode24/2021
🦺 add challenge-16 solution
2 parents e4bf133 + 5a15705 commit 19c786c

File tree

3 files changed

+116
-0
lines changed

3 files changed

+116
-0
lines changed
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
# Reto 16: Descifrando los numeros
2+
3+
## Problema
4+
5+
Lara Eloft ha encontrado unos restos élficos en una cueva, cerca del Círculo Polar Ártico, a 8 km al norte de Rovaniemi.
6+
7+
Ahora se encuentra descifrando unas misteriosas cartas que contiene información sobre unos números que le puede hacer llegar al próximo objetivo.
8+
9+
Lara tiene un documento que contiene una serie de números que pueden ser usados para descifrarlos:
10+
11+
```txt
12+
Símbolo Valor
13+
. 1
14+
, 5
15+
: 10
16+
; 50
17+
! 100
18+
```
19+
20+
Lara, además, ha notado una cosa. **Los símbolos se restan si están inmediatamente a la izquierda de otro mayor. 😱**
21+
22+
Tenemos que crear una función que nos pasa una cadena de texto con símbolos y tenemos que transformarlo al número correcto. ¡Ojo! Si encuentras un símbolo que no entendemos, mejor que devolvamos un `NaN`:
23+
24+
```js
25+
decodeNumbers('...') // 3
26+
decodeNumbers('.,') // 4 (5 - 1)
27+
decodeNumbers(',.') // 6 (5 + 1)
28+
decodeNumbers(',...') // 8 (5 + 3)
29+
decodeNumbers('.........!') // 107 (1 + 1 + 1 + 1 + 1 + 1 + 1 - 1 + 100)
30+
decodeNumbers('.;') // 49 (50 - 1)
31+
decodeNumbers('..,') // 5 (-1 + 1 + 5)
32+
decodeNumbers('..,!') // 95 (1 - 1 - 5 + 100)
33+
decodeNumbers('.;!') // 49 (-1 -50 + 100)
34+
decodeNumbers('!!!') // 300
35+
decodeNumbers(';!') // 50
36+
decodeNumbers(';.W') // NaN
37+
```
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
const decodeNumbers = (symbols) => {
2+
const numbers = {
3+
'.': 1,
4+
',': 5,
5+
':': 10,
6+
';': 50,
7+
'!': 100,
8+
};
9+
10+
return [...symbols].reduce((acc, currentSymbol, index, symbol) => (
11+
acc + (numbers[symbol[index + 1]] > numbers[currentSymbol]
12+
? -numbers[currentSymbol]
13+
: numbers[currentSymbol])
14+
), 0);
15+
};
16+
17+
module.exports = decodeNumbers;
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
const decodeNumbers = require('./index');
2+
3+
describe('16 => Descifrando los numeros', () => {
4+
const testCases = [
5+
{
6+
input: '...',
7+
output: 3,
8+
},
9+
{
10+
input: '.,',
11+
output: 4,
12+
},
13+
{
14+
input: ',.',
15+
output: 6,
16+
},
17+
{
18+
input: ',...',
19+
output: 8,
20+
},
21+
{
22+
input: '.........!',
23+
output: 107,
24+
},
25+
{
26+
input: '.;',
27+
output: 49,
28+
},
29+
{
30+
input: '..,',
31+
output: 5,
32+
},
33+
{
34+
input: '..,!',
35+
output: 95,
36+
},
37+
{
38+
input: '.;!',
39+
output: 49,
40+
},
41+
{
42+
input: '!!!',
43+
output: 300,
44+
},
45+
{
46+
input: ';!',
47+
output: 50,
48+
},
49+
{
50+
input: ';.W',
51+
output: NaN,
52+
},
53+
];
54+
55+
it('should return a number type', () => {
56+
expect(typeof decodeNumbers('...')).toBe('number');
57+
});
58+
59+
it.each(testCases)('should return $output when input is $input', ({ input, output }) => {
60+
expect(decodeNumbers(input)).toBe(output);
61+
});
62+
});

0 commit comments

Comments
 (0)