fork download
  1. use std::collections::HashMap;
  2. fn f(m: usize) -> Option<[(u32, u32); 5]> {
  3. let mut map = HashMap::<u64, [(u32, u32); 5]>::with_capacity(1 << 24);
  4. for a in 1u64.. {
  5. for b in 1..a {
  6. let c = a * a * a - b * b * b;
  7. let mut finished = false;
  8. if !map.contains_key(&c) {
  9. map.insert(c, [(a as u32, b as u32), (0, 0), (0, 0), (0, 0), (0, 0)]);
  10. } else if let Some(values) = map.get_mut(&c) {
  11. value_append(values, (a as u32, b as u32));
  12. finished = value_valid_size(values) == m;
  13. }
  14. if finished {
  15. return map.remove(&c);
  16. }
  17. }
  18. }
  19. return None;
  20. }
  21. fn value_valid_size(a: &[(u32, u32)]) -> usize {
  22. a.iter().position(|&(a, _)| a == 0).unwrap_or(a.len())
  23. }
  24. fn value_append(a: &mut [(u32, u32)], b: (u32, u32)) {
  25. let pos = value_valid_size(a);
  26. if pos < a.len() {a[pos] = b;}
  27. }
  28. fn main() {
  29. println!("{:?}", f(5))
  30. }
  31.  
Success #stdin #stdout 2.11s 1836776KB
stdin
Standard input is empty
stdout
Some([(1134, 357), (1155, 504), (1246, 805), (2115, 2004), (4746, 4725)])