Skip to content

Commit 57ed8ee

Browse files
committed
daily: sum of all subset XOR totals
Rust version of bit manipulation.
1 parent a6f1652 commit 57ed8ee

File tree

2 files changed

+49
-0
lines changed

2 files changed

+49
-0
lines changed

Diff for: rust/Cargo.toml

+4
Original file line numberDiff line numberDiff line change
@@ -15,3 +15,7 @@ test = true
1515
[[bin]]
1616
name = "lca_deepest_leaves"
1717
path = "src/tree/25-Apr4.rs"
18+
19+
[[bin]]
20+
name = "subset_xor_sum"
21+
path = "src/bit_manipulation/25-Apr5.rs"

Diff for: rust/src/bit_manipulation/25-Apr5.rs

+45
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
pub struct Solution {}
2+
3+
impl Solution {
4+
pub fn subset_xor_sum(nums: Vec<i32>) -> i32 {
5+
let n = nums.len();
6+
nums.into_iter().reduce(|or, x| or | x).unwrap() << (n - 1)
7+
}
8+
}
9+
10+
fn main() {
11+
println!("subset xor sum implementation");
12+
}
13+
14+
#[cfg(test)]
15+
mod tests {
16+
use super::*;
17+
#[test]
18+
fn test_subset_xor_sum_example1() {
19+
let nums = vec![1, 3];
20+
assert_eq!(Solution::subset_xor_sum(nums), 6);
21+
// Subsets: [1], [3], [1,3]
22+
// XOR sums: 1 + 3 + 2 = 6
23+
}
24+
25+
#[test]
26+
fn test_subset_xor_sum_example2() {
27+
let nums = vec![5, 1, 6];
28+
assert_eq!(Solution::subset_xor_sum(nums), 28);
29+
// Subsets: [5], [1], [6], [5,1], [5,6], [1,6], [5,1,6]
30+
// XOR sums: 5 + 1 + 6 + 4 + 3 + 7 + 2 = 28
31+
}
32+
33+
#[test]
34+
fn test_subset_xor_sum_single_element() {
35+
let nums = vec![2];
36+
assert_eq!(Solution::subset_xor_sum(nums), 2);
37+
}
38+
39+
// #[test]
40+
// /// We don't test the empty case
41+
// fn test_subset_xor_sum_empty() {
42+
// let nums = vec![];
43+
// assert_eq!(Solution::subset_xor_sum(nums), 0);
44+
// }
45+
}

0 commit comments

Comments
 (0)