Note, before the
pointful part of the writeup:
I was going to put this under "
Stupidest thing you've coded just to see if you could", but it doesn't precisely describe the story, and that node is too full already. A better name for this node would be "The
worst way to tell
singular from
plural", but that's
long and
unwieldy.
I'm a high school senior at the time of this writing, and am taking a
C++ class. On a recent quiz, the teacher told us to write a fragment of code that did the same thing as the following:
if (i == 1)
cout << "You have " << 1 << " thing." << endl;
else
cout << "You have " << i << " things." << endl;
...without using if, while, do/while, for, goto, or switch. The point of the exercise, as might be obvious, was to get us to use the
choice operator. However, even if I remembered that the
choice operator existed at the time, I certainly didn't remember how to
wrangle my condition and choices around that
question mark and
colon. Therefore, I wrote this monstrosity:
bool a = (1 - i);
char sornot[2];
sornot[0] = ('s' * a + '.' * (1 - a));
sornot[1] = ('.' * a + ' ' * (1 - a));
cout << endl << "You have " << i << " item" << sornot[0] << sornot[1] << endl;
...and it worked!
I stuck this at the start:
#include <iostream>
using namespace std;
int main ()
{
int i;
cout << "How many items do you have? ";
cin >> i;
...and this at the end:
return 0;
}
...and it compiled and ran. Frankly, I astonished myself that something so ridiculous-looking worked, when the programs I write using the methods we're supposed to usually don't work.
I owe my success to two facts that I happened to remember. Despite the fact that I knew very little
C++ at the time (and still do!), I did know that character variables are just numbers, and can be manipulated as such, and that if a boolean variable is set equal to any number other than zero, it is really set equal to one.
I got full credit for my answer, since it did work perfectly, disregarding the extra space that is output at the end of the sentence when i equals one.
I'm proud of my achievement - that it's some of the ugliest, most confusing functional code that my teacher's ever seen.
At the risk of sounding
pretentious, I honestly don't know if the function of the code I wrote is apparant. It did take me about twenty minutes to come up with the premise and write it so it works. I was thinking of explaining how I actually thought of what I did and why it works, but I don't know if that's necessary, and if no one reading this writeup actually wants to read an explanation, it would seem long-winded and boring. If anyone doesn't get it, or thinks it could use an explanation, msg me and I'll add one.
December 3, 2001: This just caught my eye in the Random Nodes nodelet.
It always bothers me when a writeup of mine gets only one or two votes, or none. I'm much more satisfied with, say, +4/-4 than a writeup that no one apparantly read.
But no one still read it.