AntiGuide: RubiksCube



PagePrincipale :: DerniersChangements :: ParametresUtilisateur :: Vous êtes 216.73.216.82 :: Signaler un abus :: le: 20250724 09:51:35
GAFFE: ce sont peut-être des éluCUBErations!

le cube est composé de

soit par exemple:

il y a donc MOINS DE
en tout: 55296, c'est bizarrement peu!

à dire vrai, rien que pour le coins, peut-être: 8! * 3^8: 264539520

20130517, rédaction en cours, le programme ci dessous permet de suivre l'effect d'une séquence, répétée jusqu'au retour à l'identique

le cube est décrit par ses VINGT pièces mobiles:

le cube est placé face rouge en avant et bleu à droite, (vert à gauche, blanc dessus, jaune dessous et orange derrière)
soit la correspondance: R=A, B=D O=P V=G W=H et J=B

un état est représenté (en couleur) par une suite de 48 lettres décrivant les 20 éléments mobiles soit:
(gaffe: pas trop de logique à l'ordre de éléments, mais A RESPECTER)

000 000 000 111 111 111 122 222 22 22 23 33 33 33 33 34 44 44 44 44
123 456 789 012 345 678 901 234 56 78 90 12 34 56 78 90 12 34 56 78
RWB RBJ RJV RVW OJB OBW OWV OVJ RW RB RJ RV OJ OB OW OV JB JV VW BW
en relatif:
000 000 000 111 111 111 122 222 22 22 23 33 33 33 33 34 44 44 44 44
123 456 789 012 345 678 901 234 56 78 90 12 34 56 78 90 12 34 56 78
AHD ADS ASG AGH PSD PDH PHG PGS AH AD AS AG PS PD PH PG SD SG GH DH


à neuf (ci dessus),

exemples:
- échange arrêtes de la face H: AAHGdAAgDHAA-PPHDgPPdGHPP-PPHDgPPdGHPP (cycle: 2, 4 arrêtes à tour 1)
- échange des coins GHA et GAS: 15:AAHGdAAgDHAAPPHdGppdGHP

simule la répétition d'une "séquence"
la séquence peut s'exprimer

la majuscule désigne un mouvement "horaire" ou "vissant" la minuscule le contraire (Xi dans la documentation Rubik's)

il est possible de demander n:séquence
ou de lancer une boucle par *:séquence qui sera répétée jusqu'à retrouver la configuration initiale

le programme signale les point "pivots" comportant le minimum de changements pour cette séquence
souvent minicoins=0 et minifaces=0 se produisent plusieurs fois et une fois à la fin si tou est pareil

à démontrer

séquence "primitives"

faire un catalogue possible/non



controverse:

la tentation de la force brute

programme en VbScript (Windows)

' suspect: vérifier l'effet des mouvemen,ts
' par antiguide@free.fr
' verrue pour créer liste réfetece en relaétif à partir de couleurs.
'a="RWB RBJ RJV RVW OJB OBW OWV OVJ RW RB RJ RV OJ OB OW OV JB JV VW BW"
'couleur2relatiffull
'set fs=createobject("Scripting.filesystemobject")
'set fi=fs.createtextfile("o.txt")
'fi.writeline  a
'wscript.quit

if wscript.arguments.count=1 then cmd=Wscript.Arguments(0)

if cmd="" then cmd=inputbox("liste de mouvements ?")

'               1            2             3              4 
 '  123 456 789 012 345 678 901 234 56 78 90 12 34 56 78 90 12 34 56 78                               
'p="RWB RBJ RJV RVW OJB OBW OWV OVJ RW RB RJ RV OJ OB OW OV JB JV VW BW"                                                                                                                                                                               
p="RWBRBJRJVRVWOJBOBWOWVOVJRWRBRJRVOJOBOWOVJBJVVWBW"


cmdori=cmd

' extraire compte
' sas doute compte permet interrompre répétition avant bouclage
compte=1
if instr(cmd,":") then 
   compte=mid(cmd,1,instr(cmd,":")-1)
   if compte="*" then compte=9999999999
   cmd=mid(cmd,instr(cmd,":")+1)
   msgbox compte & " " & cmd
end if ' :

traduire=0 ' sera positif si demande en relatif
conserver=0
for i=1 to len(cmd)
  if instr("ASDPGHRJBOVW", ucase(mid(cmd,i,1)) )=0 then 
    msgbox "commande invalide: "&mid(cmd,i,1)
 wscript.quit
end if
  if instr("ASDPGH", ucase(mid(cmd,i,1)) )>0 then traduire=traduire+1
  if instr("RJBOVW", ucase(mid(cmd,i,1)) )>0 then conserver=conserver+1
next ' i

if traduire*conserver >0 then
    msgbox "mélange couleur et positions impossible"
    wscript.quit
   end if

' la demande faite en relatif est traduite en couleurs
if traduire>0 then relatif2couleurfull


a=p

ori=p
minifaces=99
minicoins=99
miniarretes=99
totale="totale"

nn=0
ok=false
histofaces=""
histoarretes=""
histocoins=""
while not ok
nn=nn+1
faire cmd,cmdori
' histo=histo & vbcrlf & dire(a)
'

' si on est revenu à configuration initiale
if a=ori then ok=true
'si compte spécifié et atteint: terminer
if compte<>"*" then if nn+0=compte+0 then ok=true
' msgbox nn & " " & compte & " " & ok

' sipas terminé compter les différences.
if a<>ori  then

 faces=0
 for i=1 to len(ori)
  if mid(ori,i,1)<>mi(i,1) then faces=faces+1
 next


 if faces=minifaces then 
 '  msgbox "minifaces=" & minifaces & " lebonfaces précédent=" & lebonfaces & "=== ajouter +" & nn
   lebonfaces=lebonfaces & "," & nn
   histofaces= histofaces & vbcrlf & nn &":" & dire(7,chgt(ori,a))
 end if '  faces = minifaces

 if faces < minifaces then 
histofaces=   "minifaces: " & vbcrlf &  nn  & ":" & dire(8,chgt(ori,a))

'msgbox "minifaces etziy " & minifaces & " faces= " & faces & " lebonfaces mis a " & nn
   minifaces=faces
   memofaces=a
   lebonfaces=nn
 end if 'faces <minifaces

' arretes et coins vont compter les éléments différents de original
arretes=0
coins=0
 for i=0 to 7
  if mid(ori,3*i+1,3)<>mid(a,3*i+1,3) then coins=coins+1
 next
 for i=0 to 11
  if mid(ori,2*i+25,2)<>mid(a,2*i+25,2) then 
      arretes=arretes+1
  '    if nn=10 then msgbox i & " " & mid(ori,2*i+24,2) & "<>" & mid(a,2*i+24,2) & vbcrlf & ori & vbcrlf & dire (10,ori) & vbcrlf & a & vbcrlf & dire(11, a)
   end if
 next

' nbb de coins changés = la meilleure précedente
if coins = minicoins then 
 '   msgbox "minicoins=" & minicoins & " leboncoins précédent=" & leboncoins & "=== ajouter +" & nn
   leboncoins=leboncoins & "," & nn
   histocoins= histocoins & vbcrlf & nn &":" & dire(7,chgt(ori,a))
 end if '=minicoins


 if coins < minicoins then 
   minicoins=coins
   memocoins=a
   
   leboncoins=nn
  ' msgbox "lebon coins init a " & nn
 histocoins=   "minicoins: " & vbcrlf &  nn  & ":" & dire(8,chgt(ori,a))
 end if '<minicoins

 
 if arretes = miniarretes then 
 '   msgbox "miniarretes=" & miniarretes & " lebonarretes précédent=" & lebonarretes & "=== ajouter +" & nn
   lebonarretes=lebonarretes & "," & nn
   histoarretes= histoarretes & vbcrlf & nn &":" & dire(7,chgt(ori,a))
 end if '=miniarretes

 if arretes < miniarretes then 
   miniarretes=arretes
   memoarretes=a
   lebonarretes=nn
histoarretes=   "miniarretes: " & vbcrlf  & nn  & ":" & dire(8,chgt(ori,a))
 end if '<miniarretes

end if 'not ok ou a<>ori

wend

msgbox dire(96,ori) & vbcrlf &totale

' ' "act:" & vbcrlf & dire(3,a) & vbcrlf & _

msgbox cmdori & " après " & nn & " répétition(s), boucle=" & (ori=a) & " 1°=" & premiers(nn) & vbcrlf _ 
  & "minifaces=" & minifaces & " a tour " & lebonfaces & vbcrlf & _
  "minicoins=" & minicoins & " a tour " & leboncoins &  vbcrlf & _
"miniarretes=" & miniarretes & " a tour " & lebonarretes& vbcrlf & _
"ori" & vbcrlf & dire(2,ori) & vbcrlf & _ 
histofaces & vbcrlf  & _
 histoarretes  & vbcrlf & _
 histocoins 


function chgt (un,autre)
sous=""
 for i=1 to len(un)
  if mid(un,i,1)=mid(autre,i,1) then 
    sous=sous & chr(asc(mid(ori,i,1))+32)
   else
     sous=sous & mid(autre,i,1)
   end if
 next
chgt=sous
end function


' décomposer "porduit" en facteurs premiers
function premiers(produit)
rep=""
reste=produit
while reste >1
   for div=2 to 100
      while reste - div *(reste \ div) = 0 
         rep=rep & "*" & div
         reste=reste\div
      wend ' %=0
   next 
wend
' supprimer * initiales
premiers=mid(rep,2)
end function

' a virer!
sub moi
end sub

sub faire(quoi,quoiori)

for i4=1 to len(quoi) 

  un=mid(quoi,i4,1)
  unori=mid(quoiori,i4,1)

' un mouvement "dévissant" (minuscule) converti en TROIS "vissant"
  unmin=un 

  if instr("ASDPGH", unori) >0 then 
      unmin=mid("RJBOVW", instr("ASDPGH", unori),1)   
  else 
  if instr("asdpgh", unori) >0 then 
      unmin=mid("rjbovw", instr("asdpgh", unori),1)   

  end if
  end if
 'msgbox "faire " & unmin
  if (un>="a") then
      un=ucase(un)
      nb2do=3
  else
      nb2do=1
  end if

 for anti=1 to nb2do
 select case un
  case "R" : r
  case "V" : v
  case "B" : b
  case "O" : o
  case "W" : w
  case "J" : j
 end select

for ipoo=1 to len(a)
  if mid(a,ipoo,1)>="a" then
   msgbox "faire erreur " & a
   wscript.quit
  end if
next 'ipoo

next 'anti

'totale=totale & vbcrlf & i4 & " fait: " & unmin & ": " &   dire(99,a)
totale=totale & vbcrlf & i4 & " fait: " & unori & ": " &   dire(99,a)

next 'i4
end sub

' changer b en a dans cmd
' changer commande en relatif à couleur
sub Relatif2Couleurfull 
  relatif2couleur("AR")
  relatif2couleur("SJ")
  relatif2couleur("DB")
  relatif2couleur("PO")
  relatif2couleur("GV")
  relatif2couleur("HW")
end sub

sub Relatif2Couleur (ab)
cmdcouleur=""
old=mid(ab,1,1)
 nw=mid(ab,2,1)

for ii=1 to len(cmd)
  x1=mid(cmd,ii,1)
  if x1=old then x1=nw
  if asc(x1)-32= asc(old) then x1=chr(asc(nw)+32)
  cmdcouleur=cmdcouleur & x1
next 'ii
'remplacer cmd origine
cmd=cmdcouleur
end sub '


sub couleur2relatiffull
  couleur2relatif("AR")
  couleur2relatif("SJ")
  couleur2relatif("DB")
  couleur2relatif("PO")
  couleur2relatif("GV")
  couleur2relatif("HW")

end sub '

' remplace l'état "a" en couleur par expression relatif

sub couleur2relatif (ab)
direlatif=""
old=mid(ab,2,1)
 nw=mid(ab,1,1)
'msgbox "remplacer " & old & " par " & nw & " dans " & vbcrlf & a 
for iii=1 to len(a)
  x1=mid(a,iii,1)
  if x1=old then x1=nw
  if asc(x1)-32= asc(old) then x1=chr(asc(nw)+32)
  direrelatif=direrelatif & x1
next 'ii
a=direrelatif
'msgbox "end " & a
end sub '



' dire l'état "pp" en couleur ou relatif selon cmd
function dire (appel,pp)
' conserver l'état actuel a
save=a
a=pp 

if traduire>0 then couleur2relatifFull
p=a

dire= mid(p,1,3) & "-" & mid (p,4,3) & "-" & mid(p,7,3) & "-" & mid(p,10,3)  &  "-" & mid(p,13,3) & "-" & mid(p,16,3) & "-" & mid(p,19,3) & "-" & mid(p,22,3) & "-"  & _
   mid(p,25,2) & "-" & mid(p,27,2) & "-" & mid(p,29,2) & "-" & mid(p,31,2) & "-" & _
   mid(p,33,2) & "-" & mid(p,35,2) & "-" & mid(p,37,2) & "-" & mid(p,39,2) & "-" &_
   mid(p,41,2) & "-" & mid(p,43,2) & "-" & mid(p,45,2) & "-" & mid(p,47,2) 

a=save
end function


' prendre une sous chaine de a (ancien état avant le mouvement)
function mi(ou,lon)
mi=mid(a,ou,lon)
end function

sub r

'               1            2             3              4 
 '  123 456 789 012 345 678 901 234 56 78 90 12 34 56 78 90 12 34 56 78                               
'p="RWB RBJ RJV RVW OJB OBW OWV OVJ RW RB RJ RV OJ OB OW OV JB JV VW BW"                                                                                                                                                                               
 n=nul("RWB>RVW") & mi(10,1) & mi(11,1) & mi(12,1) &_
   nul("RBJ>RWB") &  mi(1,1) & mi(2,1) & mi(3,1) & _
   mi(4,1) & mi(5,1) & mi(6,1) & _
   mi(7,1) & mi(8,1) & mi(9,1) & _
   mi(13,12) & _
   mi(31,2) & _ 
   mi(25,2) & _
   mi(27,2) & _
   mi(29,2) & _
   mi(33,18)
 a=n
end sub

' pas d'idée, sans doute juste pour insérer un décor dans la construction du nouvel état
function nul(t)
nul=""
end function 

sub b
'               1            2             3              4 
 '  123 456 789 012 345 678 901 234 56 78 90 12 34 56 78 90 12 34 56 78                               
'p="RWB RBJ RJV RVW OJB OBW OWV OVJ RW RB RJ RV OJ OB OW OV JB JV VW BW"                                                                                                                                                                               

 n=mi(6,1) & mi(4,1) & mi(5,1) &_
   mi(14,1) & mi(15,1) & mi(13,1) & _
   mi(7,3) & _
   mi(10,3) & _ 
   mi(18,1) & mi(16,1) & mi(17,1) &_
   mi(2,1) & mi(3,1) & mi(1,1) & _ 
   mi(19,6) & _
   mi(25,2) & _ 
   mi(41,2) & _ 
   mi(29,2) & _
   mi(31,2) & _
   mi(33,2) & _
nul("OB") &   mi(48,1) & mi(47,1) & _
nul("OW") &  mi(37,2) &  _
nul("OV") &  mi(39,2) & _
nul("JB - > OB") & mi(35,2) & _
nul("JV") & mi(43,2) & _
nul("VW") & mi(45,2) & _
nul("BW") & mi(28,1)& mi(27,1)
 a=n

end sub


sub v
'               1            2             3              4 
 '  123 456 789 012 345 678 901 234 56 78 90 12 34 56 78 90 12 34 56 78                               
'p="RWB RBJ RJV RVW OJB OBW OWV OVJ RW RB RJ RV OJ OB OW OV JB JV VW BW"                                                                                                                                                                               

 n=mi(1,3) &_
   mi(4,3) & _
nul("RJV>WRV") & mi(12,1) & mi(10,1) & mi(11,1) & _
nul("RVW>WVO") & mi(20,1) & mi(21,1) & mi(19,1) &_
nul("OJB") & mi(13,3) & _
nul("OBW") & mi(16,3) & _
nul("OWV>JOV") & mi(24,1) & mi(22,1) & mi(23,1) &_
nul("OVJ>JVR") & mi(8,1) & mi(9,1) & mi(7,1) & _
nul("RW")  & mi(25,2) &_
nul("RB") & mi(27,2) &_
nul("RJ") & mi(29,2) & _
nul("RV>WV") & mi(46,1) & mi(45,1) &_
nul("OJ") & mi(33,2) &_
nul("OB") & mi(35,2) &_
nul("OW") & mi(37,2) &_
nul("OV>JV") & mi(43,2) & _
nul("JB") & mi(41,2) & _
nul("JV>RV") & mi(31,2) & _
nul("VW>VO") & mi(40,1) & mi(39,1) & _
nul("BW") & mi(47,2)
 a=n

end sub

sub o
'               1            2             3              4 
 '  123 456 789 012 345 678 901 234 56 78 90 12 34 56 78 90 12 34 56 78                               
'p="RWB RBJ RJV RVW OJB OBW OWV OVJ RW RB RJ RV OJ OB OW OV JB JV VW BW"                                                                                                                                                                               

 n=nul("RWB") & mi(1,3) &_
  nul("RBJ") &  mi(4,3) & _
nul("RJV") & mi(7,3) & _
nul("RVW") & mi(10,3) &_
nul("OJB>OVJ") & mi(22,1) & mi(23,1) & mi(24,1) & _
nul("OBW>OJB") & mi(13,3) & _
nul("OWV>OBW") & mi(16,3) &_
nul("OVJ>OWV") & mi(19,3) &  _
nul("RW")  & mi(25,2) &_
nul("RB") & mi(27,2) &_
nul("RJ") & mi(29,2) & _
nul("RV") & mi(31,2) &_
nul("OJ>OV") & mi(39,2) &_
nul("OB>OJ") & mi(33,2) &_
nul("OW>OB") & mi(35,2) &_
nul("OV>OW") & mi(37,2) & _
nul("JB") & mi(41,2) & _
nul("JV") & mi(43,2) & _
nul("VW") & mi(45,2) & _
nul("BW") & mi(47,2)
 a=n

end sub


sub j
'               1            2             3              4 
 '  123 456 789 012 345 678 901 234 56 78 90 12 34 56 78 90 12 34 56 78                               
'p="RWB RBJ RJV RVW OJB OBW OWV OVJ RW RB RJ RV OJ OB OW OV JB JV VW BW"                                                                                                                                                                               

 n=nul("RWB") & mi(1,3) &_
  nul("RBJ>VRJ") &  mi(9,1) & mi(7,1) & mi(8,1) & _
nul("RJV>VJO") & mi(23,1) & mi(24,1) & mi(22,1) & _
nul("RVW") & mi(10,3) &_
nul("OJB>BJR)") & mi(5,1) & mi(6,1) & mi(4,1) & _ 
nul("OBW") & mi(16,3) & _
nul("OWV") & mi(19,3) &_
nul("OVJ>BOJ") & mi(15,1) &  mi(13,1) & mi(14,1) & _
nul("RW")  & mi(25,2) &_
nul("RB") & mi(27,2) &_
nul("RJ>VJ") & mi(44,1) & mi(43,1) & _
nul("RV") & mi(31,2) &_
nul("OJ>BJ") & mi(42,1) & mi(41,1) &_
nul("OB") & mi(35,2) &_
nul("OW") & mi(37,2) &_
nul("OV") & mi(39,2) & _
nul("JB>JR") & mi(30,1) & mi(29,1) & _
nul("JV>JO") & mi(34,1) &  mi(33,1) & _
nul("VW") & mi(45,2) & _
nul("BW") & mi(47,2)
 a=n

end sub

sub w
'               1            2             3              4 
 '  123 456 789 012 345 678 901 234 56 78 90 12 34 56 78 90 12 34 56 78                               
'p="RWB RBJ RJV RVW OJB OBW OWV OVJ RW RB RJ RV OJ OB OW OV JB JV VW BW"                                                                                                                                                                               
 
n=nul("RWB>BWO") & mi(17,1) & mi(18,1) & mi(16,1) &_
nul("RBJ") &  mi(4,3) & _
nul("RJV") & mi(7,3) & _
nul("RVW>BRW") & mi(3,1) & mi(1,1) & mi(2,1) &_
nul("OJB") & mi(13,3) & _
nul("OBW>VOW") & mi(21,1) & mi(19,1) & mi(20,1) & _
nul("OWV>VWR") & mi(11,1) & mi(12,1) & mi(10,1) &_
nul("OVJ") & mi(22,3) &  _
nul("RW>BW")  & mi(47,2) &_
nul("RB") & mi(27,2) &_
nul("RJ") & mi(29,2) & _
nul("RV") & mi(31,2) &_
nul("OJ") & mi(33,2) &_
nul("OB") & mi(35,2) &_
nul("OW>VW") & mi(45,2) &_
nul("OV") & mi(39,2) & _
nul("JB") & mi(41,2) & _
nul("JV") & mi(43,2) & _
nul("VW>RW") & mi(25,2) & _
nul("BW>OW") & mi(37,2)
 a=n

end sub