From 706700c6395396d73232cdffd9655f345a56d4bb Mon Sep 17 00:00:00 2001 From: jackfiled Date: Sun, 4 May 2025 14:59:51 +0800 Subject: [PATCH] 20250504 finished. --- src/problem/mod.rs | 2 + ...p1128_number_of_equivalent_domino_pairs.rs | 58 +++++++++++++++++++ 2 files changed, 60 insertions(+) create mode 100644 src/problem/p1128_number_of_equivalent_domino_pairs.rs diff --git a/src/problem/mod.rs b/src/problem/mod.rs index 3b59765..020bacb 100644 --- a/src/problem/mod.rs +++ b/src/problem/mod.rs @@ -632,3 +632,5 @@ mod p2071_maximum_number_of_tasks_you_can_assign; mod p838_push_dominoes; mod p1007_minimum_domino_rotations_for_equal_row; + +mod p1128_number_of_equivalent_domino_pairs; diff --git a/src/problem/p1128_number_of_equivalent_domino_pairs.rs b/src/problem/p1128_number_of_equivalent_domino_pairs.rs new file mode 100644 index 0000000..1f2cadd --- /dev/null +++ b/src/problem/p1128_number_of_equivalent_domino_pairs.rs @@ -0,0 +1,58 @@ +/** + * [1128] Number of Equivalent Domino Pairs + */ +pub struct Solution {} + +// submission codes start here +use std::collections::HashMap; + +impl Solution { + pub fn num_equiv_domino_pairs(dominoes: Vec>) -> i32 { + let mut map = HashMap::new(); + let mut result = 0; + + for card in dominoes.iter() { + let sum = card[0] * 10 + card[1]; + + if let Some(count) = map.get(&sum) { + result += *count; + } + + let entry = map.entry(sum).or_insert(0); + *entry += 1; + + let reverse_sum = card[1] * 10 + card[0]; + if reverse_sum != sum { + let entry = map.entry(card[1] * 10 + card[0]).or_insert(0); + *entry += 1; + } + } + + result + } +} + +// submission codes end + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_1128() { + assert_eq!( + 1, + Solution::num_equiv_domino_pairs(vec![vec![1, 2], vec![2, 1], vec![3, 4], vec![5, 6]]) + ); + assert_eq!( + 3, + Solution::num_equiv_domino_pairs(vec![ + vec![1, 2], + vec![1, 2], + vec![1, 1], + vec![1, 2], + vec![2, 2] + ]) + ); + } +}