Advertisement
ShrutiSharma

Reverse Me! in Rust

Feb 13th, 2022
364
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Rust 1.45 KB | None | 0 0
  1. // Code LNM 24 : Reverse Me!
  2. // Author : warks
  3.  
  4. use std::io::{BufWriter, stdin, stdout, Write};
  5.  
  6. #[derive(Default)]
  7. struct Scanner {
  8.     buffer: Vec<String>
  9. }
  10.  
  11. impl Scanner {
  12.     fn next<T: std::str::FromStr>(&mut self) -> T {
  13.         loop {
  14.             if let Some(token) = self.buffer.pop() {
  15.                 return token.parse().ok().expect("Failed parse");
  16.             }
  17.  
  18.             let mut input = String::new();
  19.             stdin().read_line(&mut input).expect("Failed read");
  20.             self.buffer = input.split_whitespace().rev().map(String::from).collect();
  21.         }
  22.     }
  23. }
  24.  
  25. fn main() {
  26.     let mut scan = Scanner::default();
  27.     let out = &mut BufWriter::new(stdout());
  28.  
  29.     let t = scan.next::<usize>();
  30.     for _ in 0..t {
  31.         let n = scan.next::<usize>();
  32.  
  33.         let mut word = scan.next::<String>().chars().collect::<Vec<_>>();
  34.         word = if word.len() & 1 == 1 { word.into_iter().rev().collect() } else { word };
  35.         word[0] = word[0].to_uppercase().collect::<Vec<_>>()[0];
  36.         write!(out, "{} ", word.into_iter().collect::<String>()).ok();
  37.  
  38.         for i in 1..n {
  39.             word = scan.next::<String>().chars().collect::<Vec<_>>();
  40.             word = if word.len() & 1 == 1 { word.into_iter().rev().collect() } else { word };
  41.             write!(out, "{}", word.into_iter().collect::<String>()).ok();
  42.             write!(out, "{}", if i + 1 == n { '\n' } else { ' ' }).ok();
  43.         }
  44.     }
  45. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement