Sari la conținut
← Toate exercițiile

Clasamentul în care 9 bate 10

TypeScript · Un clasament într-o aplicație de fitness · API-uri și contracte · dificultate 1/3 · ~5 min

Un coleg i-a cerut asistentului AI: „Scrie helperii de clasament pentru provocarea săptămânală: topScores(scores, n) pentru lista top-N, personalBest(scores) pentru cardul de profil și rankOf(scores, score) pentru badge-ul «ești pe locul 3 săptămâna asta». Scorurile sunt numere de puncte; pot fi fracționare. Nu modifica inputul.”

Codul a venit scurt, ușor de citit, cu un helper comun și teste care trec. Contractul din docstring-uri:

  • topScores returnează cele mai mari n scoruri, de la cel mai mare; pe toate, dacă sunt mai puține decât n.
  • personalBest returnează cel mai mare scor sau null când nu există niciunul.
  • rankOf returnează locul unui scor, numărat de la 1 (1 e cel mai bun), sau null dacă scorul nu e în clasament.
  • Niciunul dintre helperi nu modifică scores.

Testele sunt verzi. Verifică dacă helperii sunt corecți pentru scorurile pe care le-ar avea un utilizator real.

Repară codul până trec testele ascunse.

code.ts

Teste vizibile (trec pe codul primit)
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);
  });
});