intial commit uwu

main
anna 2 years ago
commit 7b645a9ace
Signed by: fef
GPG Key ID: EC22E476DC2D3D84

1
.gitignore vendored

@ -0,0 +1 @@
/target

8
.idea/.gitignore vendored

@ -0,0 +1,8 @@
# Default ignored files
/shelf/
/workspace.xml
# Editor-based HTTP Client requests
/httpRequests/
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="CPP_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$/../aoc2021">
<sourceFolder url="file://$MODULE_DIR$/../aoc2021/src" isTestSource="false" />
<excludeFolder url="file://$MODULE_DIR$/../aoc2021/target" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/aoc2021.iml" filepath="$PROJECT_DIR$/.idea/aoc2021.iml" />
</modules>
</component>
</project>

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
</component>
</project>

7
Cargo.lock generated

@ -0,0 +1,7 @@
# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
version = 3
[[package]]
name = "aoc2021"
version = "0.1.0"

@ -0,0 +1,10 @@
[package]
name = "aoc2021"
version = "0.1.0"
edition = "2021"
[[bin]]
name = "day01"
path = "src/day01/main.rs"
[dependencies]

File diff suppressed because it is too large Load Diff

@ -0,0 +1,56 @@
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);
}
Loading…
Cancel
Save