Thanks for the feedback.
Initially I thought it would be possible to show the N best lineups very easily, but as I thought about it, that was wrong. The only way to make the program run in a manageable amount of time is to eliminate from consideration the players who cannot possibly be in the optimal lineup. So if Brees is $1000 and is projected to score 27.9 points, and if Stafford is $1000 and is projected to score 27.8 points, Stafford is eliminated from consideration. That's fine for determining the first-best optimal lineup, but it won't do for determining the second-best lineup because Stafford could very well be part of the second-best lineup.
So while it's easy for me to keep track of the 2nd-Nth best lineups that don't include Stafford or people like him, in order to get the true second-best lineup, I have to add Stafford back in to the pool. That's fine, but it means that finding the true second-best lineup means running the program again -- not simply keeping track of the 2nd-Nth best lineups from the first time I ran it.
So instead of running the program once for each salary cap and set of projections, I'm running it ten times -- once to find the best overall lineup, once to find the best lineup without the QB from the best overall lineup, once to find the best lineup without the RB1 from the best overall lineup . . . once to find the best lineup without the kicker from the best overall lineup, and once to find the best lineup without the defense from the best overall lineup.
So while it'd be nice to make the second list clickable as well (so that you could, for instance, click on Romo on the first list to generate a second list without him, and then click on Dez Bryant from the second list to generate a third list without either Romo or Bryant), that would involve running the program 82 times for each salary cap and set of projections. With four sets of projections, three salary caps, and multiple game times (1 pm only, late games, etc.), it balloons up into an unmanageable task.
Running the program takes only a few seconds per iteration, but a few seconds * 82 combinations * 4 projections * 3 salary caps * 3 game times = about 4 hours of processing time, which is not practical.
The better option, which I may have working next season, would be running the program on the client's browser instead of running it on my PC a zillion times and then uploading all the results. I don't know if the speed would be similar that way, but assuming it would be, you could input all the parameters (including customizing the weight of different projectors at different positions), click a button, wait two seconds, and you'd have whatever variation of the lineup you wanted. That's a job for javascript, though, and I'd really never used javascript, and remained completely unfamiliar with it, until literally three days ago. So to port my program over from Visual Basic to javascript probably isn't going to happen this season. The best I can do for now is to upload all the results and then use a total beginner's understanding of javascript to manipulate how they're shown (as I've done
here). Next season, though . . .
In the meantime, for this season, I think I'm going to leave the On The Daily feature pretty much the way it is, get the second-option
variations page prettied up a bit so that it's ready to go live, and then work on an interactive value chart as a tool for people to figure out their own lineups (instead of just passively viewing whatever lineups On The Daily spits out).