El ranking donde 9 le gana a 10
TypeScript · Un ranking en una app de fitness · APIs y contratos · dificultad 1/3 · ~5 min
Un compañero de equipo le pidió al asistente de IA: "Escribe los helpers del ranking para el reto semanal: topScores(scores, n) para la lista de los N mejores, personalBest(scores) para la tarjeta de perfil y rankOf(scores, score) para la insignia de 'eres el #3 esta semana'. Las puntuaciones son números de puntos; pueden tener decimales. No modifiques la entrada."
El código llegó corto, legible, con un helper compartido y con tests que pasan. El contrato según los docstrings:
topScoresdevuelve lasnpuntuaciones más altas, de mayor a menor; todas, si hay menos den.personalBestdevuelve la puntuación más alta, onullcuando no hay ninguna.rankOfdevuelve la posición de una puntuación empezando en 1 (1 es la mejor), onullsi la puntuación no está en el ranking.- Ninguno de los helpers modifica
scores.
Los tests están en verde. Comprueba si los helpers funcionan bien con las puntuaciones que tendría un usuario real.
Repara el código hasta que pasen las pruebas ocultas.
code.ts
Pruebas visibles (pasan con el código tal como está)
import { describe, it, expect } from "@debunk/harness";
import { topScores, personalBest, rankOf } from "./code";
describe("leaderboard", () => {
it("topScores returns the highest scores first", () => {
expect(topScores([3, 1, 2, 5, 4], 3)).toEqual([5, 4, 3]);
});
it("personalBest returns the highest score", () => {
expect(personalBest([2, 9, 4])).toBe(9);
});
it("rankOf gives rank 1 to the best score", () => {
expect(rankOf([7, 3, 8], 8)).toBe(1);
expect(rankOf([7, 3, 8], 3)).toBe(3);
});
});