TNoodle is a software suite that contains the official WCA scramble program. It consists of the core scrambling code (primarily written in Java) as well as a UI and server to generate a fully autonomous JAR file
You are looking at the core scrambling code portion.
This repository hosts an independent build for the essential mechanics that generate Java String
s representing twisty puzzle scrambles.
If you are interested in the webserver part, look here
The official scramble program for the World Cube Association has been part of the TNoodle project since January 1, 2013. It will contain the sole official scramble program for the foreseeable future.
All WCA official competitions must always use the current version of the official scramble program. This is available from https://www.worldcubeassociation.org/regulations/scrambles/
Note that only the scramble program part of TNoodle is "official". Other TNoodle projects may be convenient for certain uses (including at official competitions), but do not have any official status.
Officially, TNoodle-lib
is a scramble program, while a scrambler is a human. It is fine to refer to TNoodle as a "scrambler" colloquially, but please try to use the official convention wherever possible.
TNoodle is organised as a multi-project Gradle build. The build files are written in the type-safe Kotlin
dialect.
Every sub-project has its individual artifact configuration and build.gradle
file. Furthermore, there is a central buildSrc
folder,
which is automatically sourced by Gradle. It contains common code and shared configuration setups.
Gradle is served through the use of a Gradle wrapper
available as gradlew
(UNIX systems) or gradlew.bat
(DOS systems)
It is recommended to set up an alias to simplify task generation, along the lines of alias gw='./gradlew --parallel'
.
Get an overview of the core project tasks by executing
./gradlew tasks
Gradle automagically handles all dependencies for you. You just need an Internet connection upon your first build run!
When you're ready to develop, just go ahead and code! There is no UI to this part of TNoodle. You can always execute the full integration and unit test suite via:
./gradlew :scrambles:check
To build a distributable .jar
file, run:
./gradlew :scrambles:assemble
You cannot run the resulting .jar
, because it is conceived as a Maven artifact.
We recommend using the online distribution hosted at Maven Central
If you really want to use a local build in your project, execute:
./gradlew :scrambles:publishToMavenLocal
and point whatever Maven-style build tool you're using to your local .m2
repository.
Important note: You must never use a custom build for any official competitions. Contact the WCA Board and the WRC if you have any questions about this.
- Each project is a fully fledged Gradle project (they each have a
build.gradle.kts
file). Your IDE should be able to import Gradle build structures nowadays. if not, this is a good indicator that your IDE is outdated and should be replaced.
This fork introduces a new script that generates scrambles for a 3x3 Rubik's Cube and exports them into a CSV file to create a dataset.
- Script: The script is named
ScrambleDatasetGenerator.java
and can be found atscrambles/src/main/java/org/worldcubeassociation/tnoodle
. - Dataset: The generated scrambles are saved in a CSV file called
scramble_dataset.csv
, which is included in this repository.