Filipe Teixeira

Fluxograma para resolver o cubo

4 posts neste tópico

Descobri hoje o code2flow, um site que permite gerar fluxogramas usando uma linguagem de programação simples.

Fiz um fluxograma de como resolver o cubo, baixe o pdf:

PDF -> http://code2flow.com/fhOaTl.pdf

Codigo:

Como resolver o cubo mágico;
notacao:
if (!Sabe a notação do cubo?) {
  F -> Camada da frente sentido horário
  F' -> Camada da frente sentido anti-horário
  B -> Camada de trás sentido horário
  B' -> Camada de trás sentido anti-horário
  R -> Camada da direita sentido horário
  R' -> Camada da direita sentido anti-horário
  L -> Camada da esquerda sentido horário
  L' -> Camada da esquerda sentido anti-horário
  D -> Camada de baixo sentido horário
  D' -> Camada de baixo sentido anti-horário
  U -> Camada de cima sentido horário
  U' -> Camada de cima sentido anti-horário;
  goto notacao;
} else  {
embaralhado:
if (!O cubo está embaralhado?) {
  Embaralhar;
  goto embaralhado;
} else {
  Começar a resolver;
  cruz:
  if (!A cruz está resolvida?) {
  Resolva 4 meios de uma
  camada externa, formando uma cruz.
  (Esse passo envolve intuição);
  goto cruz;
  } else {
    Segure o cubo com a
    cruz apontando para baixo;
    cantos_resolvidos:
    if (!Todos os cantos da camada
    de baixo estão resolvidos?) {
      canto_camada_cima:
      if (!Ache um canto da camada
      de baixo na camada de cima) [Achei] {
        Ache o lugar que ele deve
        entrar e mova a camada de
        cima de modo que ele fique
        em cima desse lugar.;
        Segurando ele na direita,
        faça R U R' U' até resolver esse canto;
        goto cantos_resolvidos;
      } else [Não tem nenhum] {
        Ache um canto não resolvido
        na camada de baixo
        e segurando ele na direita
        faça R U R' U' uma vez;
        goto cantos_resolvidos;
      }
    } else {
      camada_meio:
      if (!A camada do meio está resolvida?) {
        if (Há um meio da camada
        do meio na camada de cima?) {
          Posicione o meio
          de maneira que o adesivo da
          camada da frente bata
          com o centro da respectiva camada.;
          Segure o meio na frente;
          Para onde ele precisa ir?
          Para a direita ou para a esquerda?;
          branch(Direita) [Direita] {
            Faça U R U' R' U' F' U F;
            goto camada_meio;
          }
          branch(Esquerda) [Esquerda] {
            Faça U' L' U L U F U' F';
            goto camada_meio;
          }
        } else {
          Ache um meio que está
          posicionado em um lugar errado
          na camada do meio ou que está
          na posição correta porém
          virado.;
          Segure o meio na direita
          e deixe um meio da camada de cima
          na camada de cima na frente.;
          Faça U R U' R' U' F' U F;
          goto camada_meio;
        }
      } else {
        eoll:
        if (!Os quatro meios da camada
        de cima estão orientados?) {
          Os meios orientados formam:;
          l:
          branch(L) [Um L] {
            Deixe os meios orientados
            na esquerda e atrás;
            Faça -> F U R U' R' F';
            goto eoll;
          }
          branch(Linha) [Uma linha] {
            Deixe os cantos orientados
            na esquerda e direita.
            Faça -> F R U R' U' F';
            goto eoll;
          }
          branch(Ponto) [Um ponto] {
            Faça -> F R U R' U' F';
            goto l;
          }
        } else {
          ocll:
          if (!Os quatro cantos da camada
          de cima estão orientados?) {
            Segurando a última camada embaixo
            faça "D" até que um canto desorientado
            fique na direita, então faça -> R U R' U'
            até orientar esse canto;
            goto ocll;
            } else {
              Segure a camada que falta
              resolver em cima;
              cantos:
              if (Olhe para os lados da última camada
              Existe um par de cantos
              da mesma cor em cada lado?) {
                uperm:
                Movimente a camada de cima
                até que os cantos resolvidos
                estejam em seus lugares.;
                meios_resolvidos:
                if (!Todos os meio estão resolvidos?) {
                  Quantos faltam resolver?;
                  tres_meios:
                  branch(uperm) [Três] {
                    Gire o cubo até o 
                    meio resolvido ficar atrás.;
                    Para onde o meio da frente precisa ir?;
                    branch (u_direita) [Direita] {
                      Faça F2 U' R' L F2 R L' U' F2;
                      goto meios_resolvidos;
                    }
                    branch (u_esquerda) [Esquerda] {
                      Faça F2 U R' L F2 R L' U F2;
                      goto meios_resolvidos;
                    }
                  }
                  branch(hperm) [Quatro] {
                    Faça F2 U' R' L F2 R L' U' F2;
                    goto tres_meios;
                  }
                } else {
                  Você resolveu o cubo!!!;
                }
              } else {
                if (!Existe um par de cantos
                da mesma cor em um lado?) {
                  Faça F2 R2 U' L2 U R2 U' L2 U F2;
                  goto par_cantos;
                } else {
                  par_cantos:
                  Segure o par de cantos na direita.;
                  Faça F2 R2 U' L2 U R2 U' L2 U F2;
                }
                goto cantos;
              }
            }
          }
        }
      }
    }
  }
}

Editado por Filipe Teixeira
2 pessoas curtiram isso

Compartilhar este post


Link para o post
Compartilhar em outros sites

O legal é que o site ensina intuitivamente a fazer a programação.

O ruim é que se eu mostrar um fluxograma desses para alguém que me pedir pra ensinar, acho que a pessoa vai embora na hora :D.

 

Mas ficou legal. Pra quem é organizado e gosta de resumos em fluxograma é uma boa pedida.

1 pessoa curtiu isso

Compartilhar este post


Link para o post
Compartilhar em outros sites
Em 24/10/2016 at 00:59, Antonio Bill disse:

O ruim é que se eu mostrar um fluxograma desses para alguém que me pedir pra ensinar, acho que a pessoa vai embora na hora :D.

hehe Eu pensei nisso também, mas aí tive a ideia de quebrar o fluxograma em etapas como cruz, cantos, meios, e ao ensinar alguém, não largar o fluxograma pra pessoa e deixar que ela se vire, mas usá-lo como um auxílio ao aprendizado.

Editado por Filipe Teixeira

Compartilhar este post


Link para o post
Compartilhar em outros sites