MCPcopy Create free account
hub / github.com/Project-LemonLime/Project_LemonLime / getScoreNormalChart

Method getScoreNormalChart

src/statisticsbrowser.cpp:36–103  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

34void StatisticsBrowser::setContest(Contest *contest) { curContest = contest; }
35
36auto StatisticsBrowser::getScoreNormalChart(const QMap<int, int> &scoreCount, int listSize,
37 int totalScore) -> QString {
38 QString buffer = "";
39 long long overallScoreSum = 0;
40 double scoreDiscrim = 0;
41 double scoreStandardDevia = 0;
42 int scoreTierPrefix = 0;
43 int lastScoreTier = -1;
44 int lastScoreTierNum = -1;
45
46 for (auto i = scoreCount.constEnd(); i != scoreCount.constBegin();) {
47 i--;
48 int curScoreTier = i.key();
49 int curScoreTierNum = i.value();
50
51 if (curScoreTier < 0)
52 continue;
53
54 overallScoreSum += 1LL * curScoreTier * curScoreTierNum;
55
56 if (lastScoreTier >= 0)
57 scoreDiscrim += qLn(1 + 10.00 * (lastScoreTier - curScoreTier) / totalScore) *
58 (1.00 - 1.00 * lastScoreTierNum * curScoreTierNum / listSize / listSize);
59
60 lastScoreTier = curScoreTier;
61 lastScoreTierNum = curScoreTierNum;
62 }
63
64 double scoreAverage = 1.00 * overallScoreSum / listSize;
65 buffer += "<table border=\"-1\">";
66 buffer +=
67 QString(R"(<tr><th>%1</th><th>%2</th><th>%3</th><th colspan="2">%4</th><th colspan="2">%5</th></tr>)")
68 .arg(tr("Score"))
69 .arg(tr("Count"))
70 .arg(tr("Ratio"))
71 .arg(tr("Prefix"))
72 .arg(tr("Suffix"));
73
74 for (auto i = scoreCount.constEnd(); i != scoreCount.constBegin();) {
75 i--;
76 int curScoreTier = i.key();
77 int curScoreTierNum = i.value();
78 scoreStandardDevia += qPow(curScoreTier - scoreAverage, 2) * curScoreTierNum;
79 buffer += "<tr>";
80 buffer += QString("<td align=\"right\"><nobr>%1 Pt</nobr></td>")
81 .arg(curScoreTier < 0 ? QString("N/A") : QString::number(curScoreTier));
82 buffer += QString("<td align=\"right\"><nobr>%1</nobr></td>").arg(curScoreTierNum);
83 buffer += QString("<td align=\"right\"><nobr>%1%</nobr></td>")
84 .arg(QString::number(100.00 * curScoreTierNum / listSize, 'f', 3));
85 buffer += QString("<td align=\"right\"><nobr>%1</nobr></td>").arg(listSize - scoreTierPrefix);
86 buffer += QString("<td align=\"right\"><nobr>%1%</nobr></td>")
87 .arg(QString::number(100.00 - 100.00 * scoreTierPrefix / listSize, 'f', 3));
88 scoreTierPrefix += curScoreTierNum;
89 buffer += QString("<td align=\"right\"><nobr>%1</nobr></td>").arg(scoreTierPrefix);
90 buffer += QString("<td align=\"right\"><nobr>%1%</nobr></td>")
91 .arg(QString::number(100.00 * scoreTierPrefix / listSize, 'f', 3));
92 buffer += "</tr>";
93 }

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected