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:
topScoresreturnează cele mai marinscoruri, de la cel mai mare; pe toate, dacă sunt mai puține decâtn.personalBestreturnează cel mai mare scor saunullcând nu există niciunul.rankOfreturnează locul unui scor, numărat de la 1 (1 e cel mai bun), saunulldacă 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);
});
});