fork(1) 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 mean(buf: &CyclicBuffer) -> f64 {
  15. let mut sum = 0.0;
  16.  
  17. for &item in &buf.buf { sum += item as f64 }
  18.  
  19. sum / 5.0
  20. }
  21.  
  22. fn main() {
  23. let stdin = io::stdin();
  24. let stdin = stdin.lock();
  25. let mut lines = stdin.lines();
  26.  
  27. let mut buffer = CyclicBuffer {
  28. buf: [0; 5],
  29. pos: 0,
  30. };
  31.  
  32. for line in (0..5).flat_map(|_| lines.next()) {
  33. insert(&mut buffer, line.unwrap().trim().parse().unwrap());
  34. }
  35.  
  36. println!("{}", mean(&buffer));
  37.  
  38. for line in lines {
  39. let num = line.unwrap().trim().parse().unwrap();
  40.  
  41. if num == 0 { return }
  42.  
  43. insert(&mut buffer, num);
  44. println!("{}", mean(&buffer));
  45. }
  46. }
  47.  
Success #stdin #stdout 0s 14936KB
stdin
2
3
2
7
1
2
4
8
5
2
2
4
3
9
5
4
0
stdout
3
3
3.2
4.4
4
4.2
4.2
4.2
3.2
4
4.6
5