I promise I’m not dead. I’ve just been learning Bowling. Now it’s your turn.

So I’ve only gotten my average in bowling up to about 135 which is pretty pathetic all things considered for five years of effort and sleeping in the ball return. But in an attempt to make myself feel better I’ve endeavored to use the only thing I’m actually good at.

That’s right, Semi-Advanced Mathematics

So even though google has gotten worse in the last 5 years you might be able to find though combinatorics fan websites that there are five quintillion, seven hundred and twenty six quadrillion, eight hundred and five, trillion, eight hundred and eighty-three billion, three-hundred and twenty-five million, seven-hundred eighty four thousand, five-hundred and seventy six (5,726,805,883,325,784,576) unique games of bowling. The reasoning is fairly simple, $66^{9} * 241$. There are 66 ways to complete any frame before the final one. It’s not a large number so it’s rather easy to count manually, but for a trick you can you the patern Gauss (apocraphully) noticed as a child to count them. I’ll start you, if the first ball is a 0, then there are 11 different results for the second ball from 0 to a Wombat. If the first was a 1, there are 10 and so on. The familliar equation is $66 = \frac{n(n+1)}{2}; n=11$

The final frame having 241 possibilities is more complicated and lacks an easy closed for solution, but it’s also not that many and can be manually counted if you’d like. But it’s also pretty easy to just figure them out. $11 + 65+ 110 + 55 = 241$

  • If there are two strikes, then the final ball has 11 possibilities
  • if just the first is a strike then we have $66 - 1$ possibilites, a normal frame without double counting any double strike ball.
  • If the first two balls form a spare, then you also get one more ball, 10 non-strikes followed by 11 for a normal ball, 110
  • If the final frame has no strikes or spares, we have 66 removing the strikes, so 55.

(I roughly did these calculations but didn’t think about it too hard before coding which is where i ran into a big issue)

So thats pretty neat, but i was referring to the number of different score cards not the number of different points results, that’s only 300. But what I failed to find is what portion of games fall into each of the 300 buckets. I got interested, so we’re doing that.

At the start it’s pretty easy, there’s a 0 point game where you get no points in every frame, so theres 1. You can end a game with 1 point but since that one pin could occur in any of the players 10 frames and on either the first or second ball of any frame that means that there are 20 different ways to get 1 point in bowling.

This process is going to get more and more complicated and bigger until we hit the top scores, where there are only few ways to get points. Starting at 290 there is only one way to get each score up until 300, that being strikes in the previous 12 frames and then whatever points obtained in the final frame.

Everything after this gets miserable lets abandon that, so it’s computer time.

First thing we’ll need is a struct to hold game data.

struct game {
    int frames[21];
};

And a function to score the game that i’ll walk though. Due to how scoring works, it’s simpler to start at the end. And it’s actually a good canidate for recursion, so we do that for style. Here’s the signature

void scoreFrame(int * base, int* cur, int strike, int spare, int* total )

As usual with recursion it’s best to start with our base case.

if(base == cur)
{
	return;
}
return scoreFrame(base, cur-2, strike, spare, total);

We use the base pointer arguement in the call to check for the start of the array, and then back up a frame with every call and make sure to pass the total along for that sweet tail recursion.

//Strike case
if(cur[0] == 10)
{
	ret += strike;
	ret += spare;
	ret += 10;
	strike = spare;
	spare = 10;
}
//Spare case
else if(cur[0] + cur[1] == 10)
{
	ret += spare;
	ret += 10;
	strike = cur[1];
	spare = cur[0];
}
//Open Case
else {
	ret += cur[0] + cur[1];
	strike = cur[1];
	spare = cur[0];
}

The calculations are fairly simple. Strikes get the passed in strike value as well as the spare, Spares just get the spare and opens get nothing. In all cases we update the strike and spare values to the appropriate values.

From there we make a calling function that sets up the recursion.

int scoreGame2( game& g )
{
	return scoreFrame(g.frames, 
			          g.frames + 16, 
			          g.frames[19], 
			          g.frames[18], 
			          g.frames[20] + g.frames[19] + g.frames[18] );
}

We do all the calculations for the final frame here and then kick off the recursion.

The nieve approch at this point is to simply create every possible game, score it, store that in a list. This is not possible within a reasonable amount of time. The problem also has an issue being memoized as it is not possible to precalculate the how we have progressed because the symptom of needing to score strikes requires us to look ahead and while it would be possible to save some calculation time on frames with out strikes, it doesn’t really help. I was able to run this simulation on 3 frames in about .3 seconds. assuming no overhead in growth of time this method would finish running in about 51,000 years. Which if finished at time of writing would mean i began running this sim around the end of the stone age. and would be as old as some of the oldest surviving peices of art created by humans.

Because I want to finish this at some time, we’re going to work backwards from the final frame. This solves the memoization issue from last section. Since the 10th frame cannot score bonus points from spares or strikes, it is an effective base case. Then since every frame before the 10th scores similarly, if ther was a function to apply a frame before the tenth frame, we would be golden. Luckily there is. By tracking the total score as well as the last earliest/latest scores added to the total it is rather trivial to figure out where each score in the 66 different frame outcomes will result when added to paired with a possible previous/later score.

Again, we’ll need a structure to hold the score, but this time memoized. Starting at the 10th frame we’ll store our score in a structure like this.

long score[11][11][301] = {0};
long frame[11][11][11] = {0};

36,421 integers may seem like a lot, and it is but most of it ends up being used. Some of it. The structure is useful. Anyway, the individual elements represent how many ways there are to reach that particular score. The score being the number in the final index, and the first two representing the scores achived on the frame that scored last. Those will be used to calculate points for strikes and spares.

So the idea will be that we’ll start by marking the score array’s with how many ways there are to arrive at that score, and the first and second indexes being the point value of the last two balls.

long frame[last_ball][second_to_last_ball][points_earned] = {0};

Since besides the final frame every previous frame is identical we can combine them in what I’ll refer to as a convolution. The way we will convolve two frame arrays is by applying everywhere in an ordinary frames pattern to the the accumulated frame made up of each previous application. This will look something like this

for()
    ...
        for()
        {
            results[last_ball_points][second_to_last_ball_points][previous_score + last_ball_points + second_to_last_ball_points] += orinary[][][] * last_frame[][][]
        }

Of course we will need to account for strikes and spares in our calculations and make sure to add those points to our index as well. When all is said and done the function looks like this

void convolute( big a[11][11][11], big b[11][11][301], big c[11][11][301] )
{
	for(int i1 = 0; i1 < 11; i1++ )
		for(int j1 = 0; j1 < 11; j1++ )
			for(int k1 = 0; k1 < 11; k1++ )
			{
				for(int i2 = 0; i2 < 11; i2++ )
					for(int j2 = 0; j2 < 11; j2++ )
						for(int k2 = 0; k2 < 301; k2++ )
						{
							if(i1 == 10) //strike
								c[10][i2][k2 + k1 + i2 + j2] += b[i2][j2][k2] * a[i1][j1][k1];
							else if( k1 == 10) //spare
								c[i1][j1][k2 + k1 + i2 ] += b[i2][j2][k2] * a[i1][j1][k1];
							else //open
								c[i1][j1][k2 + k1] += b[i2][j2][k2] * a[i1][j1][k1];
						}
			}
}

A few notes, we can check for strike by checking the value of i1 because the x1 indexes are to the currently applying frame and if the first value is 10, the first ball scored 10 points which is a strike. On the other hand we check k1 for spares because k is the index that corresponds to points, and since it is the k on the applying ordinary frame this means that 10 total points were scored which are all spares ( if you ignore strikes, which the first case handles). This algorithm works pretty well. Finishes in 3 seconds on a Le Potato with -O2.

From this point, it’s just a lot of applying, clearing work arrays and swapping. But eventually you will get this beauty.

Points Combinations For This Score Total Combinations Precentile
0 1 1 0.000000%
1 20 21 0.000000%
2 210 231 0.000000%
3 1540 1771 0.000000%
4 8,855 10,626 0.000000%
5 42,504 53,130 0.000000%
6 177,100 230,230 0.000000%
7 657,800 888,030 0.000000%
8 2,220,075 3,108,105 0.000000%
9 6,906,900 10,015,005 0.000000%
10 20,030,010 30,045,015 0.000000%
11 54,627,084 84,672,099 0.000000%
12 141,116,637 225,788,736 0.000000%
13 347,336,412 573,125,148 0.000000%
14 818,558,424 1,391,683,572 0.000000%
15 1,854,631,380 3,246,314,952 0.000000%
16 4,053,948,342 7,300,263,294 0.000000%
17 8,574,134,256 15,874,397,550 0.000000%
18 17,590,903,116 33,465,300,666 0.000000%
19 35,084,425,512 68,549,726,178 0.000000%
20 68,153,183,370 136,702,909,548 0.000000%
21 129,156,542,039 265,859,451,587 0.000000%
22 239,128,282,128 504,987,733,715 0.000000%
23 433,093,980,298 938,081,714,013 0.000000%
24 768,175,029,950 1,706,256,743,963 0.000000%
25 1,335,679,056,261 3,041,935,800,224 0.000001%
26 2,278,764,308,864 5,320,700,109,088 0.000001%
27 3,817,721,269,708 9,138,421,378,796 0.000002%
28 6,285,424,931,278 15,423,846,310,074 0.000003%
29 10,176,048,813,473 25,599,895,123,547 0.000004%
30 16,210,652,213,304 41,810,547,336,851 0.000007%
31 25,423,690,787,719 67,234,238,124,570 0.000012%
32 39,274,771,758,064 106,509,009,882,634 0.000019%
33 59,789,973,730,461 166,298,983,613,095 0.000029%
34 89,736,657,900,900 256,035,641,513,995 0.000045%
35 132,834,787,033,075 388,870,428,547,070 0.000068%
36 194,006,223,597,572 582,876,652,144,642 0.000102%
37 279,661,205,716,974 862,537,857,861,616 0.000151%
38 398,018,151,390,200 1,260,556,009,251,816 0.000220%
39 559,449,136,091,831 1,820,005,145,343,647 0.000318%
40 776,838,931,567,572 2,596,844,076,911,219 0.000453%
41 1,065,940,588,576,732 3,662,784,665,487,951 0.000640%
42 1,445,705,502,357,343 5,108,490,167,845,294 0.000892%
43 1,938,561,121,705,315 7,047,051,289,550,609 0.001231%
44 2,570,605,432,880,903 9,617,656,722,431,512 0.001679%
45 3,371,684,590,465,908 12,989,341,312,897,420 0.002268%
46 4,375,319,099,346,208 17,364,660,412,243,628 0.003032%
47 5,618,445,228,564,793 22,983,105,640,808,421 0.004013%
48 7,140,942,201,229,333 30,124,047,842,037,754 0.005260%
49 8,984,922,304,030,443 39,108,970,146,068,197 0.006829%
50 11,193,770,355,829,009 50,302,740,501,897,206 0.008784%
51 13,810,930,667,765,157 64,113,671,169,662,363 0.011195%
52 16,878,453,276,117,746 80,992,124,445,780,109 0.014143%
53 20,435,326,129,713,654 101,427,450,575,493,763 0.017711%
54 24,515,635,362,932,954 125,943,085,938,426,717 0.021992%
55 29,146,610,869,639,549 155,089,696,808,066,266 0.027081%
56 34,346,628,376,654,913 189,436,325,184,721,179 0.033079%
57 40,123,251,227,815,383 229,559,576,412,536,562 0.040085%
58 46,471,404,549,689,351 276,030,980,962,225,913 0.048200%
59 53,371,780,703,441,318 329,402,761,665,667,231 0.057519%
60 60,789,577,452,586,487 390,192,339,118,253,718 0.068134%
61 68,673,668,434,334,934 458,866,007,552,588,652 0.080126%
62 76,956,298,564,663,402 535,822,306,117,252,054 0.093564%
63 85,553,384,395,717,227 621,375,690,512,969,281 0.108503%
64 94,365,480,254,213,528 715,741,170,767,182,809 0.124981%
65 103,279,445,170,253,902 819,020,615,937,436,711 0.143015%
66 112,170,812,747,354,087 931,191,428,684,790,798 0.162602%
67 120,906,827,121,834,566 1,052,098,255,806,625,364 0.183715%
68 129,350,064,451,661,348 1,181,448,320,258,286,712 0.206301%
69 137,362,512,979,745,598 1,318,810,833,238,032,310 0.230287%
70 144,809,940,796,620,325 1,463,620,774,034,652,635 0.255574%
71 151,566,341,291,631,624 1,615,187,115,326,284,259 0.282040%
72 157,518,221,668,013,078 1,772,705,336,994,297,337 0.309545%
73 162,568,486,673,578,693 1,935,273,823,667,876,030 0.337932%
74 166,639,683,923,175,378 2,101,913,507,591,051,408 0.367031%
75 169,676,402,232,105,648 2,271,589,909,823,157,056 0.396659%
76 171,646,676,234,883,305 2,443,236,586,058,040,361 0.426632%
77 172,542,309,343,731,946 2,615,778,895,401,772,307 0.456761%
78 172,378,125,687,965,848 2,788,157,021,089,738,155 0.486861%
79 171,190,226,627,438,257 2,959,347,247,717,176,412 0.516754%
80 169,033,430,825,208,027 3,128,380,678,542,384,439 0.546270%
81 165,978,103,316,094,584 3,294,358,781,858,479,023 0.575252%
82 162,106,654,714,921,075 3,456,465,436,573,400,098 0.603559%
83 157,509,948,809,043,576 3,613,975,385,382,443,674 0.631063%
84 152,283,892,386,077,931 3,766,259,277,768,521,605 0.657654%
85 146,526,364,181,517,039 3,912,785,641,950,038,644 0.683240%
86 140,334,651,650,668,803 4,053,120,293,600,707,447 0.707745%
87 133,803,399,444,707,801 4,186,923,693,045,415,248 0.731110%
88 127,023,103,852,577,896 4,313,946,796,897,993,144 0.753290%
89 120,079,021,507,938,035 4,434,025,818,405,931,179 0.774258%
90 113,050,455,155,943,519 4,547,076,273,561,874,698 0.793999%
91 106,010,240,661,754,449 4,653,086,514,223,629,147 0.812510%
92 99,024,411,737,621,323 4,752,110,925,961,250,470 0.829801%
93 92,151,904,402,003,308 4,844,262,830,363,253,778 0.845893%
94 85,444,345,654,857,875 4,929,707,176,018,111,653 0.860813%
95 78,945,863,453,573,001 5,008,653,039,471,684,654 0.874598%
96 72,693,023,944,120,045 5,081,346,063,415,804,699 0.887291%
97 66,714,881,583,314,335 5,148,060,944,999,119,034 0.898941%
98 61,033,240,145,235,763 5,209,094,185,144,354,797 0.909599%
99 55,663,091,133,973,346 5,264,757,276,278,328,143 0.919318%
100 50,613,244,155,051,856 5,315,370,520,433,379,999 0.928156%
101 45,887,089,510,794,122 5,361,257,609,944,174,121 0.936169%
102 41,483,436,078,768,079 5,402,741,046,022,942,200 0.943413%
103 37,397,371,704,961,189 5,440,138,417,727,903,389 0.949943%
104 33,621,048,067,136,846 5,473,759,465,795,040,235 0.955814%
105 30,144,388,614,623,696 5,503,903,854,409,663,931 0.961077%
106 26,955,619,314,626,157 5,530,859,473,724,290,088 0.965784%
107 24,041,709,119,775,647 5,554,901,182,844,065,735 0.969982%
108 21,388,640,692,533,960 5,576,289,823,536,599,695 0.973717%
109 18,981,680,119,465,910 5,595,271,503,656,065,605 0.977032%
110 16,805,547,548,715,206 5,612,077,051,204,780,811 0.979966%
111 14,844,654,231,857,239 5,626,921,705,436,638,050 0.982558%
112 13,083,276,623,221,517 5,640,004,982,059,859,567 0.984843%
113 11,505,812,292,077,067 5,651,510,794,351,936,634 0.986852%
114 10,096,971,927,616,045 5,661,607,766,279,552,679 0.988615%
115 8,842,020,009,154,293 5,670,449,786,288,706,972 0.990159%
116 7,726,929,590,817,265 5,678,176,715,879,524,237 0.991509%
117 6,738,528,470,417,086 5,684,915,244,349,941,323 0.992685%
118 5,864,552,560,171,552 5,690,779,796,910,112,875 0.993709%
119 5,093,653,838,062,639 5,695,873,450,748,175,514 0.994599%
120 4,415,377,510,495,980 5,700,288,828,258,671,494 0.995370%
121 3,820,097,597,373,727 5,704,108,925,856,045,221 0.996037%
122 3,298,981,687,014,508 5,707,407,907,543,059,729 0.996613%
123 2,843,905,747,206,868 5,710,251,813,290,266,597 0.997109%
124 2,447,444,695,948,898 5,712,699,257,986,215,495 0.997537%
125 2,102,793,053,565,659 5,714,802,051,039,781,154 0.997904%
126 1,803,790,254,604,935 5,716,605,841,294,386,089 0.998219%
127 1,544,848,145,184,291 5,718,150,689,439,570,380 0.998489%
128 1,320,992,367,181,792 5,719,471,681,806,752,172 0.998719%
129 1,127,775,864,826,813 5,720,599,457,671,578,985 0.998916%
130 961,294,388,171,457 5,721,560,752,059,750,442 0.999084%
131 818,085,023,387,881 5,722,378,837,083,138,323 0.999227%
132 695,128,788,327,698 5,723,073,965,871,466,021 0.999348%
133 589,753,122,859,383 5,723,663,718,994,325,404 0.999451%
134 499,630,252,931,260 5,724,163,349,247,256,664 0.999539%
135 422,696,870,992,462 5,724,586,046,118,249,126 0.999612%
136 357,151,976,811,922 5,724,943,198,095,061,048 0.999675%
137 301,400,973,036,441 5,725,244,599,068,097,489 0.999727%
138 254,052,574,077,937 5,725,498,651,642,175,426 0.999772%
139 213,889,601,295,347 5,725,712,541,243,470,773 0.999809%
140 179,862,464,456,172 5,725,892,403,707,926,945 0.999840%
141 151,065,169,242,834 5,726,043,468,877,169,779 0.999867%
142 126,722,015,973,414 5,726,170,190,893,143,193 0.999889%
143 106,169,469,752,641 5,726,276,360,362,895,834 0.999908%
144 88,840,622,360,686 5,726,365,200,985,256,520 0.999923%
145 74,252,067,274,687 5,726,439,453,052,531,207 0.999936%
146 61,990,415,093,876 5,726,501,443,467,625,083 0.999947%
147 51,701,385,089,887 5,726,553,144,852,714,970 0.999956%
148 43,082,666,091,665 5,726,596,227,518,806,635 0.999963%
149 35,870,481,552,300 5,726,632,098,000,358,935 0.999970%
150 29,843,343,433,392 5,726,661,941,343,792,327 0.999975%
151 24,808,172,866,872 5,726,686,749,516,659,199 0.999979%
152 20,607,116,162,379 5,726,707,356,632,821,578 0.999983%
153 17,101,443,169,235 5,726,724,458,075,990,813 0.999986%
154 14,181,008,701,762 5,726,738,639,084,692,575 0.999988%
155 11,747,089,496,422 5,726,750,386,174,188,997 0.999990%
156 9,723,545,122,578 5,726,760,109,719,311,575 0.999992%
157 8,040,378,083,433 5,726,768,150,097,395,008 0.999993%
158 6,644,452,641,044 5,726,774,794,550,036,052 0.999995%
159 5,486,702,080,236 5,726,780,281,252,116,288 0.999996%
160 4,529,003,381,568 5,726,784,810,255,497,856 0.999996%
161 3,736,165,201,688 5,726,788,546,420,699,544 0.999997%
162 3,081,105,018,158 5,726,791,627,525,717,702 0.999998%
163 2,539,255,963,377 5,726,794,166,781,681,079 0.999998%
164 2,091,793,858,275 5,726,796,258,575,539,354 0.999998%
165 1,721,930,513,702 5,726,797,980,506,053,056 0.999999%
166 1,416,734,360,140 5,726,799,397,240,413,196 0.999999%
167 1,164,733,232,308 5,726,800,561,973,645,504 0.999999%
168 957,190,045,595 5,726,801,519,163,691,099 0.999999%
169 785,911,852,914 5,726,802,305,075,544,013 0.999999%
170 645,295,369,580 5,726,802,950,370,913,593 0.999999%
171 529,489,941,608 5,726,803,479,860,855,201 0.999999%
172 434,606,120,455 5,726,803,914,466,975,656 0.999999%
173 356,481,490,646 5,726,804,270,948,466,302 0.999999%
174 292,487,050,484 5,726,804,563,435,516,786 0.999999%
175 239,755,303,889 5,726,804,803,190,820,675 0.999999%
176 196,550,315,542 5,726,804,999,741,136,217 0.999999%
177 160,954,253,448 5,726,805,160,695,389,665 0.999999%
178 131,791,387,388 5,726,805,292,486,777,053 0.999999%
179 107,847,709,116 5,726,805,400,334,486,169 0.999999%
180 88,241,591,630 5,726,805,488,576,077,799 0.999999%
181 72,162,948,863 5,726,805,560,739,026,662 0.999999%
182 59,038,079,745 5,726,805,619,777,106,407 0.999999%
183 48,284,335,855 5,726,805,668,061,442,262 0.999999%
184 39,509,743,432 5,726,805,707,571,185,694 0.999999%
185 32,308,399,043 5,726,805,739,879,584,737 0.999999%
186 26,423,428,886 5,726,805,766,303,013,623 0.999999%
187 21,582,203,262 5,726,805,787,885,216,885 0.999999%
188 17,624,621,529 5,726,805,805,509,838,414 0.999999%
189 14,368,737,009 5,726,805,819,878,575,423 0.999999%
190 11,720,626,558 5,726,805,831,599,201,981 0.999999%
191 9,552,812,749 5,726,805,841,152,014,730 0.999999%
192 7,790,240,907 5,726,805,848,942,255,637 0.999999%
193 6,351,933,169 5,726,805,855,294,188,806 0.999999%
194 5,185,250,585 5,726,805,860,479,439,391 0.999999%
195 4,232,118,751 5,726,805,864,711,558,142 0.999999%
196 3,457,204,258 5,726,805,868,168,762,400 0.999999%
197 2,821,392,492 5,726,805,870,990,154,892 0.999999%
198 2,302,090,127 5,726,805,873,292,245,019 0.999999%
199 1,874,802,017 5,726,805,875,167,047,036 0.999999%
200 1,526,313,637 5,726,805,876,693,360,673 0.999999%
201 1,239,515,641 5,726,805,877,932,876,314 0.999999%
202 1,007,719,386 5,726,805,878,940,595,700 0.999999%
203 818,568,928 5,726,805,879,759,164,628 0.999999%
204 666,193,896 5,726,805,880,425,358,524 0.999999%
205 542,061,609 5,726,805,880,967,420,133 0.999999%
206 442,072,320 5,726,805,881,409,492,453 0.999999%
207 360,234,562 5,726,805,881,769,727,015 0.999999%
208 293,886,739 5,726,805,882,063,613,754 0.999999%
209 239,045,260 5,726,805,882,302,659,014 0.999999%
210 194,337,731 5,726,805,882,496,996,745 0.999999%
211 157,306,293 5,726,805,882,654,303,038 0.999999%
212 127,325,163 5,726,805,882,781,628,201 0.999999%
213 102,799,565 5,726,805,882,884,427,766 0.999999%
214 83,194,097 5,726,805,882,967,621,863 0.999999%
215 67,300,605 5,726,805,883,034,922,468 0.999999%
216 54,691,522 5,726,805,883,089,613,990 0.999999%
217 44,477,808 5,726,805,883,134,091,798 0.999999%
218 36,317,458 5,726,805,883,170,409,256 0.999999%
219 29,606,794 5,726,805,883,200,016,050 0.999999%
220 24,117,404 5,726,805,883,224,133,454 0.999999%
221 19,554,213 5,726,805,883,243,687,667 0.999999%
222 15,820,964 5,726,805,883,259,508,631 0.999999%
223 12,736,481 5,726,805,883,272,245,112 0.999999%
224 10,258,846 5,726,805,883,282,503,958 0.999999%
225 8,244,157 5,726,805,883,290,748,115 0.999999%
226 6,659,561 5,726,805,883,297,407,676 0.999999%
227 5,381,526 5,726,805,883,302,789,202 0.999999%
228 4,385,243 5,726,805,883,307,174,445 0.999999%
229 3,576,841 5,726,805,883,310,751,286 0.999999%
230 2,930,385 5,726,805,883,313,681,671 0.999999%
231 2,376,760 5,726,805,883,316,058,431 0.999999%
232 1,924,226 5,726,805,883,317,982,657 0.999999%
233 1,541,327 5,726,805,883,319,523,984 0.999999%
234 1,231,527 5,726,805,883,320,755,511 0.999999%
235 975,760 5,726,805,883,321,731,271 0.999999%
236 777,090 5,726,805,883,322,508,361 0.999999%
237 617,547 5,726,805,883,323,125,908 0.999999%
238 498,228 5,726,805,883,323,624,136 0.999999%
239 404,981 5,726,805,883,324,029,117 0.999999%
240 335,065 5,726,805,883,324,364,182 0.999999%
241 275,998 5,726,805,883,324,640,180 0.999999%
242 226,966 5,726,805,883,324,867,146 0.999999%
243 183,727 5,726,805,883,325,050,873 0.999999%
244 148,442 5,726,805,883,325,199,315 0.999999%
245 117,291 5,726,805,883,325,316,606 0.999999%
246 93,525 5,726,805,883,325,410,131 0.999999%
247 73,010 5,726,805,883,325,483,141 0.999999%
248 57,960 5,726,805,883,325,541,101 0.999999%
249 45,826 5,726,805,883,325,586,927 0.999999%
250 37,965 5,726,805,883,325,624,892 0.999999%
251 31,193 5,726,805,883,325,656,085 0.999999%
252 26,131 5,726,805,883,325,682,216 0.999999%
253 21,406 5,726,805,883,325,703,622 0.999999%
254 17,422 5,726,805,883,325,721,044 0.999999%
255 13,613 5,726,805,883,325,734,657 0.999999%
256 10,696 5,726,805,883,325,745,353 0.999999%
257 7,975 5,726,805,883,325,753,328 0.999999%
258 6,005 5,726,805,883,325,759,333 0.999999%
259 4,374 5,726,805,883,325,763,707 0.999999%
260 3,534 5,726,805,883,325,767,241 0.999999%
261 3,016 5,726,805,883,325,770,257 0.999999%
262 2,635 5,726,805,883,325,772,892 0.999999%
263 2,264 5,726,805,883,325,775,156 0.999999%
264 1,933 5,726,805,883,325,777,089 0.999999%
265 1,603 5,726,805,883,325,778,692 0.999999%
266 1,323 5,726,805,883,325,780,015 0.999999%
267 1,045 5,726,805,883,325,781,060 0.999999%
268 810 5,726,805,883,325,781,870 0.999999%
269 585 5,726,805,883,325,782,455 0.999999%
270 406 5,726,805,883,325,782,861 0.999999%
271 277 5,726,805,883,325,783,138 0.999999%
272 258 5,726,805,883,325,783,396 0.999999%
273 227 5,726,805,883,325,783,623 0.999999%
274 206 5,726,805,883,325,783,829 0.999999%
275 173 5,726,805,883,325,784,002 0.999999%
276 150 5,726,805,883,325,784,152 0.999999%
277 115 5,726,805,883,325,784,267 0.999999%
278 90 5,726,805,883,325,784,357 0.999999%
279 53 5,726,805,883,325,784,410 0.999999%
280 26 5,726,805,883,325,784,436 0.999999%
281 15 5,726,805,883,325,784,451 0.999999%
282 15 5,726,805,883,325,784,466 0.999999%
283 14 5,726,805,883,325,784,480 0.999999%
284 14 5,726,805,883,325,784,494 0.999999%
285 13 5,726,805,883,325,784,507 0.999999%
286 13 5,726,805,883,325,784,520 0.999999%
287 12 5,726,805,883,325,784,532 0.999999%
288 12 5,726,805,883,325,784,544 0.999999%
289 11 5,726,805,883,325,784,555 0.999999%
290 11 5,726,805,883,325,784,566 0.999999%
291 1 5,726,805,883,325,784,567 0.999999%
292 1 5,726,805,883,325,784,568 0.999999%
293 1 5,726,805,883,325,784,569 0.999999%
294 1 5,726,805,883,325,784,570 0.999999%
295 1 5,726,805,883,325,784,571 0.999999%
296 1 5,726,805,883,325,784,572 0.999999%
297 1 5,726,805,883,325,784,573 0.999999%
298 1 5,726,805,883,325,784,574 0.999999%
299 1 5,726,805,883,325,784,575 0.999999%
300 1 5,726,805,883,325,784,576 1.000000%

Total Games:5,726,805,883,325,784,576

And there we go. Look at it’s majesty

First, bringing it on back to the beginning. Id like to draw your attention to the precentile for score 135, 0.999612 or in other words I am a top 1% bowler. There is no statistical difference between me and Roy Munson. Pete Webber, Walter Ray Willams Jr, Earl Anthony, who cares? An IEEE double floating point value barely knows the difference between us. Yes, I had to look up bowlers for this bit.

For some analysis with less shtick, I find it pretty interesting that the crossover point for the 50th percentile was at 79. Although it does make sense if you think about it. The highest score you can make with no strikes or splits is 90 so a lot of the scores are going to end up around there. The top score you can make before strikes become required is 190. Anywhere above this you’re required to have strike frames which significantly cuts down on possibilities. While it seems obvious when you think about it, I also think it’s interesting that there’s only one way to reach each of the last 10 frames.