A while back my youngest son, who is an avid Go player, asked me, “Is it true there are more possible Go games than there are atoms in the universe?”
“Absolutely,” I replied, “Let’s fire up FileMaker Pro and prove it.” (I wasn’t about to let a rare teachable moment slip by.) “If memory serves, the number of atoms in the universe is estimated be roughly 10^80. Since a Go board is 19 by 19, in theory there are 361 possible first moves (19^2), followed by 360 possible second moves for each of those 361 first moves, followed by 359 possible third moves for each of the 360 possible second moves, and so on. Therefore the total number of moves can be calculated as 361 x 360 x 359… x 1, or, more simply, 361! (i.e., 361 factorial).”
In Go, stones are placed on the line intersections, not on the spaces, which is why the Go board is 19 by 19, and not 18 by 18. It also turns out that my assumption re: possible Go moves was overly simplistic, but I didn’t realize that at the time… see Number of Possible Go Games for a detailed exploration.
So, which number is bigger, 361! or 10^80? Given that FileMaker has a Factorial function, you might think that the expression at left would work, but alas, the largest value that the Factorial function can handle is 212. So, I headed over to WolframAlpha, requested the factorial for 361…
…and, yep, 10^768 is certainly larger than 10^80.
Several days later, I happened to mention this episode to Jason DeLooze, and expressed disappointment that I hadn’t been able to compute 361! using my favorite database program. He pointed out that there is a simple work around (apart from the obvious 361 x 360 x 359… approach), and suggested that I take a look at the Factorial help page, and think about that “optional number of factors” parameter.
Near the bottom of the help page, the second example caught my eye…
…but I wasn’t sure what to make of it, so he explained that I could create two factorial statements and multiply them together, like so:
Factorial ( numberA ) * Factorial ( numberB ; numberOfFactors )
…where numberA = 212, numberB = 361 and numberOfFactors =149 (i.e., the difference between 361 and 212). And you know what? He was right.
I always knew there was a missing factor stopping me get my head around Go! It turns out I was completely right; a rare occurrence indeed!
Impressive!
One of those functions I skirt around…
the number is actually higher than 361! because of ko fights and captures vacating filled positions :)
As noted in the article (“It also turns out that my assumption re: possible Go moves was overly simplistic, but I didn’t realize that at the time…”).