[rules-dev] [Fwd: Unsolicited "Improvements" to the sudoku example]

Mark Proctor mproctor at redhat.com
Thu Nov 6 20:49:21 EST 2008


Anyone want to take this on?

Mark

-------- Original Message --------
Subject: 	Unsolicited "Improvements" to the sudoku example
Date: 	Thu, 6 Nov 2008 04:17:31 +0000 (UTC)
From: 	ted.keenan at comcast.net
To: 	mark.proctor at jboss.com



To Whom It May Concern:

 

Here is an unsolicited patch that addresses some to do items in the 
Sudoku example:

   1. The patch combines the two drl files into a single file,
      sudokuSolverValidatorWithGuess.drl, and separates them by using
      agenda groups.
   2. It simplifies the checking of whether all possible cells have a
      solution by creating an object, basecell, for each cell that needs
      a resolved cell and introduces it into the memory space. A rule
      then checks baseCells against resolvedCellValues for the memory set.
   3. Changes the way issues are raised by removing the issues array and
      adding various types of SudokuStatusMessages so that the status of
      the solution can be tracked by a separate status listener. This
      allows the model to track the status of solution.
   4. Provides a solution to the rule 11 guessing rule. This is a little
      complex as the process is to identify a cell with multiple
      possible values and pick one of them and then run a copy of the
      solver to its logical conclusion and identify the result which is
      one of the following: solved, in error or indeterminate. The
      process is repeated until a solved solution is identified.
      Each pass keeps tracks the removal and insertion of memory facts
      so that they can be reversed at the end of the logical test. At
      the end of each test the effects of the test are reversed and one
      of the following is done depending on the result. If the test is
      indeterminate; keep testing. If the solution is solved; set the
      guessed cell value pair as the only possible value for the cell
      and run the base testing routines. If the solution is logically
      inconsistent; remove the cell value as a possibleCellValue, if
      this leaves only one possibleCellValue then run the base testing
      routines.
      Note, the error cases don’t necessarily solve the puzzle the end
      so sometimes you need to guess multiple times.
   5. Changed the constants and samples into a strategy pattern that can
      support 4x4 and 6x6 grids as well as the 9x9 grid. This was done
      to simplify testing as it is easier to test an indeterminate 4x4
      grid then a hard 9x9 grid when guessing.

Note: the samples for 4x4 and 6x6 have indeterminate examples which can 
end up in multiple solutions. The 4x4 grid can reverse the values 1 and 
3 depending order of resolution. The 6x6 can display various behavior, 
including solving a subset of the puzzle in one step and eliminating 
only one possible cell for several guesses before hitting on a solution.

I hope this helps. 

Ted Keenan
 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-dev/attachments/20081107/146e74a2/attachment.html 
-------------- next part --------------
A non-text attachment was scrubbed...
Name: SudokuSolveAny.patch
Type: application/octet-stream
Size: 122919 bytes
Desc: not available
Url : http://lists.jboss.org/pipermail/rules-dev/attachments/20081107/146e74a2/attachment.obj 


More information about the rules-dev mailing list