Advertisement
SomewhereOutInSpace

Untitled

Nov 13th, 2023
1,003
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Rust 0.80 KB | None | 0 0
  1. use std::fs::File;
  2.  
  3. use memmap2::Mmap;
  4. use rayon::prelude::*;
  5.  
  6. fn main() -> anyhow::Result<()> {
  7.     let file = File::open("wikipedia.dat")?;
  8.  
  9.     let data = unsafe {
  10.         Mmap::map(&file)?
  11.     };
  12.  
  13.     let res = data
  14.         .par_chunks(1024)
  15.         .map(|chunk| {
  16.             let mut freq = [0; 128];
  17.  
  18.             for byte in chunk.iter().filter(|b| b <= &&0x7F) {
  19.                 freq[*byte as usize] += 1;
  20.             }
  21.  
  22.             freq
  23.         })
  24.         .reduce(|| [0_usize; 128], |mut acc, freq| {
  25.             acc.iter_mut().zip(freq).for_each(|(a, n)| *a += n);
  26.             acc
  27.         });
  28.  
  29.     for (i, c) in res.iter().enumerate() {
  30.         println!(
  31.             "{} ({}) {}",
  32.             i as u8 as char,
  33.             i,
  34.             c
  35.         )
  36.     }
  37.  
  38.     Ok(())
  39. }
  40.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement