In case anyone wants to know, here are the specs for Boggle – both for Original Boggle and for Big Boggle – in a handy machine-readable format. The format is line oriented with each line representing a single die, and the sides of the dice delimited by spaces. Note that there is a side with 'Qu' on it, so you must allow for a multi-letter side in your parser.
original_boggle.txt
A A C I O T A B I L T Y A B J M O Qu A C D E M P A C E L R S A D E N V Z A H M O R S B F I O R X D E N O S W D K N O T U E E F H I Y E G I N T V E G K L U Y E H I N P S E L P S T U G I L R U W |
big_boggle.txt
A A A F R S A A E E E E A A F I R S A D E N N N A E E E E M A E E G M U A E G M N N A F I R S Y B J K Qu X Z C C E N S T C E I I L T C E I L P T C E I P S T D D H N O T D H H L O R D H L N O R D H L N O R E I I I T T E M O T T T E N S S S U F I P R S Y G O R R V W I P R R R Y N O O T U W O O O T T U |
Usage
Here is a simple CFML function which accepts a board definition and returns an array representing a "roll" of the grid:
<cffunction name="roll" output="false" returntype="array"> <cfargument name="board" type="string" required="true" /> <cfset var result = [] /> <cfloop list="#board#" index="die" delimiters="#chr(10)#"> <cfset die = listToArray(die, ' ') /> <cfset arrayAppend(result, die[randRange(1, arrayLen(die))]) /> </cfloop> <cfset createObject('java', 'java.util.Collections').shuffle(result) /> <cfreturn result /> </cffunction>
And the result of executing it on the original board:
[N, T, W, A, B, Qu, B, D, L, M, D, H, D, L, G, V]
Here's a Groovy Closure which does the same thing:
{ it = it.tokenize('\n') .collect{ it.tokenize(' ') } .collect{ it[new Random().nextInt(it.size)] } Collections.shuffle(it) // icky! it }
And the result of executing it on the big board:
[N, E, G, N, N, C, S, A, F, E, U, N, H, I, P, H, C, T, T, O, I, O, Qu, T, T]
NB: The source for this post can be found at http://www.barneyb.com/boggle/. Any updates I may have will go there.
Comments are closed.