adventjs-issues icon indicating copy to clipboard operation
adventjs-issues copied to clipboard

Reto #08: Los tests pasan y no es correcta la solución

Open LoGaNsF opened this issue 3 years ago • 4 comments

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:

image

LoGaNsF avatar Dec 08 '21 16:12 LoGaNsF

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.

xavikortes avatar Dec 08 '21 17:12 xavikortes

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 ;)

LoGaNsF avatar Dec 08 '21 19:12 LoGaNsF

De nada, así es más facil para todos comprobarlo e intentar ayudar ;)

xavikortes avatar Dec 08 '21 20:12 xavikortes

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

davorpa avatar Dec 08 '21 20:12 davorpa