Advertisement
rhymeswithcow

r/badcode to_t9 Rust

Jul 15th, 2020
544
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Rust 5.30 KB | None | 0 0
  1. // For context: https://www.reddit.com/r/badcode/comments/hm7ifj/bad_code_coding_challenge_40_tt9_button_presses/
  2.  
  3. // |-----------------------|
  4. // |   1   |   2   |   3   |
  5. // |  .,?! |  abc  |  def  |
  6. // |-----------------------|
  7. // |   4   |   5   |   6   |
  8. // |  ghi  |  jkl  |  mno  |
  9. // |-----------------------|
  10. // |   7   |   8   |   9   |
  11. // |  pqrs |  tuv  |  wxyz |
  12. // |-----------------------|
  13. // |   *   |   0   |   #   |
  14. // |  '-+= |   ⎵  |  case  |
  15. // |-----------------------|
  16.  
  17. use std::collections::*;
  18.  
  19. fn main() {
  20.     let mut n = tt9("Hello World"); // # 44 33 555_555 666 0 # 9 666 777 555 3
  21.     if n.1 {
  22.         let mut temp = n.2.clone();
  23.         temp.insert_str(0, "## ");
  24.         n.2 = temp;
  25.     } else if n.0 {
  26.         let mut temp = n.2.clone();
  27.         temp.insert_str(0, "# ");
  28.         n.2 = temp;
  29.     }
  30.     println!("{}", n.2);
  31.  
  32.     let mut n = tt9("HELLO WORLD"); // ## 44 33 555_555 666 0 ## 9 666 777 555 3
  33.     if n.1 {
  34.         let mut temp = n.2.clone();
  35.         temp.insert_str(0, "## ");
  36.         n.2 = temp;
  37.     } else if n.0 {
  38.         let mut temp = n.2.clone();
  39.         temp.insert_str(0, "# ");
  40.         n.2 = temp;
  41.     }
  42.     println!("{}", n.2);
  43.  
  44.     let mut n = tt9("abba feed high"); // 2_22_22_2 0 333_33_33_3 0 44_444_4_44
  45.     if n.1 {
  46.         let mut temp = n.2.clone();
  47.         temp.insert_str(0, "## ");
  48.         n.2 = temp;
  49.     } else if n.0 {
  50.         let mut temp = n.2.clone();
  51.         temp.insert_str(0, "# ");
  52.         n.2 = temp;
  53.     }
  54.     println!("{}", n.2);
  55.  
  56.     let mut n = tt9("I love PHP"); // # 444 0 555 666 888 33 0 ## 7 44 7
  57.     if n.1 {
  58.         let mut temp = n.2.clone();
  59.         temp.insert_str(0, "## ");
  60.         n.2 = temp;
  61.     } else if n.0 {
  62.         let mut temp = n.2.clone();
  63.         temp.insert_str(0, "# ");
  64.         n.2 = temp;
  65.     }
  66.     println!("{}", n.2);
  67.  
  68.     let mut n = tt9("there r 4 lights!"); // 8 44 33 777 33 0 777 0_0 555 444_4_44 8 7777 1111
  69.     if n.1 {
  70.         let mut temp = n.2.clone();
  71.         temp.insert_str(0, "## ");
  72.         n.2 = temp;
  73.     } else if n.0 {
  74.         let mut temp = n.2.clone();
  75.         temp.insert_str(0, "# ");
  76.         n.2 = temp;
  77.     }
  78.     println!("{}", n.2);
  79. }
  80.  
  81. fn tt9(s: &str) -> (bool, bool, String) {
  82.     enum kp {
  83.         one,
  84.         two,
  85.         there,
  86.         four,
  87.         five,
  88.         six,
  89.         sevem,
  90.         eight,
  91.         nine,
  92.         star,
  93.         zero,
  94.         octothop,
  95.     }
  96.  
  97.     use kp::*;
  98.  
  99.     let v = vec![
  100.         (one, ".,?!"),
  101.         (two, "abc"),
  102.         (there, "def"),
  103.         (four, "ghi"),
  104.         (five, "jkl"),
  105.         (six, "mno"),
  106.         (sevem, "pqrs"),
  107.         (eight, "tuv"),
  108.         (nine, "wxyz"),
  109.         (star, "-+="),
  110.         (zero, " "),
  111.         (octothop, "#"), // I would like to point out the pointlessness of this
  112.     ];
  113.  
  114.     if s.len() == 0 {
  115.         return (false, false, String::from(""));
  116.     }
  117.  
  118.     let t = tt9((&s[1..]).clone());
  119.  
  120.     let mut st = String::new();
  121.  
  122.     for l in 0..v.len() {
  123.         for k in 0..v[l].1.len() {
  124.             if s.as_bytes()[0] == v[l].1.as_bytes()[k] {
  125.                 let d = match v[l].0 {
  126.                     one => "1".repeat(k + 1),
  127.                     two => "2".repeat(k + 1),
  128.                     there => "3".repeat(k + 1),
  129.                     four => "4".repeat(k + 1),
  130.                     five => "5".repeat(k + 1),
  131.                     six => "6".repeat(k + 1),
  132.                     sevem => "7".repeat(k + 1),
  133.                     eight => "8".repeat(k + 1),
  134.                     nine => "9".repeat(k + 1),
  135.                     star => "*".repeat(k + 1),
  136.                     zero => "0".repeat(k + 1),
  137.                     octothop => "#".repeat(k + 1),
  138.                 };
  139.  
  140.                 st = st + &d;
  141.             } else if s.as_bytes()[0].to_ascii_lowercase() == v[l].1.as_bytes()[k] {
  142.                 let d = match v[l].0 {
  143.                     one => "1".repeat(k + 1),
  144.                     two => "2".repeat(k + 1),
  145.                     there => "3".repeat(k + 1),
  146.                     four => "4".repeat(k + 1),
  147.                     five => "5".repeat(k + 1),
  148.                     six => "6".repeat(k + 1),
  149.                     sevem => "7".repeat(k + 1),
  150.                     eight => "8".repeat(k + 1),
  151.                     nine => "9".repeat(k + 1),
  152.                     star => "*".repeat(k + 1),
  153.                     zero => "0".repeat(k + 1),
  154.                     octothop => "#".repeat(k + 1),
  155.                 };
  156.  
  157.                 st = st + &d;
  158.             }
  159.         }
  160.     }
  161.  
  162.     let mut r = (
  163.         s.as_bytes()[0].is_ascii_uppercase(),
  164.         s.as_bytes()[0].is_ascii_uppercase() && t.1,
  165.         String::from(""),
  166.     );
  167.  
  168.     if (!s.as_bytes()[0].is_ascii_alphabetic() && t.1) {
  169.         r.1 = true;
  170.         st = st + " ##";
  171.     }
  172.  
  173.     if (s.as_bytes()[0].is_ascii_uppercase() && t.0) {
  174.         r.0 = true;
  175.         r.1 = true;
  176.     } else if (s.as_bytes()[0].is_ascii_uppercase() && !t.0) {
  177.     } else if (!s.as_bytes()[0].is_ascii_uppercase() && t.0 && !r.1) {
  178.         st = st + " #";
  179.     }
  180.  
  181.     if (t.2.len() > 0 && st.len() > 0) {
  182.         if st.as_bytes()[0] == t.2[..1].as_bytes()[0] {
  183.             st = st + "_";
  184.         } else {
  185.             st = st + " ";
  186.         }
  187.     }
  188.  
  189.     st = st + &t.2;
  190.  
  191.     r.2 = st;
  192.  
  193.     r
  194. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement