Skip to content

Commit

Permalink
feat: Add solution challenge 08
Browse files Browse the repository at this point in the history
  • Loading branch information
neftdev committed Dec 9, 2021
1 parent dd139d3 commit a8ba071
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 0 deletions.
27 changes: 27 additions & 0 deletions challenge-08/README.md
Original file line number Diff line number Diff line change
@@ -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)
```
9 changes: 9 additions & 0 deletions challenge-08/solution.js
Original file line number Diff line number Diff line change
@@ -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;
}

0 comments on commit a8ba071

Please sign in to comment.