Resoudre le patron d'un cube....

Vos exploits et records (ou non-exploits et non-records mais vous êtes arrivés à en finir un et c'est déjà pas mal).
Où écrire mes temps selon la discipline ?
Répondre
Avatar du membre
Fissure
Jamais loin d'ici
Messages : 83
Enregistré le : ven. juil. 04, 2008 5:11 pm

Resoudre le patron d'un cube....

Message par Fissure »

J'ai finit de coder l'interface et la gestion des mouvements pour mon logiciel de resolution. Et pour etre sur qu'il soit fonctionnel et qu'il ne produit aucun mouvement erronné j'ai tenter de le resoudre donc sous sa forme de Patron de scramble. Et apres 25 minutes j'ai reussi :P j'ai cru que mon cerveau aller bruler :-D (en plus j'avais pas encore coder le mvt E et D et sa m'aurai bien rendu service ^^)
Bannière atoutcubes.com
Avatar du membre
Keirua
Bavard intarissable
Messages : 77
Enregistré le : dim. nov. 11, 2007 2:48 pm
Localisation : Bordeaux

Message par Keirua »

Juste comme ca. c'est codé en quoi ?
Tu représente comment ton cube ? De quelle manière tu réalise une transformation, il y a une manière générique de réaliser les rotations des faces ?
Je code un peu en C++ mais je sais pas trop comment faire.
Moyenne 3^3: 32.35, record à 26.31
Blindcubeur wannabe
Avatar du membre
Fissure
Jamais loin d'ici
Messages : 83
Enregistré le : ven. juil. 04, 2008 5:11 pm

Message par Fissure »

J'ai coder ça en C++, avec la librairie SDL
Pour expliquer grossomodo le fonctionnement de mon logiciel actuel qui je l'espere bientot resoudra des cubes tout seul :

J'ai fait un objet cube
A l'interieur de celui ci creation d'un tableau [6][3][3] rempli de chiffres de 0 à 5 representant une couleur chacun
Ces six tableaux de 3 sur 3 ont chacun une position geographique initiale sur la fenetre disposer comme un patron dont voici l'exemple :
On part du principe que la face representé en orange en bas a droite de l'image sur le petit patron est considerer comme la face du dessus.
Voici un U R F'

Image

En ce qui concerne les mouvements j'ai coder 4 fonctions diferentes :

1 : Faire tourner dans le sens Horaire / antihoraire une face autour de son centre.
2 :Gestion des mouvements des lignes horizontale (F /S /B)
3 :Gestion des mouvement des ligne verticale (L / R / M )
4 :Gestion des mouvements circulaire (D / E / U ) un peu particuliers.

Pour ces fonctions le principe est simple et ne se sert d'aucun vecteur, je ne fais que deplacer les cases concerner dans mon tableau [6][3][3].

Ensuite en associant une ou deux de ces fonctions ont obtient un mouvement complet (ex : R se fait avec la fonction 1 sur la face a droite du centre du patron + Fonction 3 qui bouge verticalement en meme temps.)

Si tu veux le code demande ca te sera peut etre plus parlant :)
++
Avatar du membre
g-kid
Dr G-kid
Messages : 2783
Enregistré le : mer. mars 29, 2006 8:58 pm
Localisation : île de la Réunion
Contact :

Message par g-kid »

Bon boulot :smt023:
Je connais pas le C++ mais si tu rajoutais une fonction qui permet de tourner le cube entier selon les axes x, y, z , ça sera le must.
Avatar du membre
Yannoo
VIP au club des 1000
Messages : 1779
Enregistré le : sam. avr. 28, 2007 11:29 pm
Localisation : Nice - Evry (pour les etudes)
Contact :

Message par Yannoo »

pour x y ou z, il suffit d'appliquer la fonction 1 sur deux faces opposées et les fonctions 2,3.ou 4 sur les trois "ligne" restantes.
Et pour ton cerveau ne t'inquiète pas, il peut a la limite s'évaporer mais étant constitué en grande partie (genre 80%) d'eau, il ne brulera pas ! :roll: bon allé pour être plus précis pas tout de suite
http://yannoocity.miniville.fr : Viendez nombreux !
Avatar du membre
deadalnix
Unix Cube
Messages : 7316
Enregistré le : sam. nov. 11, 2006 10:44 pm
Localisation : Par GPS
Contact :

Message par deadalnix »

Des tableaux, SDL, je ne suis pas convaincu qu'on puisse appeler ça du c++.

Je suis tout de même impressionné par le visuel du truc !
Modifié en dernier par deadalnix le mar. juil. 29, 2008 12:01 pm, modifié 1 fois.
Avatar du membre
Fissure
Jamais loin d'ici
Messages : 83
Enregistré le : ven. juil. 04, 2008 5:11 pm

Message par Fissure »

Bon boulot
Je connais pas le C++ mais si tu rajoutais une fonction qui permet de tourner le cube entier selon les axes x, y, z , ça sera le must
Les axes X Y Z ont eté aussi programmer, il suffit d'apuyer sur X, Y ou Z :P
( en haut a droite de l'image en ai la preuve ^^)
Des tableaux, SDL, je suis convaincu qu'on puisse appeler ça du c++.
As tu oublier la negation dans cette phrase? (je NE suis PAS convaincu....)
Le C++ est surtout present au niveau de mon objet CUBE::CUBE, sinon j'avourai que la lib SDL est faite en C, quand au tableaux, je voit rien qui pourai les remplacer en c++.
Je suis tout de même impressionné par le visuel du truc !
Merci :)
Avatar du membre
Keirua
Bavard intarissable
Messages : 77
Enregistré le : dim. nov. 11, 2007 2:48 pm
Localisation : Bordeaux

Message par Keirua »

SDL un wrapper et on a de quoi gérer cette librairie en C++.

Pour les tableaux, en conservant la manière dont tu t'y es pris, tu peux créer un objet cubie qui contient la couleur des 6 faces du cube, puis un vector de vector de cubie... et la t'as la superbe version C++ d'un tableau à 3 dimension, mais c'est un peu sortir un lance roquettes pour abattre 3 pauvres fourmis...

Après c'est pas bien grave si c'est pas codé en C++ pur et dur avec du polymorphisme virtuel templaté toutes les 2 lignes, je suis pas un grand programmeur donc ca me convient parfaitement...
Par contre si tu veux partager le code, si c'est pas trop demander, est ce que tu pourrais le mettre sur quelque chose d'accessible à tous? J'imagine que je ne suis pas le seul intéressé.

Et ensuite pour la résolution, tu comptes t'y prendre comment ? Une idée naïve (mais un peu chiante mine de rien), ca pourrait être de lui faire résoudre la croix par un parcours en largeur, puis après se servir d'une base de données des différentes configurations pour les paires, et enfin utiliser les formules d'OLL/PLL pour finir le cube. Ca doit déjà être assez amusant à coder, mais ca fera informatiquement ce qu'on est déja capable de faire nous même, pour des résolutions type FMC ca risque de pas être terrible, le nombre de mouvement moyens d'une résolution de ce type étant relativement élevé (ou plutôt, pas assez faible).
Moyenne 3^3: 32.35, record à 26.31
Blindcubeur wannabe
Avatar du membre
Fissure
Jamais loin d'ici
Messages : 83
Enregistré le : ven. juil. 04, 2008 5:11 pm

Message par Fissure »

Je m'incline, je suis loin de maitriser le C++ pur et dur et dans mon code nombreux sont les defaults de "rentabilité" par rapport a du codage pro structurer, je code juste par hobby encore. Cependant, j'avoue je prend plaisir a voir mon PC resoudre un exercice type Sudoku ou rubik's cube tout simplement pasque c'est moi qui lui ai appris :P
Et ensuite pour la résolution, tu comptes t'y prendre comment ? Une idée naïve (mais un peu chiante mine de rien),
Moi je trouve cette idee + chiante que naîve ^^

Pour l'instant j'avais pour but de lui inculquer une méthode Ofapel car c'est celle que j'utilise et n'ai jamais eu l'intention de basser mon IA sur la theorie des groupes qui est du niveau licence mathematique. :smt017

Pour la premiere croix je pensais lui faire chercher aleatoirement des sequences de 2 mouvements et lui faire verifier au mouvement 1 et 2 si une piece s'est mise a sa place. De la il choisit le minimum, excute le mouvement et reïtere l'operation. Ce qui donne un resultat entre 0 et 8 mvt max normalement pour la croix.
Ensuite pour les coins, 6 cas possible a inculquer facilement.
puis la suite de la méthode ofapel avec une pincee de G.Roux.

Toute idee sur une IA pas trop complexe est la bienvenue d'ailleur.(surtout pour la 1er face qui je trouve est la plus complexe :oops: )

Pour ce qui concerne le code je suis tout a fait ok pour le diffusser a quiconque me le demande, ou si vous voulez un exe de l'etat actuelle du projet.
Répondre