From 5a15705b09185bafcf67a2bf9faf17136815d16e Mon Sep 17 00:00:00 2001 From: marco Date: Thu, 7 Dec 2023 17:55:32 -0600 Subject: [PATCH] :safety_vest: add challenge-16 solution --- 2021/16-descifrando-los-numeros/README.md | 37 +++++++++++ 2021/16-descifrando-los-numeros/index.js | 17 +++++ 2021/16-descifrando-los-numeros/index.test.js | 62 +++++++++++++++++++ 3 files changed, 116 insertions(+) create mode 100644 2021/16-descifrando-los-numeros/README.md create mode 100644 2021/16-descifrando-los-numeros/index.js create mode 100644 2021/16-descifrando-los-numeros/index.test.js diff --git a/2021/16-descifrando-los-numeros/README.md b/2021/16-descifrando-los-numeros/README.md new file mode 100644 index 0000000..c37badd --- /dev/null +++ b/2021/16-descifrando-los-numeros/README.md @@ -0,0 +1,37 @@ +# Reto 16: Descifrando los numeros + +## Problema + +Lara Eloft ha encontrado unos restos élficos en una cueva, cerca del Círculo Polar Ártico, a 8 km al norte de Rovaniemi. + +Ahora se encuentra descifrando unas misteriosas cartas que contiene información sobre unos números que le puede hacer llegar al próximo objetivo. + +Lara tiene un documento que contiene una serie de números que pueden ser usados para descifrarlos: + +```txt +Símbolo Valor + . 1 + , 5 + : 10 + ; 50 + ! 100 +``` + +Lara, además, ha notado una cosa. **Los símbolos se restan si están inmediatamente a la izquierda de otro mayor. 😱** + +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`: + +```js +decodeNumbers('...') // 3 +decodeNumbers('.,') // 4 (5 - 1) +decodeNumbers(',.') // 6 (5 + 1) +decodeNumbers(',...') // 8 (5 + 3) +decodeNumbers('.........!') // 107 (1 + 1 + 1 + 1 + 1 + 1 + 1 - 1 + 100) +decodeNumbers('.;') // 49 (50 - 1) +decodeNumbers('..,') // 5 (-1 + 1 + 5) +decodeNumbers('..,!') // 95 (1 - 1 - 5 + 100) +decodeNumbers('.;!') // 49 (-1 -50 + 100) +decodeNumbers('!!!') // 300 +decodeNumbers(';!') // 50 +decodeNumbers(';.W') // NaN +``` diff --git a/2021/16-descifrando-los-numeros/index.js b/2021/16-descifrando-los-numeros/index.js new file mode 100644 index 0000000..5e03cca --- /dev/null +++ b/2021/16-descifrando-los-numeros/index.js @@ -0,0 +1,17 @@ +const decodeNumbers = (symbols) => { + const numbers = { + '.': 1, + ',': 5, + ':': 10, + ';': 50, + '!': 100, + }; + + return [...symbols].reduce((acc, currentSymbol, index, symbol) => ( + acc + (numbers[symbol[index + 1]]> numbers[currentSymbol] + ? -numbers[currentSymbol] + : numbers[currentSymbol]) + ), 0); +}; + +module.exports = decodeNumbers; diff --git a/2021/16-descifrando-los-numeros/index.test.js b/2021/16-descifrando-los-numeros/index.test.js new file mode 100644 index 0000000..d049535 --- /dev/null +++ b/2021/16-descifrando-los-numeros/index.test.js @@ -0,0 +1,62 @@ +const decodeNumbers = require('./index'); + +describe('16 => Descifrando los numeros', () => { + const testCases = [ + { + input: '...', + output: 3, + }, + { + input: '.,', + output: 4, + }, + { + input: ',.', + output: 6, + }, + { + input: ',...', + output: 8, + }, + { + input: '.........!', + output: 107, + }, + { + input: '.;', + output: 49, + }, + { + input: '..,', + output: 5, + }, + { + input: '..,!', + output: 95, + }, + { + input: '.;!', + output: 49, + }, + { + input: '!!!', + output: 300, + }, + { + input: ';!', + output: 50, + }, + { + input: ';.W', + output: NaN, + }, + ]; + + it('should return a number type', () => { + expect(typeof decodeNumbers('...')).toBe('number'); + }); + + it.each(testCases)('should return $output when input is $input', ({ input, output }) => { + expect(decodeNumbers(input)).toBe(output); + }); +});

AltStyle によって変換されたページ (->オリジナル) /