# Solving Draught Puzzle - Step 2

◀ Solving Draught Puzzle - Step 1▶ Solving Draught Puzzle - Step 3
Amazon Let’s apply the 2nd step of the Four-Step Programming Model to solve the Draught puzzle!

Four Step Programming Model: Step 2
We need variables to store attributes of the board and the pieces, including the total number of the pieces, the maximum number of orientations of a piece, the maximum number of rows a piece occupies, the maximum number of columns a piece occupies, the width of the board, and the height of the board.

I need a clock_t object to keep track of time; I need a char[][] to represent the board; I need another char[][] to store temporary piece; I need an ifstream object to open and read a file. The following is a list of variables I need:
```const int numPieces = 13;
const int numRows = 5;
const int numCols = 5;
const int boardWidth = 10;
const int boardHeight = 10;
clock_t start = clock();
char board[boardHeight][boardWidth];
char tempcc[numRows][numCols];
ifstream fin;```
I make the attributes of the board and the pieces constants because their values shouldn’t change throughout the program. In refining the skeleton, I realize that in order to not store repeated orientations, I need to be able to see if a particular orientation is already stored.

I create a little structure that contains a two-dimensional array to represent an orientation of a piece:
```struct array {
char acc[numRows][numCols];
};```
And I created the following functions:
```bool sameArray(array a, char cc[numRows][numCols]) {
- return true if the contents of a are identical to cc; return false otherwise
}
bool repeated(vector<array> va, char cc[numRows][numCols]) {
- return true if cc exists in va; return false otherwise