Page 1 sur 1

Le dragon du BigBlock

Publié : Jeu 6/08/2015 13:19
par Morphocode
Soit W un sous groupe de formules à trois générateurs X,Y,Z : W = <X,Y,Z> ; ord(X) <= ord(Y)
On définit la suite de formules :
1) F1 = Z X
On passe de Fn à Fn+1 ainsi :
2) Fn = Yp Z Xq
Fn+1 = Yp' Z Xq'
avec

p' = ((q+1) modulo ord(X)) modulo ord(Y)
q' = p modulo ord(X)

Si W = <X,Y> ; on prend Z=I, I=formule neutre

BigBlock :
Image

On prend le bandage BigBlock qui ne possède que deux rotations H,D : M = <H,D> ; cas A=I

On définit alors une suite de formules ainsi :

1) F1 = H
On passe de Fn à Fn+1 ainsi :
2) Fn = DpHq
Fn+1 = Dp'Hq'
avec

p' = ((q+1) modulo ord(H)) modulo ord(D)
q' = p modulo ord(H)

Comme il y a un nombre fini d'états dans le BigBlock on tombe forcement sur un état déjà donné par une formule Fk. Par ex on est en étape n , la première fois qu'on tombe sur la formule F1 = H, l' état e•Fn-1 se nomme le dragon du BigBlock, par exp si à l'étape 17 on tombe (pour la 1er fois) sur F1 = H , alors le dragon du BigBlock est
dragon = e•F16

Question: Trouver le dragon du BigBlock ==> (on peut faire un programme informatique pour le trouver)
:-? :-?

Re: Le dragon du BigBlock

Publié : Dim 23/06/2024 11:05
par Morphocode
Voici un script en GAP qui permet de trouver le Dragon du BigBlock
Dragon du BigBlock = DH'

Image

Le script permet aussi de calculer le Dragon du Rubik's Cube

Code : Tout sélectionner


# gap_dragon.txt
#
#Soit W un sous-groupe de formules à trois générateurs X,Y,Z : W = <X,Y,Z> ; ord(X) <= ord(Y)
#On définit la suite de formules :
#1) F1 = ZX
#On passe de Fn à Fn+1 ainsi :
#2) Fn = Y^p Z X^q
#F(n+1) = Y^p' Z X^q'
#avec
#
#p' = [(q+1) modulo ord(X)} modulo ord(Y)
#q' = p modulo ord(X)
#
#Si Fn = F1 = ZX alors par def le Dragon de W est F(n-1)
#Quand W=<X,Y> on prend Z = I = formule neutre
#
# Model Rubik's Cube pour GAP
#         5  6  7
#         4  H  8
#         3  2  1
#25 28 23|21 26 19|17 32 31|29 30 27
#38 G  36|12 A  10|34 D  40|16 P  14
#43 44 37|39 42 33|35 48 45|47 46 41
#         11 18 9
#         20 B  24
#         13 22 15
#H=49,B=50,A=51,P=52,G=53,D=54
#
pH := (2,4,6,8)(26,28,30,32) (1,3,5,7)(17,21,25,29)(19,23,27,31);;#pH
pB := (18,24,22,20)(42,48,46,44) (9,15,13,11)(33,45,41,37)(35,47,43,39);;#pB
pA := (2,34,18,36)(26,10,42,12) (1,35,11,23)(17,9,37,3)(19,33,39,21);;
pP := (6,38,22,40)(30,14,46,16) (7,25,13,45)(29,27,41,47)(31,5,43 ,15);;
pG := (4,12,20,14)(28,36,44,38) (3,39,13,27)(21,11,41,5)(23,37,43,25);;
pD := (8,16,24,10)(32,40,48,34) (1,29,15,33)(17,31,45,35)(19,7,47,9);;#pD
pGamma := (2,26);;
pPsi := (1,17,19);;
pOmega := (2,8)(26,32);;
ph := (10,36,14,40)(34,12,38,16)(51,53,52,54);;
pd := (2,30,22,42)(26,6,46,18)(49,52,50,51);;
pa :=  (4,32,24,44)(28,8,48,20)(49,54,50,53);;

A := (); #permutation identique

### M = <H,D>
dragon := "BigBlock" ;; #dragon=DH'
H := (2,4,6,8)(26,28,30,32) (1,3,5,7)(17,21,25,29)(19,23,27,31);;#pH
D := (8,16,24,10)(32,40,48,34) (1,29,15,33)(17,31,45,35)(19,7,47,9);;#pD

### M = <H,D,A>
#dragon := "Fused" ;; #dragon=DAH'
#H := (2,4,6,8)(26,28,30,32) (1,3,5,7)(17,21,25,29)(19,23,27,31);;#pH
#D := (8,16,24,10)(32,40,48,34) (1,29,15,33)(17,31,45,35)(19,7,47,9);;#pD
#A := (2,34,18,36)(26,10,42,12) (1,35,11,23)(17,9,37,3)(19,33,39,21);;#pA

### M = <H,B,D²>
#dragon := "Domino" ;; #dragon=BD2H'
#H := (2,4,6,8)(26,28,30,32) (1,3,5,7)(17,21,25,29)(19,23,27,31);;#pH
#D := (18,24,22,20)(42,48,46,44) (9,15,13,11)(33,45,41,37)(35,47,43,39);;#pB
#A := pD*pD ;; #pD^2

### M = <K,S> où K = HPGHG'H'P' et S = D²AGB'D' (Frank BARNES)
#dragon := "Rubik" ;;  #dragon=DH11
#H := pH*pP*pG*pH*pG^-1*pH^-1*pP^-1 ;; #pK, ord=12
#D := pD*pD*pA*pG*pB^-1*pD^-1 ;; #pS, ord=77

######################################

n := 50 ;
a := [];
b := [] ;
Formule := [] ;
for i in [1..n] do Formule[i] := "0" ; od;
Permama := [] ;
for i in [1..n] do Permama[i] := () ; od;


a[1] := 1 ;
b[1] := 0 ;
ordH := Order(H) ;
ordD := Order(D) ;

Formule[1] := "D0H1" ;
if (dragon = "Domino" or dragon = "Fused") then
   Formule[1] := "D0AH1" ;

fi;

Permama[1] := H ;;
if (dragon = "Domino" or dragon = "Fused") then
   Permama[1] := A*H ;;

fi;

h:=2;
g:=2;
v:=2;
while (g <= n) do
   
   q := a[v-1] ;
   q := q+1;
   q := q mod ordH ;
   pp := q mod ordD ;
   
   p := b[v-1] ;
   qq := p mod ordH ;
   
   pps := String(pp);
   qqs := String(qq);
   Courant := Concatenation( "D", pps );
   Courant := Concatenation( Courant, "H" );
   Courant := Concatenation( Courant, qqs );
   
   if (dragon = "Domino" or dragon = "Fused") then
      Courant := Concatenation( "D", pps );
      Courant := Concatenation( Courant, "AH" );
      Courant := Concatenation( Courant, qqs );

   fi;
   
   Per := D^pp*H^qq ;
   if (dragon = "Domino" or dragon = "Fused") then
      Per := D^pp*A*H^qq ;

   fi;

   deja := false ;
   for i in [1..n] do
       if (Formule[i] = Courant) then
         deja := true ;
         gg := g ; #save g
         ggg := i ;
         g := n;   #pour sortir de la boucle while
      fi;
   od;
   
   if (not deja) then   
      b[v] := pp ;
      a[v] := qq ;
      Formule[v] := Courant;
      Permama[v] := Per ;
      v := v+1 ;    
   fi;
   h := h+1;
   g := g+1;
            
od; #end while

Print("\n\n");
XYZ := "W = <H,D> " ;;
if (dragon = "Domino" or dragon = "Fused") then
      XYZ := "W = <H,D,A> " ;;

fi;
   
Print(XYZ,"\n");
Print("ordH = ", ordH,"\n");
Print("ordD = ", ordD,"\n");
 
for i in [1..n] do
   if (Formule[i] <> "0" ) then 
      Print("F",i," = ", Formule[i],"\n");   
   fi;      
od;

Print("\n F",gg," = F",ggg," = ", Formule[ggg],"\n");   
Print("\n dragon-",dragon," = ", Formule[gg-1],"\n");
#Print("\n dragon-",dragon," = ", Formule[gg-1]," => ",Permama[gg-1] ,"\n");




Image

:vivef2c: