[2016-04-04] Challenge #261 [Easy] verifying 3x3 magic squares

In freebasic Bonus 1 is implemented

Function AddRange(Puzzle() As Byte, StartPos As Integer,Direction As Integer) As Integer

  Dim As Integer Sum, i


  For i = 0 To Sqr(UBound(Puzzle)) - 1

     Sum += Puzzle(StartPos + i * Direction)

  Next


  Return Sum    

End Function

Function IsMagicSquare(Puzzle() As Byte) As Boolean

  Dim As Integer PuzzleSize = UBound(Puzzle)

  Dim As Integer SquareSize = Sqr(PuzzleSize)

  Dim As Integer Sum,i


  '// Get sum of first Row, Use that value to compare all others lines To

  Sum = AddRange(Puzzle(),1,1)


  '// Check Rows

  For i = 1 To PuzzleSize Step SquareSize

     If AddRange(Puzzle(),i,1) <> Sum Then Return 0

  Next


  '// Check Columns

  For i = 1 To SquareSize 

     If AddRange(Puzzle(),i,SquareSize) <> Sum Then Return 0

  Next


  '// Check Topleft to BottomRight

  If AddRange(Puzzle(),1,SquareSize + 1) <> Sum Then Return 0


  '// Check TopRight to BottomLeft

  If AddRange(Puzzle(),SquareSize,SquareSize - 1) <> Sum Then Return 0


  Return 1

End Function

'// 3x3 Squares

Dim Puzzle_1(1 To 9) As Byte = {8, 1, 6, 3, 5, 7, 4, 9, 2} : Print IsMagicSquare(Puzzle_1()) '// True

Dim Puzzle_2(1 To 9) As Byte = {2, 7, 6, 9, 5, 1, 4, 3, 8} : Print IsMagicSquare(Puzzle_2()) '// True

Dim Puzzle_3(1 To 9) As Byte = {3, 5, 7, 8, 1, 6, 4, 9, 2} : Print IsMagicSquare(Puzzle_3()) '// False

Dim Puzzle_4(1 To 9) As Byte = {8, 1, 6, 7, 5, 3, 4, 9, 2} : Print IsMagicSquare(Puzzle_4()) '// False

'// 4x4 Squares

Dim Puzzle_5(1 To 16) As Byte = {4,14,15,1,9,7,6,12,5,11,10,8,16,2,3,13} : Print IsMagicSquare(Puzzle_5()) '// True

Dim Puzzle_6(1 To 16) As Byte = {4,14,1,15,9,7,6,12,11,5,10,8,16,2,3,13} : Print IsMagicSquare(Puzzle_6()) '// False

Sleep:end

/r/dailyprogrammer Thread