{{:c:bable.png|}} ====== Muito aquém do 3D! ====== Muitos sabem das últimas novidades do cinema. Entre essas "novidades", nada mais espetacular que as imagens 3D! Apesar de ser uma invenção do século passado, apenas agora chega às massas. Continuamos nessa involução e anunciamos o fantástico, extraordinário, sem igual **Quadrado de Rubick 2D**! {{:c:480px-rubik_s_cube.svg.png?300 |}} Nos anos 70 foi uma febre entre os adolescentes resolver o famoso cubo mágico, sensacional quebra-cabeça imaginado pelo matemático Rubick. Agora vamos aquém indo além no passado, e criamos a empresa **bablecube**! Você foi escolhido para ser o programador desta emergente empresa Web2.0! Para isso, você terá que desenvolver o programa genial que permitirá a qualquer ser humano experimentar as maravilhas do mundo 2D do quadrado mágico! O jogo consiste de um "quadrado de Rubick" composto de 8 quadrados iguais: |1|2|3|4| |8|7|6|5| **figura 1** O quadrado possui 3 movimentos possíveis: A:Troca as linhas superior e inferior. |8|7|6|5| |1|2|3|4| B: Gira o quadrado para a direita |4|1|2|3| |5|8|7|6| C: Gira, no sentido do relógio, os 4 quadrados do meio. |1|7|2|4| |8|6|3|5| Faça um programa que leia um arquivo com uma configuração inicial e permita que o usuário interaja usando as letras A, B e C para levar o quadrado à posição original, dada pela figura 1. Quando a posiço original for atingida, o programa termina. A qualquer momento, o usuário pode teclar Z e o programa deve começar a calcular uma solução do quadrado, ou q, para sair do programa. O programa tem pelo menos um parâmetro que é o nome do arquivo a ser lido no seguinte formato 8 1 7 4 5 2 6 3 que gera: |8|1|7|4| |3|6|2|5| A saída do programa deve também gerar um arquivo de saída com as transformações usadas para chegar à situação final. A primeira linha deve ser o número de movimentos e cada linha subsequente a transformação aplicada: Por exemplo: 7\\ B\\ C\\ A\\ B\\ C\\ C\\ B executando: B: |4|8|1|7| |5|3|6|2| C: |4|3|8|7| |5|6|1|2| A: |5|6|1|2| |4|3|8|7| B: |2|5|6|1| |7|4|3|8| C: |2|4|5|1| |7|3|6|8| C: |2|3|4|1| |7|6|5|8| B: |1|2|3|4| |8|7|6|5| O programa tem ainda os seguintes parâmetros: * -r, quando ele gera uma configuração inicial aleatória, sem necessidade de arquivo de configuração inicial. * -a, que resolve a entrada automaticamente, sem intervençaõ do usuário. Pode estar associada com a opção -r. Boa Sorte!