You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

57 lines
1.2 KiB
Rust

use std::io;
/// full-ascending circular stack
struct ShiftReg {
vals: [i32; 4],
pos: usize,
}
impl ShiftReg {
pub const fn new() -> ShiftReg {
ShiftReg {
vals: [i32::MIN, i32::MIN, i32::MIN, i32::MIN],
pos: 3,
}
}
pub fn push(&mut self, val: i32) {
self.pos += 1;
self.pos %= 4;
self.vals[self.pos] = val;
}
pub fn diff(&self) -> i32 {
// i0 A
// i1 A B
// i2 A B
// i3 B
//
// A = (i0 + (i1 + i2) )
// B = ( (i1 + i2) + i3)
// B - A = i3 - i0
let first = self.vals[self.pos]; // i3
let last = self.vals[(self.pos + 1) % 4]; // i0
first.wrapping_sub(last)
}
}
fn main() {
let stdin = io::stdin();
let mut sr = ShiftReg::new();
let mut count = 0;
loop {
let mut buffer = String::new();
match stdin.read_line(&mut buffer).unwrap() {
0 => break,
_ => {
let val = buffer.trim().parse::<i32>().unwrap();
sr.push(val);
if sr.diff() > 0 {
count += 1;
}
}
}
}
println!("{}", count);
}