Advertisement
Guest User

Untitled

a guest
Feb 16th, 2020
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Rust 4.37 KB | None | 0 0
  1. fn tokenizer(input: &str, length: usize) -> Vec<String> {
  2.     let mut result = input
  3.         .split(' ')
  4.         .map(String::from)
  5.         .collect::<Vec<String>>()
  6.         .into_iter()
  7.         .fold((0, vec![]), |(mut size, mut v), word| {
  8.             if v.is_empty() || size + word.len() > length {
  9.                 size = word.len() + 1;
  10.                 v.push(word);
  11.                 let pos = v.len() - 1;
  12.             } else {
  13.                 size += word.len() + 1;
  14.                 let pos = v.len() - 1;
  15.                 v[pos].push_str(format!(" {}", word).as_str());
  16.             }
  17.  
  18.             (size, v)
  19.         })
  20.         .1;
  21.  
  22.     for i in 0..result.len() - 1 {
  23.         if result[i].len() < length {
  24.             let pad = length - result[i].len();
  25.             if pad > 0 {
  26.                 let spaces: usize = result[i]
  27.                     .chars()
  28.                     .map(|c| if c == ' ' { 1 } else { 0 })
  29.                     .sum();
  30.  
  31.                 let replace_len = spaces / pad;
  32.  
  33.                 // spaces == 1
  34.                 // pad % spaces == 0 -> pad / spaces + 1
  35.                 if pad % spaces == 0 {
  36.                     // Replace all spaces for ' ' * (pad / spaces + 1)
  37.                     result[i] = result[i].replace(" ", " ".repeat(pad / spaces + 1).as_str());
  38.                 // pad % spaces == spaces
  39.                 } else if false {
  40.                     // find gcd(pad, spaces) and distribute amongst spaces
  41.                     // Put the remainder spaces on the first instance of space
  42.                     //result[i] = result[i].replace(" ", " ".repeat(pad / spaces + 1).as_str());
  43.                 }
  44.             }
  45.         }
  46.     }
  47.  
  48.     result
  49. }
  50.  
  51. fn main() {
  52.     let case = format!("An yellow ballooner is above the sea");
  53.     println!("Case {}", case);
  54.     let len = 15;
  55.     tokenizer(case.as_str(), len).into_iter().for_each(|line| {
  56.         assert!(line.len() <= len);
  57.         println!("{}", line);
  58.     });
  59.     // Expected output
  60.     // An       yellow
  61.     // ballooner    is
  62.     // above the sea
  63.  
  64.     let case = format!("An yellow egg shell is above the sea");
  65.     println!("Case {}", case);
  66.     let len = 18;
  67.     tokenizer(case.as_str(), len).into_iter().for_each(|line| {
  68.         assert!(line.len() <= len);
  69.         println!("{}", line);
  70.     });
  71.     // Expected output
  72.     // An    yellow   egg
  73.     // shell is above the
  74.     // sea
  75.  
  76.     /*
  77.     let case = format!("A blue flower Under the sun");
  78.     println!("Case {}", case);
  79.     let len = 6;
  80.     tokenizer(case.as_str(), len).into_iter().for_each(|line| {
  81.         assert!(line.len() <= len);
  82.         println!("{}", line);
  83.     });
  84.     // Expected output
  85.     // A blue
  86.     // flower
  87.     // Under
  88.     // the
  89.     // sun
  90.  
  91.     let case = format!("A blue A blue A blue");
  92.     println!("Case {}", case);
  93.     let len = 6;
  94.     tokenizer(case.as_str(), len).into_iter().for_each(|line| {
  95.         assert!(line.len() <= len);
  96.         println!("{}", line);
  97.     });
  98.     // Expected output
  99.     // A blue
  100.     // A blue
  101.     // A blue
  102.  
  103.     let case = format!("A blue A blue A blue A blue");
  104.     println!("Case {}", case);
  105.     let len = 12;
  106.     tokenizer(case.as_str(), len).into_iter().for_each(|line| {
  107.         assert!(line.len() <= len);
  108.         println!("{}", line);
  109.     });
  110.     // Expected output
  111.     // A blue A
  112.     // blue A blue
  113.     // A blue
  114.  
  115.     let case = format!("A blue flower Under the sun");
  116.     println!("Case {}", case);
  117.     let len = 7;
  118.     tokenizer(case.as_str(), len).into_iter().for_each(|line| {
  119.         assert!(line.len() <= len);
  120.         println!("{}", line);
  121.     });
  122.     // Expected output
  123.     // A blue
  124.     // flower
  125.     // Under
  126.     // the sun
  127.  
  128.     let case = format!("An yellow balloon is above the sea");
  129.     println!("Case {}", case);
  130.     let len = 9;
  131.     tokenizer(case.as_str(), len).into_iter().for_each(|line| {
  132.         assert!(line.len() <= len);
  133.         println!("{}", line);
  134.     });
  135.     // Expected output
  136.     // An yellow
  137.     // balloon
  138.     // is  above
  139.     // the sea
  140.  
  141.     let case = format!("An yellow ballooner is above the sea");
  142.     println!("Case {}", case);
  143.     let len = 9;
  144.     tokenizer(case.as_str(), len).into_iter().for_each(|line| {
  145.         assert!(line.len() <= len);
  146.         println!("{}", line);
  147.     });
  148.     // Expected output
  149.     // An yellow
  150.     // ballooner
  151.     // is above
  152.     // the sea
  153.     // */
  154. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement