Saltar al contenido
← Todos los ejercicios

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:

  • topScores devuelve las n puntuaciones más altas, de mayor a menor; todas, si hay menos de n.
  • personalBest devuelve la puntuación más alta, o null cuando no hay ninguna.
  • rankOf devuelve la posición de una puntuación empezando en 1 (1 es la mejor), o null si 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);
  });
});