Create problem28.rs
This commit is contained in:
parent
287fd1d84a
commit
cfa577a8cd
53
problem28.rs
Normal file
53
problem28.rs
Normal file
@ -0,0 +1,53 @@
|
||||
struct Spiral {
|
||||
pub start_num: usize,
|
||||
pub end_num: usize,
|
||||
pub row: usize,
|
||||
pub side_length: usize,
|
||||
}
|
||||
|
||||
impl Spiral {
|
||||
pub fn new() -> Self {
|
||||
Spiral { row: 0, start_num: 1, end_num: 1, side_length: 1 }
|
||||
}
|
||||
|
||||
pub fn next(&self) -> Self {
|
||||
let current_row = self.row + 1;
|
||||
let start_num = self.end_num + 1;
|
||||
|
||||
let side_length = current_row * 2 + 1;
|
||||
|
||||
let delta = (side_length - 1) * 4;
|
||||
|
||||
Spiral {
|
||||
row: current_row,
|
||||
start_num,
|
||||
end_num: start_num + delta - 1,
|
||||
side_length,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn diagonals_sum(&self) -> usize {
|
||||
if self.row == 0 {
|
||||
1
|
||||
}
|
||||
else {
|
||||
self.end_num +
|
||||
(self.end_num - (self.side_length - 1)) +
|
||||
(self.end_num - (self.side_length - 1) * 2) +
|
||||
(self.end_num - (self.side_length - 1) * 3)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let mut spiral = Spiral::new();
|
||||
let mut count = 0;
|
||||
|
||||
for _ in 0..501 {
|
||||
count += spiral.diagonals_sum();
|
||||
|
||||
spiral = spiral.next();
|
||||
}
|
||||
|
||||
println!("{}", count);
|
||||
}
|
Loading…
Reference in New Issue
Block a user