Savior

Print a new number by adding one to each of its digit

Mar 15th, 2020
580
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Rust 1.29 KB | None | 0 0
  1. // https://www.reddit.com/r/dailyprogrammer/comments/aphavc/20190211_challenge_375_easy_print_a_new_number_by/
  2.  
  3. /**
  4. #include <ctype.h>
  5. #include <stdio.h>
  6.  
  7. int
  8. main(void)
  9. {
  10.     int c;
  11.     while (isdigit(c = getchar())) {
  12.         int n = c - '0' + 1;
  13.         if (n == 10)
  14.             putchar('1');
  15.         putchar('0' + n % 10);
  16.     }
  17.     putchar('\n');
  18. }
  19. */
  20.  
  21. use std::{
  22.     fs::File,
  23.     io::{BufReader, BufWriter, Read, Write},
  24.     os::unix::io::{FromRawFd, IntoRawFd},
  25. };
  26.  
  27. fn main() {
  28.     // https://www.reddit.com/r/rust/comments/9xedap/how_to_achieve_fast_stdinstdout_io_suitable_for/e9t4vle/
  29.     let stdin = unsafe { File::from_raw_fd(0) };
  30.     let stdout = unsafe { File::from_raw_fd(1) };
  31.     let (mut reader, mut writer) = (BufReader::new(stdin), BufWriter::new(stdout));
  32.  
  33.     for byte in reader.by_ref().bytes() {
  34.         let byte = byte.unwrap();
  35.         if byte < b'0' || byte > b'9' {
  36.             break;
  37.         }
  38.  
  39.         let mut value = (byte - b'0') + 1;
  40.  
  41.         if value >= 10 {
  42.             writer.write(&[b'1']).unwrap();
  43.             value -= 10;
  44.         }
  45.  
  46.         writer.write(&[value + b'0']).unwrap();
  47.     }
  48.     writer.write(&[b'\n']).unwrap();
  49.  
  50.     let _ = reader.into_inner().into_raw_fd();
  51.     let _ = writer.into_inner().unwrap().into_raw_fd();
  52. }
Add Comment
Please, Sign In to add comment