diff --git a/exercises/saddle-points/Cargo.toml b/exercises/saddle-points/Cargo.toml index 28569f5bf..fc43d00f7 100644 --- a/exercises/saddle-points/Cargo.toml +++ b/exercises/saddle-points/Cargo.toml @@ -1,5 +1,5 @@ [package] name = "saddle-points" -version = "1.1.0" +version = "1.3.0" [dependencies] diff --git a/exercises/saddle-points/README.md b/exercises/saddle-points/README.md index a95543601..fc5e057f0 100644 --- a/exercises/saddle-points/README.md +++ b/exercises/saddle-points/README.md @@ -23,6 +23,8 @@ A matrix may have zero or more saddle points. Your code should be able to provide the (possibly empty) list of all the saddle points for any given matrix. +The matrix can have a different number of rows and columns (Non square). + Note that you may find other definitions of matrix saddle points online, but the tests for this exercise follow the above unambiguous definition. diff --git a/exercises/saddle-points/tests/saddle-points.rs b/exercises/saddle-points/tests/saddle-points.rs index 8021b79dc..52f06a511 100644 --- a/exercises/saddle-points/tests/saddle-points.rs +++ b/exercises/saddle-points/tests/saddle-points.rs @@ -1,16 +1,27 @@ extern crate saddle_points; -use saddle_points::*; +use saddle_points::find_saddle_points; + +// We don't care about order +fn find_sorted_saddle_points(input: &[Vec]) -> Vec<(usize, usize)> { + let mut result = saddle_points::find_saddle_points(input); + result.sort(); + result +} #[test] -fn test_identify_single_saddle_point() { - let input = vec![vec![9, 8, 7], vec![5, 3, 2], vec![6, 6, 7]]; +fn identify_single_saddle_point() { + let input = vec![ + vec![9, 8, 7], + vec![5, 3, 2], + vec![6, 6, 7], + ]; assert_eq!(vec![(1, 0)], find_saddle_points(&input)); } #[test] #[ignore] -fn test_identify_empty_matrix() { +fn identify_empty_matrix() { let input = vec![vec![], vec![], vec![]]; let expected: Vec<(usize, usize)> = Vec::new(); assert_eq!(expected, find_saddle_points(&input)); @@ -18,43 +29,96 @@ fn test_identify_empty_matrix() { #[test] #[ignore] -fn test_identify_lack_of_saddle_point() { - let input = vec![vec![1, 2, 3], vec![3, 1, 2], vec![2, 3, 1]]; +fn identify_lack_of_saddle_point() { + let input = vec![ + vec![1, 2, 3], + vec![3, 1, 2], + vec![2, 3, 1], + ]; let expected: Vec<(usize, usize)> = Vec::new(); assert_eq!(expected, find_saddle_points(&input)); } #[test] #[ignore] -fn test_multiple_saddle_point() { - let input = vec![vec![4, 5, 4], vec![3, 5, 5], vec![1, 5, 4]]; - assert_eq!(vec![(0, 1), (1, 1), (2, 1)], find_saddle_points(&input)); +fn multiple_saddle_points_in_col() { + let input = vec![ + vec![4, 5, 4], + vec![3, 5, 5], + vec![1, 5, 4], + ]; + assert_eq!( + vec![(0, 1), (1, 1), (2, 1)], + find_sorted_saddle_points(&input) + ); +} + +#[test] +#[ignore] +fn multiple_saddle_points_in_row() { + let input = vec![ + vec![6, 7, 8], + vec![5, 5, 5], + vec![7, 5, 6], + ]; + assert_eq!( + vec![(1, 0), (1, 1), (1, 2)], + find_sorted_saddle_points(&input) + ); } #[test] #[ignore] -fn test_identify_bottom_right_saddle_point() { - let input = vec![vec![8, 7, 9], vec![6, 7, 6], vec![3, 2, 5]]; +fn identify_bottom_right_saddle_point() { + let input = vec![ + vec![8, 7, 9], + vec![6, 7, 6], + vec![3, 2, 5], + ]; assert_eq!(vec![(2, 2)], find_saddle_points(&input)); } +// track specific as of v1.3 #[test] #[ignore] -fn test_non_square_matrix_high() { - let input = vec![vec![1, 5], vec![3, 6], vec![2, 7], vec![3, 8]]; +fn non_square_matrix_high() { + let input = vec![ + vec![1, 5], + vec![3, 6], + vec![2, 7], + vec![3, 8], + ]; assert_eq!(vec![(0, 1)], find_saddle_points(&input)); } #[test] #[ignore] -fn test_non_square_matrix_wide() { - let input = vec![vec![8, 7, 10, 7, 9], vec![8, 7, 13, 7, 9]]; - assert_eq!(vec![(0, 2)], find_saddle_points(&input)); +fn non_square_matrix_wide() { + let input = vec![ + vec![3, 1, 3], + vec![3, 2, 4] + ]; + assert_eq!(vec![(0, 0), (0, 2)], find_sorted_saddle_points(&input)); } #[test] #[ignore] -fn test_vector_matrix() { - let input = vec![vec![1], vec![3], vec![2], vec![3]]; - assert_eq!(vec![(0, 0)], find_saddle_points(&input)); +fn single_column_matrix() { + let input = vec![ + vec![2], + vec![1], + vec![4], + vec![1], + ]; + assert_eq!(vec![(1, 0), (3, 0)], find_saddle_points(&input)); } + +#[test] +#[ignore] +fn single_row_matrix() { + let input = vec![ + vec![2, 5, 3, 5], + ]; + assert_eq!(vec![(0, 1), (0, 3)], find_saddle_points(&input)); +} +