Advertisement
Guest User

Untitled

a guest
May 25th, 2019
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.58 KB | None | 0 0
  1. extern crate rand;
  2.  
  3. use rand::prelude::SliceRandom;
  4.  
  5.  
  6. const ROWS :[u32;3] = [165, 48,728];
  7. const COLS :[u32;3] = [462,160,78];
  8.  
  9. fn factors(n: &u32) -> Vec<u32>{
  10. // Returns vec with factors of n
  11. let mut output : Vec<u32> = Vec::new();
  12. for i in 1..n+1 {
  13. if n % i == 0 {
  14. output.push(i);
  15. }
  16. }
  17. output
  18. }
  19.  
  20. fn find_factors(row: usize, col: usize)->Vec<u32>{
  21. //returns vec with common factors to row and col
  22. let mut output = Vec::new();
  23. let afacts : Vec<u32> = factors(&ROWS[row]);
  24. let bfacts : Vec<u32> = factors(&COLS[col]);
  25. for a in afacts.iter(){
  26. if bfacts.contains(a) {
  27. output.push(*a)
  28. }
  29. }
  30. output
  31. }
  32.  
  33. fn main() {
  34. let mut rnd = rand::thread_rng();
  35. let mut facts : Vec<Vec<Vec<u32>>> = vec![vec![vec![];3];3];
  36. for i in 0..3 {
  37. for j in 0..3 {
  38. facts[i][j] = find_factors(i, j);
  39. }
  40. }
  41. 'outside: loop {
  42. let mut val : Vec<Vec<u32>> = vec![vec![0;3];3]; //bit odd having to put ref to 0 !
  43. for i in 0..3 {
  44. for j in 0..3 {
  45. val[i][j] = *facts[i][j].choose(&mut rnd).unwrap();
  46. }
  47. }
  48. for i in 0..3 {
  49. if val[i][0] * val[i][1] * val[i][2] != ROWS[i] ||
  50. val[0][i] * val[1][i] * val[2][i] != COLS[i] {
  51. continue 'outside;
  52. }
  53. }
  54.  
  55. println!(" {:?} {:?} {:?}", val[0][0], val[0][1], val[0][2]);
  56. println!(" {:?} {:?} {:?}", val[1][0], val[1][1], val[1][2]);
  57. println!(" {:?} {:?} {:?}", val[2][0], val[2][1], val[2][2]);
  58. break;
  59. }
  60. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement