RosettaCodeData/Task/Sierpinski-carpet/Rust/sierpinski-carpet.rust
2019-09-12 10:33:56 -07:00

23 lines
585 B
Text

fn main() {
for i in 0..4 {
println!("\nN={}", i);
println!("{}", sierpinski_carpet(i));
}
}
fn sierpinski_carpet(n: u32) -> String {
let mut carpet = vec!["#".to_string()];
for _ in 0..n {
let mut top: Vec<_> = carpet.iter().map(|x| x.repeat(3)).collect();
let middle: Vec<_> = carpet
.iter()
.map(|x| x.to_string() + &x.replace("#", " ") + x)
.collect();
let bottom = top.clone();
top.extend(middle);
top.extend(bottom);
carpet = top;
}
carpet.join("\n")
}