I can't quantify "alot" to your satisfaction with current program without additional modifications. But I don't really see the point in doing that because additional FUD will just be asserted. A person either wants to learn and gain knowledge or they don't. Its up to each individual.
As far as QuickPick terminal I can't compare without seeing how they generate their random numbers. The random number generator is the most important piece of the puzzle and without access to its guts I would just be conjecturing.
If any programmers are interested the following is routine that generated Combos A. I had a worker thread that generated all the combos in the background while the foreground UI thread updated the display in real-time.
void CWorkerThread::GenerateCombosA(void)
{
memset(m_balls, 0, sizeof(m_balls));
memset(m_combosA, 0, sizeof(m_combosA));
for (int i=0; i < m_comboCnt; i++)
{
int generatedBalls = 0;
while (generatedBalls < m_ballsPerDraw)
{
int randNum = MyRand() % m_ballsPerGame + 1;
if (m_balls[randNum] != 0)
{
continue;
}
generatedBalls++;
m_balls[randNum] = 1;
if (randNum < 32)
{
m_combosA[i].mask1 |= (1 << randNum);
}
else
{
m_combosA[i].mask2 |= (1 << randNum);
}
}
}
}
The part I highlited in red is what prevents duplicates when generating the 8 combos.
For 6/48 game m_balls is a boolean array from 0..48. Its used to keep track if that number has already been used when generating the combos
m_comboCnt = 8
m_ballsPerDraw = 6
m_ballsPerGame = 48
m_combosA is any array of size 8 that contains 2 DWORDS. 1 DWORD contains 32 bits, so I needed two DWORD to hold 48 numbers. Each bit set in the DWORDS represents a number. Its faster to use bits to represent a draw to speed up the comparisons done later to determine how many numbers match per draw. Its faster because boolean logic gets mapped to native instructions provided on Intel/AMD processors.
Since test Group A is what is really being measured these are the actual results of GroupA versus the odds:
match 2 of 6 = 1 in 7.31, actual 1 in 7.30 for test Group A
match 3 of 6 = 1 in 53.45 actual 1 in 53.44 for test Group A
match 4 of 6 = 1 in 950.18 actual 1 in 950.32 for test Group A
match 5 of 6 = 1 in 48,696.48 actual 1 in 48,197.33 for test Group A
match 6 of 6 = 1 in 12,271,512 actual 1 in 12,087,204 for test Group A
Jimmy