From c322665a5da49534d53951688ccb1431abefd323 Mon Sep 17 00:00:00 2001 From: Coin de Gamma Date: Fri, 1 Mar 2024 14:00:42 +0000 Subject: [PATCH] 058 begin --- 058/main.rs | 87 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 058/main.rs diff --git a/058/main.rs b/058/main.rs new file mode 100644 index 0000000..7cdb892 --- /dev/null +++ b/058/main.rs @@ -0,0 +1,87 @@ +struct Step { + i: i8, + j: i8 +} + +struct Steps { + l: usize, + i: usize, + j: usize, + k: usize, + s: usize +} + +impl Steps { + fn new(n: usize) -> Steps { + return Steps { + i: n / 2, + j: n / 2, + l: 1, + k: 1, + s: 0, + }; + } + + fn ads(&mut self, s: &Step) { + if s.i < 0 { self.i -= 1; } + if s.i > 0 { self.i += 1; } + if s.j < 0 { self.j -= 1; } + if s.j > 0 { self.j += 1; } + } + + fn next(&mut self) { + let mut sts = Vec::new(); + sts.push(Step { i: 0, j: 1 }); + sts.push(Step { i: -1, j: 0 }); + sts.push(Step { i: 0, j: -1 }); + sts.push(Step { i: 1, j: 0 }); + + if self.k > self.l { + self.k = 1; + self.s += 1; + if self.s == sts.len() { + self.s = 0; + self.l += 1; + } + if self.s == 2 { + self.l += 1; + } + } + + let st = &sts[self.s]; + self.k += 1; + self.ads(st) + } + +} + +fn print() { + let n = 7usize; + let mut m = Vec::>::new(); + for i in 0..n { + let mut l = Vec::::new(); + for j in 0..n { + l.push(0); + } + m.push(l); + } + + let mut st = Steps::new(n); + for i in 1..20 { + m[st.i][st.j] = i; + st.next(); + } + + for i in 0..n { + let l = &m[i]; + for j in 0..n { + print!("{}\t", l[j]); + } + println!(""); + } +} + +fn main() { + println!("hello world"); + print(); +}