this repo has no description
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Customize triangle type

+61 -3
+61 -3
sierpinski
··· 4 4 5 5 use argh::FromArgs; 6 6 7 - const TRIANGLE: char = '▲'; 7 + use std::fmt; 8 + use std::str::FromStr; 9 + 10 + const DELTA: &str = "Δ"; 11 + const FILLED_TRIANGLE: &str = "▲"; 12 + const HOLLOW_TRIANGLE: &str = "△"; 13 + const DOT: &str = "."; 14 + const CARAT: &str = "^"; 15 + 16 + #[derive(Copy, Clone)] 17 + enum TriangleType { 18 + Delta, 19 + Filled, 20 + Hollow, 21 + Dot, 22 + Carat, 23 + } 24 + 25 + impl fmt::Display for TriangleType { 26 + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { 27 + let displayable = match self { 28 + TriangleType::Delta => DELTA, 29 + TriangleType::Filled => FILLED_TRIANGLE, 30 + TriangleType::Hollow => HOLLOW_TRIANGLE, 31 + TriangleType::Dot => DOT, 32 + TriangleType::Carat => CARAT, 33 + }; 34 + 35 + write!(f, "{}", displayable) 36 + } 37 + } 38 + 39 + impl FromStr for TriangleType { 40 + type Err = String; 41 + 42 + fn from_str(value: &str) -> Result<TriangleType, String> { 43 + let triangle = 44 + match value.to_lowercase().as_str() { 45 + "delta" => TriangleType::Delta, 46 + "filled" => TriangleType::Filled, 47 + "hollow" => TriangleType::Hollow, 48 + "dot" => TriangleType::Dot, 49 + "carat" => TriangleType::Carat, 50 + _ => return Err( 51 + "unrecognized triangle type. try one of: delta, filled, hollow, dot, or carat." 52 + .to_string(), 53 + ), 54 + }; 55 + 56 + Ok(triangle) 57 + } 58 + } 8 59 9 60 #[derive(FromArgs)] 10 61 #[argh(description = "Prints a Sierpinski triangle.")] 11 62 struct App { 63 + #[argh( 64 + option, 65 + description = "triangle type to use.", 66 + default = "TriangleType::Filled" 67 + )] 68 + triangle: TriangleType, 69 + 12 70 #[argh(positional, description = "size of the Sierpinski triangle.")] 13 71 size: Option<u8>, 14 72 } 15 73 16 74 fn main() { 17 - let App { size } = argh::from_env(); 75 + let App { size, triangle } = argh::from_env(); 18 76 let size = size.unwrap_or(1); 19 77 20 78 let height = 2_usize.pow(size as u32); ··· 39 97 if cell == 0 || cell % 2 == 0 { 40 98 print!(" "); 41 99 } else { 42 - print!("{}", TRIANGLE); 100 + print!("{}", triangle); 43 101 } 44 102 } 45 103 println!();