• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

pedrotuga

A minha resolução do cubo mágico de Rubik (discussão)

4 mensagens neste tópico

Aviso: este tópico vai entrar num nível de detalhe deveras minucioso. Por favor respondam apenas se tiverem o teiverem lido com atenção e comprendido. Caso contrário, a probabilidade da resposta ser útil é diminuta.

Ora bem... como algumas pessoas aqui já sabem, eu ando a resolver o cubo mágico. 'Resolver' significa isso mesmo, resolver, encontrar uma solução, não se trata de ir procurar resoluções conhecidas e testa-las no meu cubo.

O meu método basei-as num principio simples: Estando um conjunto de peças com determinadas características no lugar certo, encontrar formas de movoer outra peças para o lugar certo preservando as anteriores.

O que me pareceu mais óbvio foi resolver o cubo por camadas pois é mais simples de visualizar, e tambem tinha que começar de alguma forma...

As duas primeiras camadas foram relativamente simpels de resolver, basicamente encontrei logo forma de as resolver no primeiro dia. Agora o problema é a última que obviamente é mais dificil uma vez que as restrições aumentam.

Já arrenjei forma de resolver as peças com duas faces (arestas) os vértices é que me estão a sobrar.

O meu método para resolver as arestas ainda não o tenho bem esquematizado mas já funciona. O problema, é que até agora, o único conjunto de movimentos que arranjei que apenas move os vertices da última camada, não os cruza. Apenas os move paralelamente. Ou seja, este movimento por si só não me vai levar lá. Preciso de arranjar outra forma de trocar os cantos inferiores que possa usar em conjunto com esta.

E isto sem falar ainda sequer da da orientação dos vértices depois de estarem colocados no lugar certo.

Tharis, ou qualquer oura pessoa claro, preciso de uma dica:

O que é que faz mais sentido resolver primeiro na última camada? Os vértices ou as arestas? Porquê?

Por exemplo, quando se resolve a primeira camada, é lógico que faz mais sentido resolver as arestas primeiro, pela simples razão que é simples colocar um vertice no sítio correcto preservando todas a camada superior.

Mas no caso da última camada isso deixa de ser verdade, resta saber qual a melhor estratégia.

Agora outro coisa que gostava de discutir:

Para resolver as arestas da última camada fiz o seguinte modelo matemático.

A cada aresta dei o nome de uma letra de A a D. De seguida reprensetei a posição inicial das quatro arestas da última camada por transposta([ABCD]). Depois representei cada conjunto de movimentos que as muda, como uma matriz M (4x4) apenas com os valores 1 e -1. A posição dos 1s e dos -1s depende do movimento e de onde este é feito. Esta matriz representa uma transformação, em particular um mapeamento.

Multiplicando esta a matriz que representa a posição inicial por esta, obtenho a posição final das arestas.

O sinal menos significa que uma aresta que tinha anteriormente a cor que deve etar na face inferior virada para baixo, passou a ter essa cor virada para o lado.

só a titulo de exemplo: um movimento que mude as arestas todas de orientação mas que não as mude de lugar, é representado por esta matriz:

M=	|-1  0  0  0|
| 0 -1  0  0|
| 0  0 -1  0|
| 0  0  0 -1|

Isto funciona bem porque as arestas só podem estar orientadas segundo duas orientações, ou bem ou mal. Mas os vértices podem estar orientados segundo três orientaçãoes, o que me oobriga a usar 3 valores diferentes para cada peça e duas operações de mudança de orientação em vez de uma.

A solução que me parece obvia é em vez de zero e uns usar uma representação binária deste tipo:

100

010

001

E em vez do sinal menos usar as operações binárias shift-left e shift right.

Este é o modelo matemático que estou a usar, mas gostava de ouvir sugestões para outros modelos, até porque este modelo tem uma limitação obvia, que, se tiverem lido este tópico com atenção já perceberam qual é.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Aviso: este tópico vai entrar num nível de detalhe deveras minucioso. Por favor respondam apenas se tiverem o teiverem lido com atenção e comprendido. Caso contrário, a probabilidade da resposta ser útil é diminuta.

Lulz! Se fosse um assunto banal, nao lia e nao respondia. Mas como vi RUBIK no título, lia, mesmo que o aviso cá nao estivesse! :D

Ora bem... como algumas pessoas aqui já sabem, eu ando a resolver o cubo mágico. 'Resolver' significa isso mesmo, resolver, encontrar uma solução, não se trata de ir procurar resoluções conhecidas e testa-las no meu cubo.

Mataste-me com essa! Eu a primeira vez que o fiz foi assim... :P

O meu método basei-as num principio simples: Estando um conjunto de peças com determinadas características no lugar certo, encontrar formas de movoer outra peças para o lugar certo preservando as anteriores.

Duh, se nao nao era possível fazeres o cubo. :|

O que me pareceu mais óbvio foi resolver o cubo por camadas pois é mais simples de visualizar, e tambem tinha que começar de alguma forma...

Right! Blocos Sucka! (Or not)

As duas primeiras camadas foram relativamente simpels de resolver, basicamente encontrei logo forma de as resolver no primeiro dia. Agora o problema é a última que obviamente é mais dificil uma vez que as restrições aumentam.

Olha que para quem nunca fez o cubo, fazer as duas primeiras nao é assim tão fácil...

Já arrenjei forma de resolver as peças com duas faces (arestas) os vértices é que me estão a sobrar.

O meu método para resolver as arestas ainda não o tenho bem esquematizado mas já funciona.

Sweet! :P

O problema, é que até agora, o único conjunto de movimentos que arranjei que apenas move os vertices da última camada, não os cruza. Apenas os move paralelamente. Ou seja, este movimento por si só não me vai levar lá. Preciso de arranjar outra forma de trocar os cantos inferiores que possa usar em conjunto com esta.

E isto sem falar ainda sequer da da orientação dos vértices depois de estarem colocados no lugar certo.

:hmm:

Tharis, ou qualquer oura pessoa claro, preciso de uma dica:

O que é que faz mais sentido resolver primeiro na última camada? Os vértices ou as arestas? Porquê?

Isto é assim... No método CFOP (utilizado pelos SpeedCubers), o que se faz é orientar a última layer toda, ou seja, colocar cada peça bem rodada e depois permutá-la aka colocar as peças no sítio certo. Como nao tens intenções de SpeedCubar, (@ least for now), Begginer FTW! No Begginer, colocam-se as Edges Orientadas e depois permutá-las. Depois, passa-se aos corners.

Por exemplo, quando se resolve a primeira camada, é lógico que faz mais sentido resolver as arestas primeiro, pela simples razão que é simples colocar um vertice no sítio correcto preservando todas a camada superior.

Mas no caso da última camada isso deixa de ser verdade, resta saber qual a melhor estratégia.

A MELHOR é sem dúvida a maneira que referi do CFOP, mas para ti, sem dúvida que é colocar as arestas primeiro.

Nos anos 80, o método mais popular para os speedcubers era o Corners-First, em que se colocavam bem TODOS os corners e só depois as areas... Anyway, isto foi substituído pelo CFOP e a minha opinião quanto ao que tu[/be] deves fazer passa por orientar as edges, permutá-las e só depois os corners.

Agora outro coisa que gostava de discutir:

Para resolver as arestas da última camada fiz o seguinte modelo matemático.

A cada aresta dei o nome de uma letra de A a D. De seguida reprensetei a posição inicial das quatro arestas da última camada por transposta([ABCD]). Depois representei cada conjunto de movimentos que as muda, como uma matriz M (4x4) apenas com os valores 1 e -1. A posição dos 1s e dos -1s depende do movimento e de onde este é feito. Esta matriz representa uma transformação, em particular um mapeamento.

Multiplicando esta a matriz que representa a posição inicial por esta, obtenho a posição final das arestas.

O sinal menos significa que uma aresta que tinha anteriormente a cor que deve etar na face inferior virada para baixo, passou a ter essa cor virada para o lado.

Nao percebi como funciona a matriz, por isso, nao posso fazer isto

Este é o modelo matemático que estou a usar, mas gostava de ouvir sugestões para outros modelos, até porque este modelo tem uma limitação obvia, que, se tiverem lido este tópico com atenção já perceberam qual é.

Alguma dúvida? :D

EDIT

Tip: Tenta passar os movimentos que fazes para rodar as peças e movê-las para um papel através da notação Up, Down, Left, Right, Back, Front, e Up Inverted, Down Inverted, etc. para um papel e vê se encontras uma "singularidade", "característica".

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Yay... estou precisamente a fazer isto como disseste :P ehehehe... oriento primeiro as peças e depis mudo-as de sítio, e comecei pelas arestas porque me pareceu serem mais faceis de manter no sítio! woot! estou on fire  :D

O meu método baseia-se num principio simples: Estando um conjunto de peças com determinadas características no lugar certo, encontrar formas de movoer outra peças para o lugar certo preservando as anteriores.

Duh, se nao nao era possível fazeres o cubo. :|

Claro que era. Colcando as peças numa posição que, após um conjunto de movimentos acabam por encaixar no lugar certo juntamente com outras que não estão. Mas não quero ir por aí... isto já é complexo que chegue da forma que eu o estou a resolver.

Mataste-me com essa! Eu a primeira vez que o fiz foi assim.

Resolveste o cubo completamente sozinho sem ninguem te ensinar e sem ir ver à net como mudar a peça X para o lugar Y ou como rodar uma peça?

Se o fizeste devo dizer-te que eu, pessoalmente, não conheço ninguem que o tenha feito. Sei de pessoas que o fizeram, mas não conheço nenhuma.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Claro que era. Colcando as peças numa posição que, após um conjunto de movimentos acabam por encaixar no lugar certo juntamente com outras que não estão. Mas não quero ir por aí... isto já é complexo que chegue da forma que eu o estou a resolver.

Ah. nao interpretei dessa maneira... :D

Resolveste o cubo completamente sozinho sem ninguem te ensinar e sem ir ver à net como mudar a peça X para o lugar Y ou como rodar uma peça?

Se o fizeste devo dizer-te que eu, pessoalmente, não conheço ninguem que o tenha feito. Sei de pessoas que o fizeram, mas não conheço nenhuma.

Fiz... :D Quer dizer, sort of... Fiz as 2 primeiras camadas e orientei todos os cubies da última layer... Só faltava trocar 2 peças, e aí perguntei e disseram-me o algortimo... :P Foi um almost... :D Anyway, já quis tentar resolvê-lo tentando-me abstrair da maneira como sei fazer, mas nao consigo porque sei que é a melhor que existe... :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora