#include <stdio.h>
#include <stdlib.h>
#include <sys/time.h>
#include "Random.h"

#define LRAND(s) \
(((s) *= 41943011 - 2147483647) >> 32)

unsigned char Region_Offsets[5];

static void Set_Region_Permutation(uint32_t random_number){
	//dealing with 20 permutations !
	const unsigned char permutation[20][5] = {
		{0, 1, 2, 3, 4},
		{0, 2, 3, 4, 1},
		{0, 3, 4, 1, 2},
		{0, 4, 1, 2, 3},
		//{0, 1, 2, 3, 4},
		{1, 2, 3, 4, 0},
		{1, 3, 4, 0, 2},
		{1, 4, 0, 2, 3},
		{1, 0, 2, 3, 4},
		//{1, 1, 2, 3, 4},
		{2, 3, 4, 0, 1},
		{2, 4, 0, 1, 3},
		{2, 0, 1, 3, 4},
		{2, 1, 3, 4, 0},
		//{2, 1, 2, 3, 4},
		{3, 4, 0, 1, 2},
		{3, 0, 1, 2, 4},
		{3, 1, 2, 4, 0},
		{3, 2, 4, 0, 1},
		//{3, 1, 2, 3, 4},
		{4, 0, 1, 2, 3},
		{4, 1, 2, 3, 0},
		{4, 2, 3, 0, 1},
		{4, 3, 0, 1, 2}
	};
		//{4, 1, 2, 3, 4};
	//struct timeval cur;
	//gettimeofday(&cur, NULL);
	//uint64_t s = (uint64_t)cur.tv_usec + 3;
	uint32_t rand = random_number % 20;
	Region_Offsets[0] = permutation[rand][0];
	Region_Offsets[1] = permutation[rand][1];
	Region_Offsets[2] = permutation[rand][2];
	Region_Offsets[3] = permutation[rand][3];
	Region_Offsets[4] = permutation[rand][4];

}

int main(int argc, char **argv){
	int i = 0;
	struct timeval cur;
	gettimeofday(&cur, NULL);
	uint64_t s = (uint64_t)cur.tv_usec + 3;
	
	for(i = 0; i<25; i++){
		//lrand(&s);
		Set_Region_Permutation(LRAND(s));
		printf("%u %u %u %u %u\n", Region_Offsets[0], Region_Offsets[1],Region_Offsets[2],Region_Offsets[3],Region_Offsets[4]);
	}

	return 0;
}