From 483b38380630e5ac7075a7e7102dd3ba844c90b2 Mon Sep 17 00:00:00 2001 From: deadvey Date: Sun, 5 Jan 2025 03:04:23 +0000 Subject: [PATCH] rubiks cube thingy (WIP) --- rubiks/.gitignore | 1 + rubiks/Cargo.toml | 7 ++ rubiks/cube.jpg | Bin 0 -> 17275 bytes rubiks/cube.txt | 26 +++++++ rubiks/src/main.rs | 173 +++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 207 insertions(+) create mode 100644 rubiks/.gitignore create mode 100644 rubiks/Cargo.toml create mode 100644 rubiks/cube.jpg create mode 100644 rubiks/cube.txt create mode 100644 rubiks/src/main.rs diff --git a/rubiks/.gitignore b/rubiks/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/rubiks/.gitignore @@ -0,0 +1 @@ +/target diff --git a/rubiks/Cargo.toml b/rubiks/Cargo.toml new file mode 100644 index 0000000..0553498 --- /dev/null +++ b/rubiks/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "rubiks" +version = "0.1.0" +edition = "2021" + +[dependencies] +colored = "2.2.0" diff --git a/rubiks/cube.jpg b/rubiks/cube.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f8a798575065aa6e1f209cd24d7d4fc22b2488fc GIT binary patch literal 17275 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 V0XCpo`nP@L4E;YeHZS+<{{UuRt#AMU literal 0 HcmV?d00001 diff --git a/rubiks/cube.txt b/rubiks/cube.txt new file mode 100644 index 0000000..6b4def6 --- /dev/null +++ b/rubiks/cube.txt @@ -0,0 +1,26 @@ +Colors: + WWW + WWW + WWW + +OOO GGG RRR BBB +OOO GGG RRR BBB +OOO GGG RRR BBB + + YYY + YYY + YYY + + +Indexs: + 012 0 + 345 + 678 + +901 234 567 890 10, 20 +123 456 789 012 30 +345 678 901 234 40 + + 567 50 + 890 + 123 diff --git a/rubiks/src/main.rs b/rubiks/src/main.rs new file mode 100644 index 0000000..ddd9ea2 --- /dev/null +++ b/rubiks/src/main.rs @@ -0,0 +1,173 @@ +use std::io::{stdin,stdout,Write}; +use colored::*; + +fn print_coloured(output: char) { + match output { + 'R' => print!("{}", "R".on_truecolor(255,0,0)), + 'G' => print!("{}", "G".on_truecolor(0,255,0).purple()), + 'B' => print!("{}", "B".on_truecolor(0,0,255).red()), + 'Y' => print!("{}", "Y".on_truecolor(255,255,0).black()), + 'W' => print!("{}", "W".on_truecolor(255,255,255).black()), + 'O' => print!("{}", "O".on_truecolor(255, 128, 0)), + _ => print!("{}", output), + } +} + +fn output_cube(cube: &Vec) { + // White square + print!(" "); + for i in 0..=2 { + print_coloured(cube[i]); + } + println!(); + print!(" "); + for i in 3..=5 { + print_coloured(cube[i]); + } + println!(); + print!(" "); + for i in 6..=8 { + print_coloured(cube[i]); + } + + // First layer + println!(); + for i in 9..=20 { + print_coloured(cube[i]); + } + // Second layer + println!(); + for i in 21..=32 { + print_coloured(cube[i]); + } + // Third layer + println!(); + for i in 33..=44 { + print_coloured(cube[i]); + } + // Yellow square + println!(); + print!(" "); + for i in 45..=47 { + print_coloured(cube[i]); + } + println!(); + print!(" "); + for i in 48..=50 { + print_coloured(cube[i]); + } + println!(); + print!(" "); + for i in 51..=53 { + print_coloured(cube[i]); + } + + println!() +} +fn move_cube(rotation: String, mut cube: &mut Vec) { + let mut initial_cube = cube.clone(); + // Up clockwise + if rotation == "U" { + cube[0] = initial_cube[6]; + cube[1] = initial_cube[3]; + cube[2] = initial_cube[0]; + cube[3] = initial_cube[7]; + // Cube 4 remains the same + cube[5] = initial_cube[1]; + cube[6] = initial_cube[8]; + cube[7] = initial_cube[5]; + cube[8] = initial_cube[2]; + + let indices = vec![12, 13, 14, 15, 16, 17, 18, 19, 20, 9, 10, 11]; + + for (i, &index) in indices.iter().enumerate() { + cube[9 + i] = initial_cube[index]; + } + } + if rotation == "D" { + cube[45] = initial_cube[51]; + cube[46] = initial_cube[48]; + cube[47] = initial_cube[45]; + cube[48] = initial_cube[52]; + // Cube 49 remains the same + cube[50] = initial_cube[46]; + cube[51] = initial_cube[53]; + cube[52] = initial_cube[50]; + cube[53] = initial_cube[47]; + + let indices = vec![42, 43, 44, 33, 34, 35, 36, 37, 38, 39, 40, 41]; + + for (i, &index) in indices.iter().enumerate() { + cube[33 + i] = initial_cube[index]; + } + } + if rotation == "R" { + cube[15] = initial_cube[39]; + cube[16] = initial_cube[27]; + cube[17] = initial_cube[15]; + cube[27] = initial_cube[40]; + // Cube 28 remains the same + cube[29] = initial_cube[16]; + cube[39] = initial_cube[41]; + cube[40] = initial_cube[29]; + cube[41] = initial_cube[17]; + + // Other edge peices around the Right side + cube[42] = initial_cube[2]; + cube[30] = initial_cube[5]; + cube[18] = initial_cube[8]; + cube[2] = initial_cube[14]; + cube[5] = initial_cube[26]; + cube[8] = initial_cube[38]; + cube[14] = initial_cube[47]; + cube[26] = initial_cube[50]; + cube[38] = initial_cube[53]; + cube[47] = initial_cube[42]; + cube[50] = initial_cube[30]; + cube[53] = initial_cube[18]; + } +} +fn input() -> String{ + let mut s=String::new(); + let _=stdout().flush(); + stdin().read_line(&mut s).expect("Did not enter a correct string"); + if let Some('\n')=s.chars().next_back() { + s.pop(); + } + if let Some('\r')=s.chars().next_back() { + s.pop(); + } + return s; +} +fn main() { + + // Create a net of a cube, see cube.jpeg or cube.txt in the root of this project for a + // visualisation + let mut cube: Vec = vec![ + 'W', 'W', 'W', 'W', 'W', 'W', 'W', 'W', 'W', // 0-8 (W) + 'O', 'O', 'O', // 9-11 (O) + 'G', 'G', 'G', // 12-14 (G) + 'R', 'R', 'R', // 15-17 (R) + 'B', 'B', 'B', // 18-20 (B) + 'O', 'O', 'O', // 21-23 (O) + 'G', 'G', 'G', // 24-26 (G) + 'R', 'R', 'R', // 27-29 (R) + 'B', 'B', 'B', // 30-32 (B) + 'O', 'O', 'O', // 33-35 (O) + 'G', 'G', 'G', // 36-38 (G) + 'R', 'R', 'R', // 39-41 (R) + 'B', 'B', 'B', // 42-44 (B) + 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', // 45-53 (Y) + ]; + + output_cube(&cube); + + 'game_loop: loop { + let rotation = input(); + if rotation == "q" { + break 'game_loop; + } + move_cube(rotation, &mut cube); + output_cube(&cube); + } +}