From a8ba0715007b754300cd6db16d8d1d4ccbf9d6c3 Mon Sep 17 00:00:00 2001 From: rberduo Date: Thu, 9 Dec 2021 15:30:33 -0600 Subject: [PATCH] feat: Add solution challenge 08 --- challenge-08/README.md | 27 +++++++++++++++++++++++++++ challenge-08/solution.js | 9 +++++++++ 2 files changed, 36 insertions(+) create mode 100644 challenge-08/README.md create mode 100644 challenge-08/solution.js diff --git a/challenge-08/README.md b/challenge-08/README.md new file mode 100644 index 0000000..e1c74c9 --- /dev/null +++ b/challenge-08/README.md @@ -0,0 +1,27 @@ +# Descripción + +Invertir en criptomonedas es casi un deporte de riesgo. El otro día hackearon Bitmart y ha hecho que el valor de Bitcoin, y otras monedas, bajase un 25%. + +Vamos a escribir una función que reciba la lista de precios de una criptomoneda en un día y debemos devolver la ganancia máxima que podríamos sacar si compramos y vendemos la inversión el mismo día. + +La lista de precios es un array de números y representa el tiempo de izquierda a derecha. Por lo que ten en cuenta que no puedes comprar a un precio que esté a la derecha de la venta y no puedes vender a un precio que esté a la izquierda de la compra. + +Por ejemplo: + +```js +const pricesBtc = [39, 18, 29, 25, 34, 32, 5] +maxProfit(pricesBtc) // -> 16 (compra a 18, vende a 34) + +const pricesEth = [10, 20, 30, 40, 50, 60, 70] +maxProfit(pricesEth) // -> 60 (compra a 10, vende a 70) +``` + +Si ese día no se puede sacar ningún beneficio, tenemos que devolver -1 para evitar que hagamos una locura: + +```js +const pricesDoge = [18, 15, 12, 11, 9, 7] +maxProfit(pricesDoge) = // -> -1 (no hay ganancia posible) + +const pricesAda = [3, 3, 3, 3, 3] +maxProfit(pricesAda) = // -> -1 (no hay ganancia posible) +``` diff --git a/challenge-08/solution.js b/challenge-08/solution.js new file mode 100644 index 0000000..43e636d --- /dev/null +++ b/challenge-08/solution.js @@ -0,0 +1,9 @@ +export default function maxProfit(prices) { + const last = prices.pop(); + const min = Math.min(...prices); + const indexMin = prices.indexOf(min); + prices.push(last); + const max = Math.max(...prices.slice(indexMin + 1)); + const result = max - min; + return result > 0 ? result : -1; +}