Skip to content

Instantly share code, notes, and snippets.

@ehgoodenough
Last active December 17, 2015 10:58
Show Gist options
  • Save ehgoodenough/5598205 to your computer and use it in GitHub Desktop.
Save ehgoodenough/5598205 to your computer and use it in GitHub Desktop.
A magic square is an array of numbers where the sum of each column or row return the same value. This class can analyze the array for a magic square.
class Square
{
private:
const int size;
int* grid;
public:
Square() : size(4) {grid = new int[size * size];}
Square(int size) : size(size) {grid = new int[size * size];}
void setNode(int value, int x, int y) {grid[y * size + x] = value;}
int getNode(int x, int y) {return grid[y * size + x];}
int getSize() {return size;}
bool isMagic() {return hasMagicSums() && hasMagicNumbers()}
int getRowSum(int row)
{
int sum = 0; for(int aee = 0; aee < size; aee++)
{sum += getNode(row,aee);} return sum;
}
int getColumnSum(int column)
{
int sum = 0; for(int aee = 0; aee < size; aee++)
{sum += getNode(aee,column);} return sum;
}
int getCornerSum(int corner)
{
int sum = 0; for(int aee = 0; aee < size; aee++)
{int iee = (corner > 0) ? (0 + aee) : (size - aee - 1);
sum += getNode(iee, aee);} return sum;
}
int hasMagicSums()
{
int* allSums = new int[size * 2 + 2];
for(int iee = 0; iee < size; iee++) {allSums[iee] = getRowSum(iee);}
for(int oee = 0; oee < size; oee++) {allSums[size + oee] = getColumnSum(oee);}
allSums[size * 2] = getCornerSum(-1); allSums[size * 2 + 1] = getCornerSum(1); int sampleSum = allSums[0];
for(int aee = 1; aee < size * 2 + 2; aee++) {if(allSums[aee] != sampleSum) {return false;}}
return true;
}
bool hasMagicNumbers()
{
bool* everyNumber = new bool[size * size];
for(int aee = 0; aee < size * size; aee++) {everyNumber[aee] = false;}
for(int iee = 0; iee < size; iee++) {for(int oee = 0; oee < size; oee++)
{
if(getNode(iee,oee) > size * size) {return false;}
if(everyNumber[getNode(iee,oee) - 1] == true) {return false;}
everyNumber[getNode(iee,oee) - 1] = true;
}}
return true;
}
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment