diff options
| author | nsfisis <nsfisis@gmail.com> | 2020-12-08 02:53:10 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2020-12-08 02:55:44 +0900 |
| commit | f9f462cd2feb811891fe4e4919534cbdb6dcba2c (patch) | |
| tree | ecb670b0242daa7e7e1df77c146f3881c3e075e8 /build.rs | |
| download | rand-word-gen-f9f462cd2feb811891fe4e4919534cbdb6dcba2c.tar.gz rand-word-gen-f9f462cd2feb811891fe4e4919534cbdb6dcba2c.tar.zst rand-word-gen-f9f462cd2feb811891fe4e4919534cbdb6dcba2c.zip | |
first commit
Diffstat (limited to 'build.rs')
| -rw-r--r-- | build.rs | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/build.rs b/build.rs new file mode 100644 index 0000000..dcf1cc3 --- /dev/null +++ b/build.rs @@ -0,0 +1,46 @@ +use std::fs::File; +use std::io::{BufRead, BufReader, BufWriter, Result, Write}; +use std::path::Path; + +const NUM_LETTERS: usize = 26; + +fn main() -> Result<()> { + let chars = { + let file = File::open("/usr/share/dict/words")?; + let reader = BufReader::new(file); + parse(reader)? + }; + + let out_path = Path::new(&std::env::var("OUT_DIR").unwrap()).join("prebuilt_model.rs"); + let file = File::create(out_path)?; + let mut writer = BufWriter::new(file); + writeln!(writer, "[")?; + for i in 0..(NUM_LETTERS + 1) { + write!(writer, "[")?; + for j in 0..(NUM_LETTERS + 1) { + write!(writer, "{},", chars[i][j])?; + } + writeln!(writer, "],")?; + } + writeln!(writer, "]")?; + + Ok(()) +} + +fn parse(r: BufReader<File>) -> Result<[[usize; NUM_LETTERS + 1]; NUM_LETTERS + 1]> { + let mut chars = [[0; NUM_LETTERS + 1]; NUM_LETTERS + 1]; + for line in r.lines() { + let word = line?; + let mut prefix = NUM_LETTERS; + for c in word.bytes() { + let c = c.to_ascii_lowercase(); + if !c.is_ascii_lowercase() { + continue; + } + let i = (c - b'a') as usize; + chars[prefix][i] += 1; + prefix = i; + } + } + Ok(chars) +} |
