Rubix Cube
Mix.install([
{:jason, "~> 1.4"},
{:kino, "~> 0.8.0", override: true},
{:youtube, github: "brooklinjazz/youtube"},
{:hidden_cell, github: "brooklinjazz/hidden_cell"}
])
Navigation
Rubix’s Cube
You are going to create a Rubix Cube application.
Rubix’s Cubes are a toy with six sides. Each side has nine colored squares on it. Players rotate columns and rows on the cube with the goal of having each side with a single matching color.
Create a RubixCube supervised mix project.
mix new rubix_cube --sup
Your RubixCube project should have the following features:
Requirements
- Represent the Rubix’s Cube as data in a process.
- Start the Rubix’s Cube process under a supervisor.
- Horizontally rotate a row of the cube to the right and left
- Vertically rotate a column of the cube up and down.
- Determine if a Rubix’s Cube is solved.
- Save the state of the Rubix’s Cube using the File system.
- Load the previous state of the Rubix’ Cube using the File system when starting the application.
Mark As Completed
file_name = Path.basename(Regex.replace(~r/#.+/, __ENV__.file, ""), ".livemd")
save_name =
case Path.basename(__DIR__) do
"reading" -> "rubix_cube_reading"
"exercises" -> "rubix_cube_exercise"
end
progress_path = __DIR__ <> "/../progress.json"
existing_progress = File.read!(progress_path) |> Jason.decode!()
default = Map.get(existing_progress, save_name, false)
form =
Kino.Control.form(
[
completed: input = Kino.Input.checkbox("Mark As Completed", default: default)
],
report_changes: true
)
Task.async(fn ->
for %{data: %{completed: completed}} <- Kino.Control.stream(form) do
File.write!(
progress_path,
Jason.encode!(Map.put(existing_progress, save_name, completed), pretty: true)
)
end
end)
form
Commit Your Progress
Run the following in your command line from the curriculum folder to track and save your progress in a Git commit.
Ensure that you do not already have undesired or unrelated changes by running git status or by checking the source control tab in Visual Studio Code.
$ git checkout -b rubix-cube-exercise
$ git add .
$ git commit -m "finish rubix cube exercise"
$ git push origin rubix-cube-exercise
Create a pull request from your rubix-cube-exercise branch to your solutions branch.
Please do not create a pull request to the DockYard Academy repository as this will spam our PR tracker.
DockYard Academy Students Only:
Notify your teacher by including @BrooklinJazz in your PR description to get feedback.
You (or your teacher) may merge your PR into your solutions branch after review.
If you are interested in joining the next academy cohort, sign up here to receive more news when it is available.
Up Next
| Previous | Next |
|---|---|
| Advanced Score Tracker | Captone Project Guide |