#include <iostream>
#include <fstream>
#include <deque>
#include <string>

using namespace std;

int main()
{
    /*cout << "Associatons :" << endl;
    for (int i(0); i<256; i++)
        cout << i << " correspond à " << (unsigned char)i << endl;
    cout << "Dollar $ " << (int)'$' << endl;*/

    ifstream fluxRead("LightBeam2.txt");
    ofstream fluxWrite("LightBeam.txt");
    deque<string> maFile;
    string line;
    unsigned int w(0);

    while ( getline(fluxRead, line) )
    {
        maFile.push_back( line );

        if ( line.size() > w )
        {
            w = line.size();
        }
    }

    char c;
    for ( unsigned int i(0); i < maFile.size(); i ++ )
    {
        while ( maFile[i].size() < w )
        {
            maFile[i] += " ";
        }

        for ( unsigned int k(0); k < w / 2; k++ )
        {
            c = maFile[i][k];
            maFile[i][k] = maFile[i][w - k];
            maFile[i][w - k] = c;
        }

        for ( unsigned int k(0); k < w; k++ )
        {
            switch ( maFile[i][k] ){
                case '<':
                    maFile[i][k] = '>';
                    break;
                case '>':
                    maFile[i][k] = '<';
                    break;
                case ']':
                    maFile[i][k] = '[';
                    break;
                case '[':
                    maFile[i][k] = ']';
                    break;
                case ')':
                    maFile[i][k] = '(';
                    break;
                case '(':
                    maFile[i][k] = ')';
                    break;
                case '}':
                    maFile[i][k] = '{';
                    break;
                case '{':
                    maFile[i][k] = '}';
                    break;
                case '/':
                    maFile[i][k] = '\\';
                    break;
                case '\\':
                    maFile[i][k] = '/';
                    break;
                default :
                    break;
                }

        }

        maFile[i] += '\n';
        // Nouveau fichier
        fluxWrite << maFile[i];
    }

    return 0;
}