// Palindrome.cpp : This file contains the 'main' function. Program execution begins and ends there.
//

#include <iostream>
#include <algorithm>

using namespace std;

bool PalindromeAlgorithmic(string palindromeToTest)
{
    palindromeToTest.erase(remove_if(palindromeToTest.begin(), palindromeToTest.end(), [](char c) {return ispunct(c) || c == ' '; }), palindromeToTest.end());
    transform(palindromeToTest.begin(), palindromeToTest.end(), palindromeToTest.begin(), [](char c) {return tolower(c); });
    string reversedString = palindromeToTest;
    reverse(reversedString.begin(), reversedString.end());
    return palindromeToTest == reversedString;
}

bool PalindromeNonAlgorithmic(string palindromeToTest)
{
    string palindromeToTestStripped = "";

    for (int i = 0; i < palindromeToTest.length(); i++)
    {
        if (palindromeToTest[i] <= 'z' && palindromeToTest[i] >= 'a')
        {
            palindromeToTestStripped += palindromeToTest[i];
        }
        else if (palindromeToTest[i] <= 'Z' && palindromeToTest[i] >= 'A')
        {
            palindromeToTestStripped += (palindromeToTest[i] + 32);
        }
    }

    cout << palindromeToTestStripped << endl;

    for (int i = 0; i < palindromeToTestStripped.length() / 2; i++)
    {
        if (palindromeToTestStripped[i] != palindromeToTestStripped[palindromeToTestStripped.length() - 1 - i])
        {
            return false;
        }
    }

    return true;
}

int main()
{
    cout << PalindromeNonAlgorithmic("Go, dog!");
}
