# pegGame.frink

``` // This Frink program analyzes the peg-jumping board game like the ones found // at Cracker Barrel. class PegGame { // This encodes the locations we can [jumpTo, over] from a given peg. class var jumpTable = [[[3,1],[5,2]],  // 0              [[6,3],[8,4]],  // 1              [[7,4],[9,5]],  // 2              [[0,1],[5,4],[10,6],[12,7]], // 3              [[11,7],[13,8]], // 4              [[0,2],[3,4],[12,8],[14,9]],  // 5              [[1,3],[8,7]],   // 6              [[2,4],[9,8]],   // 7              [[1,4],[6,7]],   // 8              [[2,5],[7,8]],   // 9              [[3,6],[12,11]], // 10              [[4,7],[13,12]], // 11              [[3,7],[5,8],[10,11],[14,13]], // 12              [[4,8],[11,12]], // 13              [[5,9],[12,13]]] // 14    // Sets up a board for analysis    class analyzeBoard[pegs, trackMoves = false] :=    {       results = makeArray[[11],0]       if trackMoves == true          moves = new array       else          moves = undef       analyzeBoardRecursive[pegs, results, moves]       sum = sum[results]       for i = 1 to 10       {          r = results@i          if (r != 0)             println["\$i\t\$r\t" + padLeft[format[r/sum*100,1,4],7," "]]       }    }    class analyzeBoardRecursive[pegs, results, currentMove] :=    {       //println[pegs]       movesFound = 0       pegsLeft = 0       for from = 0 to 14       {          if (pegs@from == true)          {             pegsLeft = pegsLeft + 1             jumps = jumpTable@from             for [jumpTo, jumpOver] = jumps                if pegs@jumpTo == false and pegs@jumpOver == true                {                   newBoard = pegs.shallowCopy[]                   newBoard@from = false                   newBoard@jumpTo = true                   newBoard@jumpOver = false                   movesFound = movesFound + 1                   if currentMove != undef                   {                      newMoves = currentMove.shallowCopy[]                      newMoves.push["\$from-\$jumpTo"]                   }                   analyzeBoardRecursive[newBoard, results, newMoves]                }          }       }       if (movesFound == 0)       {          //println[pegsLeft]          if pegsLeft == 1          {             print["remain:\$pegsLeft\t"]             if (currentMove != undef)                print[join[" ",currentMove]]             println["\t\$pegs"]          }          results@pegsLeft = results@pegsLeft + 1       }    } }   pegs = makeArray[[15],true] // Remove one peg pegs@0 = false println["\n(0 initially empty):"] PegGame.analyzeBoard[pegs, true] pegs = makeArray[[15],true] // Remove one peg pegs@1 = false println["\n(1 initially empty):"] PegGame.analyzeBoard[pegs, true] pegs = makeArray[[15],true] // Remove one peg pegs@4 = false println["\n(3 initially empty):"] PegGame.analyzeBoard[pegs, true] pegs = makeArray[[15],true] // Remove one peg pegs@3 = false println["\n(4 initially empty):"] PegGame.analyzeBoard[pegs, true]              ```

This is a program written in the programming language Frink.
For more information, view the Frink Documentation or see More Sample Frink Programs.

Alan Eliasen was born 18657 days, 14 hours, 40 minutes ago.