Self-WTF
-
So I was looking through some old stuff I wrote when I was a student, and came across this gem (carbuncles are gems, right?):
//returns true if it made a step, false if it couldn't do so
bool oneStep(vector<unsigned long long>& baseVec)
{
const unsigned lastEl = baseVec.size();
baseVec.push_back(0);
for (int i = lastEl; i >= 0; i--)
if (baseVec[i] >= 2)
for (unsigned j = i + 1; j <= lastEl; j++)
if (baseVec[j] + 2 <= baseVec[i])
{
baseVec[j]++;
baseVec[i]--;
for (unsigned k = j, l = lastEl; k < l;)
if (baseVec[k] == baseVec[k - 1])
k++;
else if (baseVec[l])
{
baseVec[k]++;
baseVec[l]--;
}
else
l--;
while (!baseVec.back())
baseVec.pop_back();
return true;
}
return false;
}I'm not sure what the worst part is: my apparent allergy to braces, the variable names, the singularly unhelpful comment, the complete lack of any indication what the function actually does, the bizarre way I used repeated ++ and -- rather than adding and subtracting a lump all at once... geez. (I actually remember writing this, a little. In an earlier version, the variable i was unsigned. That is, I was testing an unsigned number to see if it was >= 0. Yeah. That caused some problems.)
-
@RedFeather said:
(I actually remember writing this, a little. In an earlier version, the variable i was unsigned. That is, I was testing an unsigned number to see if it was >= 0. Yeah. That caused some problems.)
Don't you know that C13 will require that unsigned can represent -1 as well, exactly to remove that source of errors?
On a similar note, float and double will need to store integers up to 2**61, too.So you're just a bit early.
Edit: why are the types marked with TT in the edit field, but not in the result?
-
@flop said:
Don't you know that C13 will require that unsigned can represent -1 as well, exactly to remove that source of errors?
Wait, what, seriously? That's going to cause way more bugs than it prevents. What I really should have done is test whether (i+1) > 0. On another variable type note: looking at the program, there was no real reason for the vector to hold unsigned long longs; there was no plausible way any entry in it could even get into the triple digits.
-
I hope that was a joke.
-
Okay, yeah, that must have been a joke. There's no such thing as C13, for one thing. Too early in the morning for me to get humor, I guess.
-
-
@blakeyrat said:
@Medinoc said:
I hope that was a joke.
On this site?!
It's less likely than you think.
-
@RedFeather said:
const unsigned lastEl = baseVec.size();
Error right here. Must subtract one. That will fail for an empty vector, though.
-
@alegr said:
Error right here. Must subtract one. That will fail for an empty vector, though.
No, that's intentional. Note that in the next line I add another element to the end.