Guest User

Untitled

a guest
May 25th, 2018
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.10 KB | None | 0 0
  1. fn get_nth_zero(val: u8, n: u8) -> u8 {
  2. let mut num_zs = n + 1;
  3. let mut bitset = val;
  4. let mut bitn = 0;
  5. println!("start loop");
  6. while num_zs > 0 {
  7. println!("num_zs {} ", num_zs);
  8.  
  9. let trz = (!bitset).trailing_zeros() as u8;
  10.  
  11. println!("!bitset = {:08b}, trz = {} bitn = {}", !bitset, trz, bitn);
  12.  
  13. bitset >>= trz;
  14. bitn += trz;
  15.  
  16. let trz = (bitset).trailing_zeros() as u8;
  17. println!(" bitset = {:08b}, trz = {} bitn = {}", bitset, trz, bitn);
  18.  
  19. if trz < num_zs {
  20. bitn += trz;
  21. } else {
  22. bitn += num_zs - 1;
  23. println!();
  24. break;
  25. }
  26.  
  27. bitset >>= trz;
  28.  
  29. num_zs -= trz;
  30. }
  31. bitn
  32. }
  33.  
  34. //#[test]
  35. fn main() {
  36. assert_eq!(0, get_nth_zero(0, 0));
  37. assert_eq!(1, get_nth_zero(0b1, 0));
  38. assert_eq!(6, get_nth_zero(0b00111111, 0));
  39. assert_eq!(7, get_nth_zero(0b00111111, 1));
  40.  
  41. assert_eq!(1, get_nth_zero(0b001111101, 0));
  42. assert_eq!(7, get_nth_zero(0b001111101, 1));
  43. assert_eq!(8, get_nth_zero(0b001111101, 2));
  44.  
  45. assert_eq!(3, get_nth_zero(0, 3));
  46. }
Add Comment
Please, Sign In to add comment