Hi,
I would not use array but instead hashtable.
the key would represent the x and y grid position
"x_y", "piece ID"
so, you have then one hashtable representing the solved puzzle and one that represent the current state.
checking if the user solved it, means you simply go through each grid position and compare the values for the same key on both hashtable, as soon as it doesn't match, the user has not solved the puzzle.
Does that make sense?
you can also totally get away with a single string, where the position of each character represents a grid cell and the character itself the type of piece on that grid cell.
Since you never want to deduce a grid cell but always want to read the data knowing the grid cell, you can really optimize your data ( some would go all the way and have a bytearray if it was in pure c#)
Bye,
Jean