/*
 *  @Author : huangzj
 *  @Time : 2020/7/13 15:08
 *  @Description：矩阵旋转问题解决(这个是之前在2048游戏里面)
 */

package problem

import (
	"fmt"
	"testing"
)

const (
	SIZE = 4
)

func TestMatrixRotationTest(t *testing.T) {
	//矩阵旋转.....
	e := [SIZE][SIZE]int{{0, 1, 2, 3}, {4, 5, 6, 7}, {8, 9, 10, 11}, {12, 13, 14, 15}}
	MatrixRotation(e)
	MatrixRotationAnti(e)
	MatrixRotationHalfCircle(e)
	MatrixRotationAntiHalfCircle(e)
}

//矩阵旋转-逆时针旋转90度
func MatrixRotationAnti(matrix [SIZE][SIZE]int) [SIZE][SIZE]int {
	var temp [SIZE][SIZE]int
	for i := 0; i < SIZE; i++ {
		for j := 0; j < SIZE; j++ {
			temp[SIZE-j-1][i] = matrix[i][j]
		}
	}
	fmt.Println(temp)
	return temp
}

//顺时针旋转90度
func MatrixRotation(matrix [SIZE][SIZE]int) [SIZE][SIZE]int {
	var temp [SIZE][SIZE]int
	for i := 0; i < SIZE; i++ {
		for j := 0; j < SIZE; j++ {
			temp[j][SIZE-1-i] = matrix[i][j]
		}
	}
	fmt.Println(temp)
	return temp
}

//矩阵逆时针旋转180度 --顺逆时针结果一致
func MatrixRotationAntiHalfCircle(matrix [SIZE][SIZE]int) [SIZE][SIZE]int {
	var temp [SIZE][SIZE]int
	for i := 0; i < SIZE; i++ {
		for j := 0; j < SIZE; j++ {
			temp[SIZE-1-i][SIZE-1-j] = matrix[i][j]
		}
	}
	fmt.Println(temp)
	return temp
}

//矩阵顺时针旋转180度
func MatrixRotationHalfCircle(matrix [SIZE][SIZE]int) [SIZE][SIZE]int {
	var temp [SIZE][SIZE]int
	for i := 0; i < SIZE; i++ {
		for j := 0; j < SIZE; j++ {
			temp[SIZE-1-i][SIZE-1-j] = matrix[i][j]
		}
	}
	fmt.Println(temp)
	return temp
}
