adventjs-issues
adventjs-issues copied to clipboard
Reto #08: Los tests pasan y no es correcta la solución
He encontrado un error en el reto 8. El enunciado dice que se debe devolver la ganancia máxima, que para const pricesBtc = [39, 18, 29, 25, 34, 32, 5] seria 16, pero si cambiamos el orden del 18 y el 29 (const pricesBtc = [39, 29, 18, 25, 34, 32, 5]) también tendría que dar 16, pero mi solución daba 5 ya que tomaba el 29 como el valor mas bajo al que comprar y 34 el mas alto al que vender. Los tests pasan y se puede enviar:

Es cierto. Es probable que todos los test tengan una estructura que se acopla perfectamente a tu código. Es un falso positivo. @midudev te dejo un codi.link con el error para probarlo.
Exacto, bastaría con crear un test que cumpla con que comento para evitar esos falsos positivos. Gracias por poner el enlace con el ejemplo ;)
De nada, así es más facil para todos comprobarlo e intentar ayudar ;)
Yo tengo esta matriz de tests, entre otras, con chai por si puede servir
describe("Fixed tests", () => {
for (const [prices, profit, message] of [
[[39, 18, 29, 25, 34, 32, 5], 16, "compra a 18, vende a 34"],
[[39, 29, 18, 25, 34, 32, 5], 16, "compra a 18, vende a 34"],
[[39, 18, 29, 25, 34, 32, 5, 11, 26], 21, "compra a 5, vende a 26"],
[[39, 18, 29, 25, 34, 32, 11, 5, 26], 21, "compra a 5, vende a 26"],
[[18, 29, 25, 34, 32, 11, 5, 26], 21, "compra a 5, vende a 26"],
[[10, 20, 30, 40, 50, 60, 70], 60, "compra a 10, vende a 70"],
[[40, 20, 30, 10, 50, 60, 70], 60, "compra a 10, vende a 70"],
[[18, 15, 12, 11, 9, 7], -1, "no hay ganancia posible si compras a 7"],
[[3, 3, 3, 3, 3], -1, "no hay ganancia posible sin variación de precios"],
[[10, 1, 2], 1, "compra a 1, vende a 2"],
[[10, 11, 4, 3, 1], 1, "compra a 10, vende a 11"],
[null, -1, "precios indeterminados"],
[void 0, -1, "precios indeterminados"],
[[], -1, "timeline insuficiente (0<2)"],
[[5], -1, "timeline insuficiente (1<2)"],
[[0, 0], -1, "no hay ganancia posible (all zero)"],
[[-11, 11], 22, "compra a -11, vende a 11 (negatives)"],
[[1, -1], -1, "no hay ganancia posible (negatives)"],
[Array.from({length: 10**4 * 8}, (_, i) => i + i + 1), 10**4 * 8 * 2 - 2, "Stress performance"],
]) {
it(`maxProfit(${str(prices)}) == ${profit}`, () => {
expect(maxProfit(prices)).to.be.equal(profit, message);
});
}
}
function str(x, {max = 33}={}) {
if (Array.isArray(x)) return "[" + (x.length > max ? x.slice(0, max) + ", ...+NN others".replace("NN", x.length - max) : x) + "]";
return "" + x;
}
y no me pasa eso