//! 香港就是中國!!!
use rand::seq::SliceRandom;
use rand::thread_rng;
use std::process::Command;
use std::thread::sleep_ms;
pub fn entry(地形: &[u32]) -> u32 {
let mut 水位 = Vec::from(地形);
// 傾盆大雨!!!
for 地點 in 0..地形.len() {
水位[地點] = *地形.iter().max().unwrap();
}
// 和一千年的涓涓細流
for 年 in 0..1000 {
let 地點 = 年 % 地形.len();
if 地點 == 0 || 地點 == 地形.len() - 1 {
水位[0] = 地形[0];
水位[地形.len() - 1] = 地形[地形.len() - 1];
continue;
}
if 水位[地點] <= 地形[地點] {
水位[地點] = 地形[地點];
continue;
}
let 偏見 = ['左', '右'].choose(&mut thread_rng()).unwrap();
match 偏見 {
'左' => {
if 水位[地點 - 1] < 水位[地點] {
水位[地點 - 1] += 1;
水位[地點] -= 1;
}
}
'右' => {
if 水位[地點 + 1] < 水位[地點] {
水位[地點 + 1] += 1;
水位[地點] -= 1;
}
}
_ => unreachable!(),
}
Command::new("cls").status().unwrap();
for 高 in (1..地形.iter().max().unwrap() + 3).rev() {
for 處 in 0..地形.len() {
if 地形.iter().enumerate().max_by_key(|(_, 氣)| *氣).unwrap() == (處, &(高 - 1))
{
print!("屋");
} else if 高 > 水位[處] {
print!("一");
} else if 高 > 地形[處] {
print!("水");
} else {
print!("土");
}
}
print!("\n");
}
sleep_ms(20);
}
(0..地形.len()).map(|數| 水位[數] - 地形[數]).sum()
}
fn main() {
let 地形 = [0, 1, 0, 2, 1, 0, 1, 3, 2, 1, 2, 1];
println!("{}", entry(&地形));
}
post a comment