Monday, October 17, 2016

UVa 401 - Palindromes

// UVa 401 - Palindromes

#include <iostream>
#include <map>
#include <string>
using namespace std;


map<char,char> mirror;

void init_mirror() {
	mirror['A'] = 'A';
	mirror['E'] = '3';
	mirror['H'] = 'H';
	mirror['I'] = 'I';
	mirror['J'] = 'L';
	mirror['L'] = 'J';
	mirror['M'] = 'M';
	mirror['O'] = 'O';
	mirror['S'] = '2';
	mirror['T'] = 'T';
	mirror['U'] = 'U';
	mirror['V'] = 'V';
	mirror['W'] = 'W';
	mirror['X'] = 'X';
	mirror['Y'] = 'Y';
	mirror['Z'] = '5';
	mirror['1'] = '1';
	mirror['2'] = 'S';
	mirror['3'] = 'E';
	mirror['5'] = 'Z';
	mirror['8'] = '8';
}

bool check_palindrome(const string & input) {
	int length = input.length();
	for (int left=0, right = length-1; left<=right; left++, right--) {
		if (input[left] != input[right])
			return false;
	}
	return true;
}

bool check_mirrored(const string & input) {
	int length = input.length();
	for (int left=0, right = length-1; left<=right; left++, right--) {
		if (input[left] != mirror[input[right]])
			return false;
	}
	return true;
}

string get_answer(bool palindrome, bool mirrored) {
	if (!palindrome && !mirrored) {
		return " -- is not a palindrome.";
	} else if (palindrome && !mirrored) {
		return " -- is a regular palindrome.";
	} else if (!palindrome && mirrored) {
		return " -- is a mirrored string.";
	} else if (palindrome && mirrored) {
		return " -- is a mirrored palindrome.";
	}
	return "";
}


int main() {
	init_mirror();
	string input_string;
	while (cin >> input_string) {

		bool palindrome = check_palindrome(input_string);
		bool mirrored = check_mirrored(input_string);

		string answer = get_answer(palindrome, mirrored);
		cout << input_string << answer << endl << endl;
	}
	return 0;
}

No comments:

Post a Comment