You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
55 lines
1.2 KiB
55 lines
1.2 KiB
fn get_matrix(n: usize) -> u32 { |
|
let mut xss: Vec<Vec<u32>> = Vec::new(); |
|
for _i in 0..n { |
|
let mut r = Vec::new(); |
|
for _j in 0..n { |
|
r.push(0u32); |
|
} |
|
xss.push(r); |
|
} |
|
|
|
xss[n/2][n/2] = 1; |
|
|
|
let mvs = [(1, 0), (0, -1), (-1, 0), (0, 1)]; |
|
let mut mvi = 0usize; |
|
let mut l = 1; |
|
let mut li = 0; |
|
let mut i: usize = n / 2; |
|
let mut j: usize = n / 2 + 1; |
|
let mut res = 1; |
|
for k in 2u32..= (n * n) as u32 { |
|
xss[i][j] = k; |
|
let mv = mvs[mvi]; |
|
//println!("mvi: {}", mvi); |
|
if mv.0 == 1 { i += 1; } |
|
if mv.0 == -1 { i -= 1; } |
|
if mv.1 == 1 { j += 1; } |
|
if mv.1 == -1 { j-= 1; } |
|
li += 1; |
|
//println!("li vs l: {} vs {}", li, l); |
|
if li == l { |
|
mvi += 1; |
|
li = 0; |
|
if mvi == 1 { l += 1; } |
|
if mvi == 3 { l += 1; } |
|
if mvi == 4 { mvi = 0; } |
|
let d = if mvi == 0 { k } else { k + 1 }; |
|
//println!("{}", d); |
|
res += d; |
|
} |
|
} |
|
|
|
//for i in 0..n { |
|
// for j in 0..n { |
|
// print!("{}\t", xss[i][j]); |
|
// } |
|
// println!(""); |
|
//} |
|
|
|
res |
|
} |
|
|
|
fn main() { |
|
println!("{}", get_matrix(1001)); |
|
} |
|
|
|
|