A rust implementation of a simple exercise
| fn main() { | |
| println!("{:?}", robot_paths(6, &mut Board::new(6), None, None)); | |
| } | |
| #[derive(Clone)] | |
| struct Board { | |
| squares: Vec<Vec<bool>>, | |
| } | |
| impl Board { | |
| fn new(n: i32) -> Board { | |
| let mut squares = Vec::new(); | |
| for i in 0..n { | |
| squares.push(Vec::new()); | |
| for _ in 0..n { | |
| squares[i as usize].push(false); | |
| } | |
| } | |
| Board { squares } | |
| } | |
| fn toggle_piece(&mut self, i: i32, j: i32) { | |
| let i = i as usize; | |
| let j = j as usize; | |
| self.squares[i][j] = !self.squares[i][j]; | |
| } | |
| fn has_been_visited(&mut self, i: i32, j: i32) -> bool { | |
| let i = i as usize; | |
| let j = j as usize; | |
| self.squares[i][j] | |
| } | |
| } | |
| fn robot_paths(n: i32, board: &mut Board, i: Option<i32>, j: Option<i32>) -> i32 { | |
| let i = i.unwrap_or(0); | |
| let j = j.unwrap_or(0); | |
| if !(i >= 0 && i < n && j >= 0 && j < n) || board.has_been_visited(i, j) { | |
| return 0; | |
| } | |
| if i == n - 1 && j == n - 1 { | |
| return 1; | |
| } | |
| board.toggle_piece(i, j); | |
| let result = robot_paths(n, board, Some(i), Some(j + 1)) | |
| + robot_paths(n, board, Some(i), Some(j - 1)) | |
| + robot_paths(n, board, Some(i + 1), Some(j)) | |
| + robot_paths(n, board, Some(i - 1), Some(j)); | |
| // Return the board to its original state | |
| board.toggle_piece(i, j); | |
| result | |
| } |
This comment has been minimized.
This comment has been minimized.
josalhor
commented
Jan 8, 2019
|
i and j being Options seems completly unnecessary, I believe that could be slowing it down. |
This comment has been minimized.
This comment has been minimized.
BartMassey
commented
Jan 9, 2019
|
Some dumb little things:
|
This comment has been minimized.
This comment has been minimized.
ThomasdenH
commented
Jan 10, 2019
I'm really not sure about this. The API guidelines recommend the opposite. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
This comment has been minimized.
ErichDonGubler commentedJan 8, 2019
You're doing a LOT of cloning that seems unnecessary here. Let's fix that: