Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- fn get_nth_zero(val: u8, n: u8) -> u8 {
- let mut num_zs = n + 1;
- let mut bitset = val;
- let mut bitn = 0;
- println!("start loop");
- while num_zs > 0 {
- println!("num_zs {} ", num_zs);
- let trz = (!bitset).trailing_zeros() as u8;
- println!("!bitset = {:08b}, trz = {} bitn = {}", !bitset, trz, bitn);
- bitset >>= trz;
- bitn += trz;
- let trz = (bitset).trailing_zeros() as u8;
- println!(" bitset = {:08b}, trz = {} bitn = {}", bitset, trz, bitn);
- if trz < num_zs {
- bitn += trz;
- } else {
- bitn += num_zs - 1;
- println!();
- break;
- }
- bitset >>= trz;
- num_zs -= trz;
- }
- bitn
- }
- //#[test]
- fn main() {
- assert_eq!(0, get_nth_zero(0, 0));
- assert_eq!(1, get_nth_zero(0b1, 0));
- assert_eq!(6, get_nth_zero(0b00111111, 0));
- assert_eq!(7, get_nth_zero(0b00111111, 1));
- assert_eq!(1, get_nth_zero(0b001111101, 0));
- assert_eq!(7, get_nth_zero(0b001111101, 1));
- assert_eq!(8, get_nth_zero(0b001111101, 2));
- assert_eq!(3, get_nth_zero(0, 3));
- }
Add Comment
Please, Sign In to add comment