I got my Epic badge (50 days at or over rep cap) on EL&U.SE when my reputation
page showed only 43 days (not a precise number, I don't recall exactly but it was around that). In other words, the last line of the page showed:
earned at least 200 reputation on 43 days
In fact, in order to get the Epic badge, shouldn't it have read the following?
earned at least 200 reputation on 50 days
An actual hand-count of all the 200-and-over days yielded 50 days at or over 200.
This was puzzling to me, why there should be such a difference, so I wrote a macro in Javascript for use with KomodoEdit:
// access application object for the page
var appObj = ko.views.manager.currentView.scimoz;
// if nothing is selected, select everything
if (appObj.selText == '') {
appObj.selectAll();
}
var docText = appObj.selText; // get the text
var re; // var for regex
// get rid of lines that don't contain + symbol
// because the summary lines are the only ones we care about
re = new RegExp("^((?!\\+).)*$","gim");
docText = docText.replace(re,'');
// get rid of multiple returns
re = new RegExp("^[\r\n]+","gim");
docText = docText.replace(re,'\n');
// get rid of everything up to and including the + in summary lines
re = new RegExp("^-[^\\+]+\\+","gim");
docText = docText.replace(re, '');
// split the text, create second array, push 200 and over values
// onto second array, etc.
var ary = docText.split('\n');
var total = 0;
var ary2 = [];
for (var i=0, imax=ary.length; i<imax; i++) {
var n = ary[i].split(' ')[0];
if (n && n != '') {
var targetNum = parseInt(n,10);
if (targetNum > 199) {
total++;
ary2.push(ary[i]);
}
}
}
// sort the qualifying days and put them in the text var
ary2 = ary2.sort();
docText = ary2.join('\n');
// Announce the result
alert("You have " + total + " days at or over the rep cap.");
// put the modified text back in the document, replacing what was there
appObj.replaceSel(docText);
ko.commands.doCommand('cmd_cleanLineEndings');
(Feel free to use this if you like. It could easily be altered to create a GreaseMonkey script, etc.).
This macro accurately counts the number of days the rep score is 200 or more, and sorts them from lowest to highest. Using it I notice that the number of days AT 200 REP represents the exact discrepancy between the actual and reported values.
Now, to my way of thinking, a value of 200 qualifies as "at least 200" — or am I missing something? Obviously the system awards badges based on actual days 200 or over, and yet reports only days OVER 200.
Why does this discrepancy exist? Either words mean something or they don't, and I'd like an explanation of what is meant here by "at least".
[Note: Yes, I did rep recalc before running the script, etc. And, yes, I looked at other answers involving questions about rep-cap calculation, but none seemed to address this issue exactly.]
EDIT All better now. Or will be when the new build goes through. See @Nick Cravers's comment to the accepted answer.