Skip to content

Latest commit

 

History

History
107 lines (76 loc) · 2.51 KB

README.md

File metadata and controls

107 lines (76 loc) · 2.51 KB

go-cubic

A golang application for creating cubes of any size $N \times N \times N$, applying moves, and generating HTML to display the cube's state.

Features

  • Create a cube of any size $N \times N \times N$.
  • Parse official WCA notation, including:
    • Commutators, conjugates, and parenthesis groups with factor suffixes.
  • Apply moves to the cube.
  • Retrieve the current state of the cube's faces.
  • Generate an HTML file to display the cube's state.

Installation

For using go-cubic as is, you can simply clone the repo and run it.

  1. Clone the repository.
git clone https://github.com/larssont/go-cubic
  1. Install the dependencies.
go mod tidy
  1. Fire it up.
go run cmd/main.go

Usage

Create a 4x4 cube:

c := cube.NewCube(4)

Parse notation into a group and print it:

input := "(R L2 U')2"

group, _ := cube.ParseNotation(input)

group.Print()

Apply moves from a group onto a cube.

Tip

Official WCA notation, as well as commutators and conjugates, is supported. Please see the WCA Regulations for details.

c := cube.NewCube(3)
input := "[L U : [S' , L2']]"

group, _ := cube.ParseNotation(input)
moves, _ := group.Expand() // Expand to get a slice of all moves 

c.ExecuteMoves(moves)

The faces of the cube can also be retrieved:

c := cube.NewCube(7)

faces := c.Faces()

The CubeFaces struct is defined as follows:

type CubeFaces struct {
	Up    []rune // A slice of runes associated with a color. w/y/g/b/r/o
	Left  []rune
	Front []rune
	Right []rune
	Back  []rune
	Down  []rune
}

Feel free to take a look at main.go for an example of creating and displaying a cube on a website with the help of go's html/template, css transformations, and some javascript.

input := "U2 R2 B L2 U2 D2 F' U2 F B2 L' B' D F U L' B' D R2 Fw2 D L Rw2 Fw2 L D2 F2 L' U' R' F Fw' D' R2 D B2 Rw' Uw2 R Rw' D Rw2 Uw'"

group, _ := cube.ParseNotation(input)
moves, _ := group.Expand()
c := cube.NewCube(4)
c.ExecuteMoves(moves...)

GenerateHTML(c, "cube.html")

Rotating 4x4 Cube

License

This project is licensed under the MPL 2.0 License - see the LICENSE.md file for details

Acknowledgments