Skip to content

Repository files navigation

CSC4006

Solving Standard and Non-Standard Rubik’s Cubes using Group Theory

This project implements Rubik’s Cube models and solving algorithms in GAP using permutation group theory.

The project includes:

  • A 3×3 cube representation and solver based on Thistlethwaite’s algorithm
  • Reduction methods for 4×4 and 5×5 cubes
  • Cube state manipulation through permutation generators
  • Validation and reduction utilities

Requirements:

  • GAP 4.15 or later
  • Standard GAP libraries

Files:

  • Models/n3RubiksCube.g 3x3 cube model and generators
  • Models/n4RubiksCube.g 4x4 cube model and generators
  • Models/n5RubiksCube.g 5x5 cube model and generators
  • Models/MegaminxCube.g Megaminx model and generators
  • Models/PyraminxCube.g Pryaminx model and generators
  • Reduction/CollapseCube4.g 4x4 → 3x3 reduction
  • Reduction/CollapseCube5.g 5x5 → 3x3 reduction
  • Thistlethwaite/Thistlethwaiten3.g 3x3 solver implementation
  • Thistlethwaite/Thistlethwaiten4.g 4x4 solver implementation
  • Thistlethwaite/Thistlethwaiten5.g 5x5 solver implementation
  • Thistlethwaite/TSolven3.g Driver script for solving 3x3 cubes
  • Thistlethwaite/SolveReducedn4.g Driver script for solving reduced 4x4 cubes
  • Thistlethwaite/SolveReducedn5.g Driver script for solving reduced 5x5 cubes
  • Subgroups/SubgroupSolven3.g 3x3 subgroup-based solver
  • Subgroups/SubgroupSolven4.g 4x4 subgroup-based solver

File locations must be changed in:

  • all test*.g validation scripts
  • CollapseCuben*.g (4 & 5) reduction scripts
  • SolveReducedn*.g (4 & 5) and TSolven3.g solution drivers
  • Thistlethwaiten*.g (4 & 5) solution scripts
  • SubgroupSolven*.g (3 & 4) solution scripts

Known Limitations:

  • Certain reduction states may produce invalid 3×3 configurations due to parity inconsistencies
  • The reduction process does not fully resolve all even-cube parity cases
  • Solver performance decreases significantly for deeper scrambles

Aditional commands for puzzle model manipluation: 3x3

  • Cube3.DoTurn(Cube3.*, **); Applies a turn *(F,B,L,R,U,D) **(-1,1,2)
  • Cube3.Rot*(); Applies a rotation *(X,Y,Z)
  • Cube3.Do*(); Applies a middle slice turn *(M,E,S)
  • Cube3.ResetCube(); Resets cube to identity state
  • Print(Cube3.Cube); Prints permutation list
  • Print(Cube3.GetLayout()); Prints cube layout as list
  • Print(Size(Cube3.G)); Prints group size

4x4

  • Cube4.DoTurn(Cube4.*, **); Applies a turn *(F,B,L,R,U,D,f,b,l,r,u,d,Ff,Bb,Ll,Rr,Uu,Dd) **(-1,1,2)
  • Cube4.Rot*(); Applies a rotation *(X,Y,Z)
  • Cube4.ResetCube(); Resets cube to identity state
  • Print(Cube4.Cube); Prints permutation list
  • Print(Cube4.GetLayout()); Prints cube layout as list
  • Print(Size(Cube4.G)); Prints group size

5x5

  • Cube5.DoTurn(Cube5.*, **); Applies a turn *(F,B,L,R,U,D,f,b,l,r,u,d,Ff,Bb,Ll,Rr,Uu,Dd) **(-1,1,2)
  • Cube5.Rot*(); Applies a rotation *(X,Y,Z)
  • Cube5.Do*(); Applies a middle slice *(M,E,S)
  • Cube5.ResetCube(); Resets cube to identity state
  • Print(Cube5.Cube); Prints permutation list
  • Print(Cube5.GetLayout()); Prints cube layout as list
  • Print(Size(Cube5.G)); Prints group size

Pyraminx

  • CubeP.DoTurn(Cube3.*, **); Applies a turn *(A,B,C,D,a,b,c,d) **(-1,1)
  • CubeP.ResetCube(); Resets cube to identity state
  • Print(CubeP.Cube); Prints permutation list
  • Print(CubeP.GetLayout()); Prints cube layout as list
  • Print(Size(CubeP.G)); Prints group size

Megaminx

  • CubeM.DoTurn(Cube3.*, **); Applies a turn *(Af,Bf,Cf,Df,Ef,Ff,Gf,Hf,If,Jf,Kf,Lf) **(-1,1)
  • Print(CubeM.Cube); Prints permutation list
  • Print(CubeM.GetLayout()); Prints cube layout as list
  • CubeM.ResetCube(); Resets cube to identity state
  • Print(Size(CubeM.G)); Prints group size

About

Solving Standard and Non-Standard Rubik’s Cubes using Group Theory

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages