All pastes #950954 Raw Edit

Mine

public text v1 · immutable
·published 2008-03-20 22:54 UTC
rendered paste body
#include <stdio.h>

#define TRUE 1
#define FALSE 0

int numSides=0;
char **original, **new, **temp, **temp2;

void rotate(char **temp, int numSides);
int compare(char **original, char **temp, int numSides);
void reflect(char **original, char **temp, int numSides);


main() {
	FILE *fin = fopen("transform.in", "r");
	FILE *fout = fopen("transform.out", "w");
	int n, m;
	fscanf(fin, "%d", &numSides);

	original = (char**)calloc(numSides,sizeof(char**));
	for(n=0; n<numSides; n++) { original[n] = (char*)calloc(numSides,sizeof(char**)); }

	new = (char**)calloc(numSides,sizeof(char**));
	for(n=0; n<numSides; n++) { new[n] = (char*)calloc(numSides,sizeof(char**)); }

	temp = (char**)calloc(numSides,sizeof(char**));
	for(n=0; n<numSides; n++) { temp[n] = (char*)calloc(numSides,sizeof(char**)); }

	for (n = 0; n < numSides; n++) 
		for (m = 0; m < numSides; m++) {
			fscanf(fin, "%c", &original[n][m]);
			if (original[n][m] == '\n') fscanf(fin, "%c", &original[n][m]);
			temp[n][m] = original[n][m];
		}//end inner for
	for (n = 0; n < numSides; n++) 
		for (m = 0; m < numSides; m++) {
			fscanf(fin, "%c", &new[n][m]);
			if (new[n][m] == '\n') fscanf(fin, "%c", &new[n][m]);
		}//end inner for
	
	if ( compare(original, new, numSides) ) { fprintf(fout, "6\n"); exit(0); }
	
	if ( original[0][0] == new[0][numSides-1] ) {
		rotate(temp, numSides);
		if ( compare(new, temp, numSides) ) { fprintf(fout, "1\n"); exit(0); }
	}//end if
	
	if ( original[0][0] == new[numSides-1][numSides-1] ) {
		rotate(temp, numSides);
		if ( compare(new, temp, numSides) ) { fprintf(fout, "2\n"); exit(0); }
	}//end if
	
	if ( original[0][0] == new[numSides-1][0] ) {
		rotate(temp, numSides);
		if ( compare(new, temp, numSides) ) { fprintf(fout, "3\n"); exit(0); }
	}//end if
	
	if ( original[0][0] == new[numSides-1][0] ) {
		reflect(original, temp, numSides);
		if ( compare(new, temp, numSides) ) { fprintf(fout, "4\n"); exit(0); }
	}//end if
	
	rotate(temp, numSides);
	if ( compare(new, temp, numSides) ) { fprintf(fout, "5\n"); exit(0); }
	rotate(temp, numSides);
	if ( compare(new, temp, numSides) ) { fprintf(fout, "5\n"); exit(0); }
	rotate(temp, numSides);
	if ( compare(new, temp, numSides) ) { fprintf(fout, "5\n"); exit(0); }
	
	fprintf(fout, "7\n");
	exit(0);
}//end main

void rotate(char **temp, int numSides) {
	int n, m;
	numSides -= 1;
	
	temp2 = (char**)calloc(numSides+1,sizeof(char**));
	for(n=0; n<numSides+1; n++) { temp2[n] = (char*)calloc(numSides+1,sizeof(char**)); }

	for (n = 0; n < numSides + 1; n++) 
		for (m = 0; m < numSides + 1; m++)
			temp2[m][numSides - n] = temp[n][m];

	for (n = 0; n < numSides + 1; n++) 
		for (m = 0; m < numSides + 1; m++)
			temp[n][m] = temp2[n][m];
}//end rotate function

int compare(char **new, char **temp, int numSides) {
	int n, m;
	for (n = 0; n < numSides; n++) 
		for (m = 0; m < numSides; m++)
			if (new[n][m] != temp[n][m]) return FALSE;
	return TRUE;
}//end compare method

void reflect(char **original, char **temp, int numSides) {
	int n, m;
	for (n = 0; n < numSides; n++) 
		for (m = 0; m < numSides; m++) 
			temp[n][m] = original[numSides - 1 - n][m];
}//end reflect method