org.apache.hadoop.examples.dancing
Class Pentomino

java.lang.Object
  extended by org.apache.hadoop.examples.dancing.Pentomino
Direct Known Subclasses:
OneSidedPentomino

public class Pentomino
extends Object


Nested Class Summary
protected static interface Pentomino.ColumnName
          This interface just is a marker for what types I expect to get back as column names.
protected static class Pentomino.Piece
          Maintain information about a puzzle piece.
static class Pentomino.SolutionCategory
           
 
Field Summary
protected static int[] fourRotations
          Are all 4 rotations unique?
protected  int height
           
protected static int[] oneRotation
          Is the piece fixed under rotation?
protected  List<Pentomino.Piece> pieces
           
protected static int[] twoRotations
          Is the piece identical if rotated 180 degrees?
protected  int width
           
 
Constructor Summary
Pentomino()
          Create the object without initialization.
Pentomino(int width, int height)
          Create the model for a given pentomino set of pieces and board size.
 
Method Summary
 Pentomino.SolutionCategory getCategory(List<List<Pentomino.ColumnName>> names)
          Find whether the solution has the x in the upper left quadrant, the x-midline, the y-midline or in the center.
 List<int[]> getSplits(int depth)
          Generate a list of prefixes to a given depth
protected  void initializePieces()
          Fill in the pieces list.
static void main(String[] args)
          Solve the 6x10 pentomino puzzle.
 void setPrinter(DancingLinks.SolutionAcceptor<Pentomino.ColumnName> printer)
          Set the printer for the puzzle.
 int solve()
          Find all of the solutions to the puzzle.
 int solve(int[] split)
          Find all of the solutions that start with the given prefix.
static String stringifySolution(int width, int height, List<List<Pentomino.ColumnName>> solution)
          Convert a solution to the puzzle returned by the model into a string that represents the placement of the pieces onto the board.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

width

protected int width

height

protected int height

pieces

protected List<Pentomino.Piece> pieces

oneRotation

protected static final int[] oneRotation
Is the piece fixed under rotation?


twoRotations

protected static final int[] twoRotations
Is the piece identical if rotated 180 degrees?


fourRotations

protected static final int[] fourRotations
Are all 4 rotations unique?

Constructor Detail

Pentomino

public Pentomino(int width,
                 int height)
Create the model for a given pentomino set of pieces and board size.

Parameters:
width - the width of the board in squares
height - the height of the board in squares

Pentomino

public Pentomino()
Create the object without initialization.

Method Detail

stringifySolution

public static String stringifySolution(int width,
                                       int height,
                                       List<List<Pentomino.ColumnName>> solution)
Convert a solution to the puzzle returned by the model into a string that represents the placement of the pieces onto the board.

Parameters:
width - the width of the puzzle board
height - the height of the puzzle board
solution - the list of column names that were selected in the model
Returns:
a string representation of completed puzzle board

getCategory

public Pentomino.SolutionCategory getCategory(List<List<Pentomino.ColumnName>> names)
Find whether the solution has the x in the upper left quadrant, the x-midline, the y-midline or in the center.

Parameters:
names - the solution to check
Returns:
the catagory of the solution

initializePieces

protected void initializePieces()
Fill in the pieces list.


getSplits

public List<int[]> getSplits(int depth)
Generate a list of prefixes to a given depth

Parameters:
depth - the length of each prefix
Returns:
a list of arrays of ints, which are potential prefixes

solve

public int solve(int[] split)
Find all of the solutions that start with the given prefix. The printer is given each solution as it is found.

Parameters:
split - a list of row indexes that should be choosen for each row in order
Returns:
the number of solutions found

solve

public int solve()
Find all of the solutions to the puzzle.

Returns:
the number of solutions found

setPrinter

public void setPrinter(DancingLinks.SolutionAcceptor<Pentomino.ColumnName> printer)
Set the printer for the puzzle.

Parameters:
printer - A call-back object that is given each solution as it is found.

main

public static void main(String[] args)
Solve the 6x10 pentomino puzzle.



Copyright © 2009 The Apache Software Foundation