fork download
  1. use std::io::{self, BufRead};
  2.  
  3. #[derive(Copy, Clone)]
  4. struct CyclicBuffer {
  5. buf: [u32; 5],
  6. pos: usize,
  7. }
  8.  
  9. fn insert(buf: &mut CyclicBuffer, val: u32) {
  10. buf.buf[buf.pos] = val;
  11. buf.pos = (buf.pos + 1) % 5;
  12. }
  13.  
  14. fn median(buf: &CyclicBuffer) -> u32 {
  15. let mut nums = buf.buf.clone();
  16. nums.sort();
  17.  
  18. nums[3]
  19. }
  20.  
  21. fn main() {
  22. let stdin = io::stdin();
  23. let stdin = stdin.lock();
  24. let mut lines = stdin.lines();
  25.  
  26. let mut buffer = CyclicBuffer {
  27. buf: [0; 5],
  28. pos: 0,
  29. };
  30.  
  31. for line in (0..5).flat_map(|_| lines.next()) {
  32. insert(&mut buffer, line.unwrap().trim().parse().unwrap());
  33. }
  34.  
  35. println!("{}", median(&buffer));
  36.  
  37. for line in lines {
  38. let num = line.unwrap().trim().parse().unwrap();
  39.  
  40. if num == 0 { return }
  41.  
  42. insert(&mut buffer, num);
  43. println!("{}", median(&buffer));
  44. }
  45. }
Success #stdin #stdout 0s 14920KB
stdin
2
3
2
7
1
2
4
8
5
2
2
4
3
9
5
4
0
stdout
3
3
4
7
5
5
5
5
4
4
5
5