これのエラー処理に丸一日かかりました。。
fn main() {
let mut maze = [
[9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9],
[9, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 9],
[9, 0, 9, 0, 0, 0, 9, 9, 0, 9, 9, 9],
[9, 0, 9, 9, 0, 9, 0, 0, 0, 9, 0, 9],
[9, 0, 0, 0, 9, 0, 0, 9, 9, 0, 9, 9],
[9, 9, 9, 0, 0, 9, 0, 9, 0, 0, 0, 9],
[9, 0, 0, 0, 9, 0, 9, 0, 0, 9, 1, 9],
[9, 0, 9, 0, 0, 0, 0, 9, 0, 0, 9, 9],
[9, 0, 0, 9, 0, 9, 0, 0, 9, 0, 0, 9],
[9, 0, 9, 0, 9, 0, 9, 0, 0, 9, 0, 9],
[9, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 9],
[9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9]
];
let dir: [[i32; 2]; 4] = [[1, 0], [0, 1], [-1, 0], [0, -1]];
let mut p:[i32; 4] = [1, 1, 0, 0]; // x, y, depth, d
'main: while maze[p[0] as usize][p[1] as usize] != 1 {
maze[p[0] as usize][p[1] as usize] = 2;
'sub: for i in 0..4 {
let mut j: i32 = 3;
if i != 0 {
j = (p[3] + i - 1) % 4
} else if (p[3] - 1) < 0{
j = (p[3] - 1 + 4) % 4
} else {
j = (p[3] - 1) % 4
}
println!("j: {}", j);
println!("p0: {}", p[0]);
println!("p1: {}", p[1]);
println!("p2: {}", p[2]);
println!("p3: {}", p[3]);
if maze[(p[0] + dir[j as usize][0])as usize][(p[1] + dir[j as usize][1]) as usize] < 2 {
p[0] += dir[j as usize][0]; // x
p[1] += dir[j as usize][1]; // y
p[3] = j as i32; // d
p[2] += 1; // depth
println!("yes: {}", j);
println!("< 2 p0: {}", p[0]);
println!("< 2 p1: {}", p[1]);
println!("< 2 p2: {}", p[2]);
println!("< 2 p3: {}", p[3]);
break 'sub;
} else if maze[(p[0] + dir[j as usize][0]) as usize][(p[1] + dir[j as usize][1]) as usize] == 2 {
p[0] += dir[j as usize][0];
p[1] += dir[j as usize][1];
p[3] = j as i32;
p[2] -= 1;
println!("yes: {}", j);
println!("= 2 p0: {}", p[0]);
println!("= 2 p1: {}", p[1]);
println!("= 2 p2: {}", p[2]);
println!("= 2 p3: {}", p[3]);
break 'sub;
}
}
}
println!("最終: {}", p[2]);
}
// 省略
最終: 28