Guest User

Untitled

a guest
Jan 21st, 2019
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.16 KB | None | 0 0
  1. use std::collections::HashMap;
  2. use std::io;
  3. // use std::cmp::Ord;
  4.  
  5. fn get_pos(c: char, char_map: &HashMap<char, usize>) -> f64 {
  6. if c.is_ascii_uppercase() {
  7. char_map[&c.to_ascii_lowercase()] as f64 - 0.5
  8. } else {
  9. char_map[&c] as f64
  10. }
  11. }
  12.  
  13. fn get_char(i: f64, chars: &str) -> char {
  14. let mut chars = chars.chars();
  15. let i_ = i as usize;
  16. if i == i_ as f64 {
  17. chars.nth(i_).unwrap()
  18. } else {
  19. chars.nth(i_ + 1).unwrap().to_ascii_uppercase()
  20. }
  21. }
  22.  
  23. fn get_sorted(order: &str, txt: &str) -> String {
  24. let mut char_map = HashMap::new();
  25. for (i, ch) in order.char_indices() {
  26. char_map.insert(ch, i);
  27. }
  28.  
  29. let mut temp: Vec<f64> = txt.chars()
  30. .map(|c| get_pos(c, &char_map))
  31. .collect();
  32. temp.sort_by(|a, b| a.partial_cmp(b).unwrap());
  33. let s: String = temp.iter().map(|i| get_char(*i, &order)).collect();
  34. s
  35. }
  36.  
  37.  
  38. fn main() {
  39. let mut order = String::new();
  40. let mut txt = String::new();
  41.  
  42. // read variables
  43. io::stdin().read_line(&mut order).ok().expect("read error");
  44. io::stdin().read_line(&mut txt).ok().expect("read error");
  45. println!("{}", get_sorted(&order, &txt));
  46. }
Add Comment
Please, Sign In to add comment