Montando o CUBO MÁGICO em CAMADAS passo a passo

cubo2

Pessoal, no post de hoje irei compartilhar um dos algoritmos para resolver o CUBO MÁGICO. Vi alguns tutoriais, vídeos e posts sobre o assunto.

Confesso que no começo pareceu impossível, nunca imaginei que fosse conseguir montar este cubo até porque não conhecia ninguém que já o tivesse resolvido.

Tenho no trabalho alguns colegas bem bacanas que conseguem resolver o cubo em pouco mais de 1 minuto.

Isto me deixou intrigado e resolvi tentar. Estou bem longe deste tempo ‘POR ENQUANTO’.

Resolvi escrever o passo a passo para resolver o cubo, baseado no que estudei e funcionou.   

Resumo para melhor entendimento do algoritmo.

20151017_165248

cubo4

Passo a passo

  1. Montar a CRUZ da face BRANCA
    1. Face BRANCA para cima;
    2. Buscar o CENTRO BRANCO.
    3. Formar uma cruz branca da seguinte forma:
      1. Peça BRANCA-AZUL alinhada com o CENTRO AZUL;
      2. Peça BRANCA-LARANJA alinhada com o CENTRO LARANJA;
      3. Peça BRANCA-VERMELHA alinhada com o CENTRO VERMELHO;
      4. Peça BRANCA-VERDE alinhada com o CENTRO VERDE;
    4. Aplicar a fórmula ( F2 ):
      1. Procurar na face oposta ao BRANCO uma peça com COR BRANCA;
        1. Alinhar a peça do meio  da 1ª CAMADA com o seu CENTRO;
        2. Aplicar a formula passo ’D’;
      2. Procurar na 1ª CAMADA uma peça com COR BRANCA;
        1. Aplicar a formula passo ’D’;
  2. Montar os cantos da face BRANCA e a 1ª CAMADA:
    1. Face BRANCA para cima;
    2. Procurar uma peça do CANTO BRANCA na face AMARELA ou 3ª CAMADA;
    3. Posicionar a peça em baixo (posição oposta(NA face AMARELA)) a posição que ela tem que ficar;
    4. Aplicar a fórmula ( R’ D’ R D ) até 5 vezes;
  3. Montar a 2ª CAMADA:
    1. Face AMARELA para cima;
    2. Procurar na 3ª CAMADA uma peça do MEIO que não tenha a cor AMARELA;
    3. Verificar a posição na 2ª CAMADA onde esta peça se encaixa;
    4. Alinhar a peça com o CENTRO da COR de sua face;
    5. Verificar qual lado da COR do CENTRO esta peça se encaixa;
    6. ESQUERDO:
      1. Aplicar a fórmula ( U’ L’ U’ L U F U F’ );
    7. DIREITO:
      1. Aplicar a fórmula ( U R U R’ U’ F’ U’ F );
  4. Montar a CRUZ da face AMARELA:
    1. Face AMARELA para cima;
    2. Regra_A: Deixar uma peça AMARELA do MEIO à esquerda e outra peça do MEIO AMARELA para frente (na 3ª CAMADA)
    3. Aplicar a fórmula ( F U R U’ R’ F’ ) sem se preocupar com o alinhamento das cores com os CENTROS até formar a cruz. Sempre respeitando a Regra_A;cubo1
  5. Alinhar a CRUZ da face AMARELA aos centros das CORES:
    1. Face AMARELA  para cima;
    2. Verificar na  CRUZ se existem peças com alinhamento CORRETO entre cores opostas;
    3. SIM:
      1. Escolher uma das cores opostas e alinhar ao seu CENTRO;
      2. Aplicar a fórmula ( R U R’ U R U2 R’ )  2 vezes;
    4. NÃO:
      1. Posicionar o cubo com as peças da CRUZ e MEIOS errados À ESQUERDA e para a FRENTE;
      2. Aplicar a fórmula ( R U R’ U R U2 R’ );
    5. Aplicar a fórmula ( U ) até que todas as peças da CRUZ estejam alinhadas com as cores do CENTRO correspondentes;
  6. Alinhar os cantos da face AMARELA (podendo ficar com o posicionamento das peças invertido):
    1. Face AMARELA para cima;
    2. Mantenha a CRUZ com as cores alinhadas aos seus CENTROS;
    3. Procurar uma peça  DO CANTO AMARELA na posição CORRETA que esteja com as cores invertidas;
    4. NENHUM CANTO CORRETO:
      1. Aplicar a fórmula ( U R U’ L’ U R’ U’ L ) para um canto ficar CORRETO;
    5. PELO MENOS UM CANTO CORRETO:( mesmo com as cores invertidas)
      1. Segurar o CUBO com a peça do canto alinhada à DIREITA do CUBO;
      2. Aplicar a formula ( U R U’ L’ U R’ U’ L )  até todas as peças dos CANTOS ficarem nas posições corretas (mesmo com as cores invertidas);
  7. Finalizar o CUBO ajustando o posicionamento das peças corretamente
    1. Escolher um canto correto na 3ª CAMADA;
    2. Posicionar o CUBO com o canto escolhido alinhado à DIREITA;
    3. Aplicar a fórmula ( R’ D’ R D ) (SEM MUDAR O POSICIONAMENTO DO CUBO);
    4. Quando a peça do canto à DIREITA estiver correta aplique a fórmula ( U);
    5. Repita os dois últimos passos até que todas as peças dos cantos estejam posicionadas corretamente;
    6. Quando todas as peças estiverem posicionadas corretamente aplique a fórmula ( U) para alinhar a 3ª CAMADA aos centros das cores.

cubo3Espero que ajude pelo menos como um início, depois existem vários outros algoritmos na WEB para conseguir montar mais rápido. Deixem um comentário  e dicas caso tenham.

Um grande abraço!

Anúncios

Sistemas Operacionais e Mercado de trabalho

O sistemas operacionais são utilizados por muitos de nós todos os dias, mas poucas pessoas sabem a importância do sistema operacional para atividades realizadas através do computador, tablet ou celular. Irei linkar uma apresentação que resume os fundamentos de sistemas operacionais e a sua influência no mercado de trabalho. Um grande abraço! //pt.slideshare.net/slideshow/embed_code/key/mPYh2sS5bSxyyU <div style=”margin-bottom:5px”> href=”//pt.slideshare.net/CCCarl/sistemas-operacionais-e-apresentacao-prof-carledwin” title=”Sistemas Operacionais e Mercado de Trabalho” target=”_blank”>Sistemas Operacionais e Mercado de Trabalho from Carl Edwin Antonio Nascimento “>//pt.slideshare.net/slideshow/embed_code/key/mPYh2sS5bSxyyU

Manipulação de arquivos XML com JAXB – Marshaller e UnMarshaller

No post de hoje irei falar sobre JAXB(Java Architecture for XML Binding), uma API da plataforma JAVAEE que dá suporte à manipulação de objetos XML e JAVA. Auxilia na vinculação de objetos XML e JAVA. Com essa API é possível criar classes a partir de um XSD.

Para criarmos um XML a partir de um objeto java utilizamos a interface Marshaller e para transformar arquivos XML em objetos java a interface Unmarshaller.

Para este post foi criado um projeto com a seguinte estrutura.

estrutura_projeto

No post de hoje criaremos um arquivo XML a partir de um objeto java.

Crie um POJO Usuario anotado com @XMLRootElement indicando que a classe representa um elemento XML principal e @XmlAccessorType(XmlAccess.FIELD) responsável por definir onde as anotações devem ser interpretadas, neste caso nos atributos de classe.

Anote os atributos de classe com @XmlElement indicando que os mesmos são subElementos do elemento principal.

Anote o atributo de classe codigo do elemento principal Usuario com @XmlAttribute  para representar um atributo dentro do mesmo.

Um dos atributos de classe será uma lista de endereços, anotado com @XmlElement e @XmlElementWrapper para encapsular a lista.

package com.wordpress.carledwinj.projetoXML.pojo;

import java.util.List;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Usuario {

@XmlAttribute
private Long codigo;

@XmlElement
private String nome;

@XmlElement
private Long idade;

@XmlElementWrapper(name=”lista-enderecos”)
@XmlElement(name=”endereco”)
private List<Endereco> enderecos;

public Usuario() {}

public Usuario(Long codigo,String nome, Long idade, List<Endereco> enderecos) {
this.codigo = codigo;
this.nome = nome;
this.idade = idade;
this.enderecos = enderecos;
}

// getters and setters

}

Será criado também um POJO Endereco para representar endereço do Usuario . Iremos anotar este POJO com @XmlAccessorType(XmlAccess.FIELD) apenas. Não será anotado com @XMLRootElement pois não será um elemento principal.

package com.wordpress.carledwinj.projetoXML.pojo;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;

@XmlAccessorType(XmlAccessType.FIELD)
public class Endereco {

@XmlElement
private String logradouro;

@XmlElement
private String bairro;

@XmlElement
private String cidade;

@XmlElement
private String pais;

@XmlElement
private Long numero;

public Endereco() {}

public Endereco(String logradouro, String bairro, String cidade, String pais, Long numero) {
this.logradouro = logradouro;
this.bairro = bairro;
this.cidade = cidade;
this.pais = pais;
this.numero = numero;
}

// getters and setters

}

Agora será criado o bean responsável por realizar a conversão do objeto java para XML.

package com.wordpress.carledwinj.projetoXML.sessionbean;

import java.io.File;
import java.io.FileNotFoundException;

import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;

import com.wordpress.carledwinj.projetoXML.pojo.Usuario;

/**
*
* @author CarlEdwin
*
*/
@Stateless
@LocalBean
public class Marshalling {

public Marshalling() {}

public static File marshalling(Usuario usuario, String filePath) throws JAXBException, FileNotFoundException{

JAXBContext context = JAXBContext.newInstance(Usuario.class);

Marshaller marshaller = context.createMarshaller();

File file = new File(filePath);

marshaller.marshal(usuario, file);

return file;
}

}

Criaremos agora uma classe de teste para gerar o arquivo XML.

package com.wordpress.carledwinj.projetoXML.test;

import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.List;

import javax.xml.bind.JAXBException;

import com.wordpress.carledwinj.projetoXML.pojo.Endereco;
import com.wordpress.carledwinj.projetoXML.pojo.Usuario;
import com.wordpress.carledwinj.projetoXML.sessionbean.Marshalling;

public class TestMarshaller {

public static void main(String[] args) {

List<Endereco> enderecos = new ArrayList<>();
enderecos.add(new Endereco(“Rua Santos Silva”, “Jardim Miranda”, “Americana”, “Brasil”, 343L));
enderecos.add(new Endereco(“Rua Doutor Miguel”, “Cidade das Flores”, “Osasco”, “Brasil”, 976L));

Usuario usuario = new Usuario(45L,”Marcos”, 27L, enderecos);

try {
Marshalling.marshalling(usuario, “usuario.xml”);
} catch (FileNotFoundException | JAXBException e) {
System.out.println(“Erro ao tentar gerar o xml.” );
e.printStackTrace();
}
}
}

Para realizar o teste, utilizei o WildFly 8.2.

servidor
Execute a classe teste para gerar o arquivo XML.

Já com o arquivo usuario.xml criado (localizado no classPath () do projeto, atualize o projeto para vê-lo) iremos copia-lo renomeando como novo_usuario.xml, altere os dados do usuario no arquivo copiado.

Será criada o bean de leitura de um arquivo XML e conversão para objeto java.

package com.wordpress.carledwinj.projetoXML.sessionbean;

import java.io.FileInputStream;
import java.io.FileNotFoundException;

import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;

import com.wordpress.carledwinj.projetoXML.pojo.Usuario;

/**
*
* @author CarlEdwin
*
*/
@Stateless
@LocalBean
public class UnMarshalling {

public UnMarshalling() {}

public static Usuario unMarshalling(String filePath) throws JAXBException, FileNotFoundException{

JAXBContext context = JAXBContext.newInstance(Usuario.class);

Unmarshaller unMarshaller = context.createUnmarshaller();

FileInputStream fileInputStream = new FileInputStream(filePath);

return (Usuario) unMarshaller.unmarshal(fileInputStream);
}

}

Criaremos então classe de teste de converão de arquivo XML para objeto java.

package com.wordpress.carledwinj.projetoXML.test;

import java.io.FileNotFoundException;

import javax.xml.bind.JAXBException;

import com.wordpress.carledwinj.projetoXML.pojo.Endereco;
import com.wordpress.carledwinj.projetoXML.pojo.Usuario;
import com.wordpress.carledwinj.projetoXML.sessionbean.UnMarshalling;

public class TestUnMarshalling {

public static void main(String[] args) {

try {
Usuario usuario = UnMarshalling.unMarshalling(“novo_usuario.xml”);

System.out.println(“Usuario ” );
System.out.println(“Codigo: ” + usuario.getCodigo());
System.out.println(“Nome: ” + usuario.getNome());
System.out.println(“Idade: ” + usuario.getIdade());
System.out.println(“Lista de enderecos: “);
for (Endereco endereco : usuario.getEnderecos()) {
System.out.println(” Logradouro: ” + endereco.getLogradouro() );
System.out.println(” Numero: ” + endereco.getNumero() );
System.out.println(” Bairro: ” + endereco.getBairro() );
System.out.println(” Cidade: ” + endereco.getCidade() );
System.out.println(” País: ” + endereco.getPais() +”\n” );
}

} catch (FileNotFoundException | JAXBException e) {
System.out.println(“Erro ao tentar ler arquivo xml externo.”);
e.printStackTrace();
}
}
}

Para realizar o teste, reinicie o servidor.

servidor

Execute a classe teste para gerar o arquivo XML.

De acordo com os testes realizados podemos observar que os passos para o Marshaller e UnMarshaller são simples.

O caminho para acessar o projeto na integra é https://github.com/carledwin/projetoXML .

Espero que tenham gostado.

Deixe uma opinião, sugestão ou dúvida.

Um grande abraço e até o próximo post!

Criando Mind Map para arquitetura de aplicação Java Web com JSF 2.2 com CDI, Primefaces 5.1 e EJB 3

No post de hoje irei mostrar uma implementação de Mind Map(mapa mental) para aplicação JSF com CDI, Primefaces e EJB.Alguém pode perguntar mas para que irei utilizar um Mind Map em java, farei um resumo sobre o que é e porque utilizar.

Inicialmente iria utilizar os Mind Maps para auxiliar nos estudos para tirar a certificação Java ‘Java SE 7 Programmer I (1Z0-803)’, mas percebi que posso aplicar esta técnica no meu dia-a-dia também para memorizar a arquitetura básica de uma aplicação Java Web.

projetoJSFCDIWeb

Mid Map foi desenvolvido pelo inglês Tony Buzan na década de 70 e se destaca por estimular os dois lados do cérebro. O lado esquerdo fica responsável pelas palavras-chave, hierarquização das informações; e o lado direito pela junção e interpretação das cores e imagens.

Com o mapa mental o raciocínio é montado em cima do conteúdo principal e vai quebrando essas informações em partes de maneira que o cérebro vai raciocinando e gravando.

O mapa mental é utilizado no processo de organização do pensamento, ajuda a hierarquizar o pensamento e a compreender melhor as informações sobre determinado conteúdo para facilitar a memorização de informações importantes, aumentar a produtividade com menos esforço e investimento de tempo.

Algumas pessoas têm dificuldade em guardar informações estudadas para fazer um vestibular, prova de certificação, concursos públicos ou prova da faculdade, podendo ser utilizado também para fazer resumos.

Como alternativa podemos utilizar os Mapas Mentais para facilitar o aprendizado e memorização em longo prazo, independente do tipo de conteúdo.

Criando um mapa mental

Para criar o mapa mental é necessário somente papel, caneta ou lápis coloridos e criatividade.

Algumas dicas

  • Comece com folha de papel sem pauta horizontal
  • Escreva do centro para as extremidades
  • Defina o tema, matéria, capítulo
  • Utilize cores diferentes
  • Utilize palavras-chaves e principais conceitos
  • Utilize letra de forma, para ser mais legível
  • Utilize letras grandes, pois elas estimulam o canal visual e agilizam as revisões
  • Abrevie as palavras o máximo possível
  • Quebre os temas principais em níveis, de acordo com o grau de importância
  • Abuse de imagens, desenhos que simbolizem o conteúdo abordado

Alguns Softwares

  • XMind
  • Fremind
  • SimpleMind+
  • iThoughtsHD
  • Mindjet

Conclusão

Achei muito interessante a utilização desta técnica para memorizar a estrutura da aplicação, pois e alguns momentos é necessário criar uma nova aplicação e até lembrar de todos os arquivos, locais, libs e configuração, acaba levando algum tempo. Já com o mapa mental me pareceu mais simples e rápido caso amanhã eu precise relembrar. Espero que vocês tenham gostado. Deixem um comentário, falando o que acharam, possíveis dúvidas ou críticas. Um grande abraço!

Resumo do Blog carledwin & Java de 2014

Quero agradecer a todos que visitaram carledwin & Java neste ano de 2014.

Os duendes de estatísticas do WordPress.com prepararam um relatório para o ano de 2014 deste blog.

Aqui está um resumo:

Um comboio do metrô de Nova Iorque transporta 1.200 pessoas. Este blog foi visitado cerca de 6.100 vezes em 2014. Se fosse um comboio, eram precisas 5 viagens para que toda gente o visitasse.

Clique aqui para ver o relatório completo

Criando um DataSource no JBoss 7

Olá pessoal, o blog do Luciano Molinari – Software, Java e Arquitetura foi um dos posts que utilizei como refêrencia de pesquisa para minha publicação. Segue o link.

Software, Java e Arquitetura

Nesse post serão apresentados quais passos devem ser seguidos para a criação e configuração de um DataSource no JBoss 7. Como exemplo, será utilizado o banco de dados MySQL e o servidor de aplicações JBoss 7.1.0-Final. Também estará sendo usado o modo standalone do JBoss, caso prefira usar o modo domain, basta alterar as pastas citadas no post pelas respectivas do modo domain.

Criação do módulo com o driver JDBC do MySQL

A primeira grande mudança em relação às versões anteriores é que as bibliotecas que o desenvolvedor deseja implantar no JBoss não são mais simplesmente consideradas “libs”, onde bastava copiar o .jar para uma determinada pasta e usar os serviços providos pelo mesmo. Agora qualquer lib é considerada um módulo para o JBoss, assim como os próprios serviços internos do servidor, como por exemplo serviço de mensageria. Para configurar o módulo do driver JDBC do MySQL, deve-se:

  • Fazer o…

Ver o post original 454 mais palavras

Configurando Datasource no Jboss AS 7.1.1 + eclipse Luna + MySQL 5.1

No post de hoje será mostrada uma das formas de configurar o dataSource para o Jboss AS 7.1.x, esta configuração pode ser um ponto de muita dificuldade para algumas pessoas. Vamos ao trabalho.

Na aba view server selecionar new >> server e seguir os passos baixo.

ds116

ds117

ds118

Selecione um local para salvar o jboss.

ds119

ds120

ds121

ds122

ds123

Após ter completado o download, selecione novamente o diretório onde se encontra o jboss e selecione JRE jdk 1.7.x e Finish.

ds124

ds125

ds126

ds128

ds129

Abra o diretório onde está o jboss e acesse a pasta ‘com’ x:\xx\jboss-as-7.1.1.Final\modules\com crie uma pasta mysql, dentro esta pasta crie outra pasta jdbc e por fim uma pasta main.

ds130

Dentro da pasta main crie um arquivo module.xml com o conteudo exibido a seguir. Coloque também nesta pasta o jar de conexão com o mysql.

ds131ds132ds134Será criado agora um novo usuário para acessar o console do jboss, acesse o caminho x:\xx\jboss-as-7.1.1.Final\bin e execute o arquivo add-user.bat (windows).

ds135Configure de acordo com as imagens a seguir.

ds136Acesse o arquivo standalone.xml no caminho x:\xx\jboss-as-7.1.1.Final\standalone\configuration e altere o arquivo acrescentando o driver do mysql, conforme a imagem a seguir:

ds145Antes da alteração.

ds146

 

Nova configuração.

ds150Start o jboss via eclipse, se tudo deu certo será exibido no console do eclipse um resultado semelhante a imagem a seguir:

ds137Acesse o caminho http://localhost:8080, será exibida uma imagem semelhante a imagem a seguir:

ds138ds139Selecione a opção de Administration Console, será exibida a tela de console.

ds140Selecione a aba Profile e o menu Connector e Datasources.

ds142ds141

Selecione a opção add para adicionar um novo datasource e siga os passos a seguir:

ds143ds144ds148ds151ds152ds153ds154ds155ds156

Teste a conexão caso de tudo certo, será exibida uma tela semelhante a imagem a seguir:ds157ds158ds159Pare o jboss e start novamente. o resultado deverá ser semelhante ao exibido a seguir:

ds160Muito obrigado, deixe seu comentário e até o próximo post.