Skip to content

Instantly share code, notes, and snippets.

@carlosgaldino
Created March 14, 2020 10:40
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save carlosgaldino/e51fa77ff3dc234f833da58af8afa3af to your computer and use it in GitHub Desktop.
Save carlosgaldino/e51fa77ff3dc234f833da58af8afa3af to your computer and use it in GitHub Desktop.
// Diamond Kata
fn main() {
let character = &std::env::args().collect::<Vec<String>>()[1];
diamond(character.chars().next().unwrap() as u8)
}
fn diamond(c: u8) {
let max_rows = c - b'A';
let mut rows = Vec::with_capacity(max_rows as usize);
for i in 0..max_rows + 1 {
let character = (b'A' + i) as char;
let padding = max_rows - i + 1;
let mut spacing = 0;
let row: String;
if i > 0 {
spacing = (2 * i - 1) as usize;
}
if i == 0 {
let padding_rhs = padding - 1;
row = format!(
"{:>padding$}{:<padding_rhs$}",
character,
"",
padding = padding as usize,
padding_rhs = padding_rhs as usize
);
} else {
row = format!(
"{:>padding$}{:^spacing$}{:<padding$}",
character,
"",
character,
padding = padding as usize,
spacing = spacing,
);
}
println!("{}", row);
if i != max_rows {
rows.push(row);
}
}
for row in rows.iter().rev() {
println!("{}", row);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment