Coin de Gamma
10 months ago
1 changed files with 87 additions and 0 deletions
@ -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::<Vec<u32>>::new(); |
||||
for i in 0..n { |
||||
let mut l = Vec::<u32>::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(); |
||||
} |
Loading…
Reference in new issue