diff --git a/nimi_ale.txt b/nimi_ale.txt new file mode 100644 index 0000000..5912a45 --- /dev/null +++ b/nimi_ale.txt @@ -0,0 +1,5 @@ +akesi ala alasa ale anpa ante awen esun ijo ike ilo insa jaki jan jelo jo kala kalama kama kasi ken kili kiwen ko kon kule kulupu kute lape laso lawa len lete lili linja lipu loje luka lukin lupa ma mama mani mi moku moli monsi mu mun musi mute nanpa nasa nasin nena ni nimi noka olin ona open pakala pali palisa pan pilin pimeja pini pipi poka poki pona pu seli selo seme sewi sike sin sina sinpin sona sitelen soweli suli suno supa suwi taso telo tenpo toki tomo tu unpa uta utala walo wan waso wawa weka wile tonsi ku epiku jasima kijetesantakalu kin kipisi kokosila lanpan leko meso misikeke monsuta namako oko soko +kepeken sama tan tawa lon +li e o a la +w t p s j k l n m +e u i o a diff --git a/src/lipu_nimi.rs b/src/lipu_nimi.rs new file mode 100644 index 0000000..5567660 --- /dev/null +++ b/src/lipu_nimi.rs @@ -0,0 +1,11 @@ + +pub fn pana(i: usize, j: usize) -> Vec { + let lipu_nimi = std::fs::read_to_string("nimi_ale.txt").unwrap(); + let mut kulupu_nimi = Vec::new(); + for nanpa in i..j+1 { + for nimi in lipu_nimi.lines().nth(nanpa).unwrap().split_whitespace() { + kulupu_nimi.push(String::from(nimi)); + } + } + kulupu_nimi +} diff --git a/src/main.rs b/src/main.rs index 13c581e..40c8736 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,6 +1,7 @@ use markov::Chain; mod toki; mod nimi_sin; +mod lipu_nimi; fn main() { let nimi_sin = nimi_sin::pali(4); diff --git a/src/nimi_sin.rs b/src/nimi_sin.rs index 527fcbc..34d42f9 100644 --- a/src/nimi_sin.rs +++ b/src/nimi_sin.rs @@ -1,4 +1,6 @@ use rand::Rng; +use rand::seq::SliceRandom; +use crate::lipu_nimi; pub fn pali(i: u8) -> String { let mut npsa = rand::thread_rng(); //ni li pali e nanpa pi sona ala (npsa) @@ -34,15 +36,18 @@ pub fn pali(i: u8) -> String { nimi_pini = nimi; x += 1; } + if lipu_nimi::pana(0,2).contains(&nimi_sin) { + return pali(i) + } nimi_sin } fn nimi_w() -> char { - let kulupu_nimi = ['w', 't', 'p', 's', 'j', 'k', 'l', 'n', 'm']; - kulupu_nimi[rand::thread_rng().gen_range(0..kulupu_nimi.len())] + let kulupu_nimi = lipu_nimi::pana(3,3); + kulupu_nimi.choose(&mut rand::thread_rng()).unwrap().chars().nth(0).unwrap() } fn nimi_e() -> char { - let kulupu_nimi = ['e', 'u', 'i', 'o', 'a']; - kulupu_nimi[rand::thread_rng().gen_range(0..kulupu_nimi.len())] + let kulupu_nimi = lipu_nimi::pana(4,4); + kulupu_nimi.choose(&mut rand::thread_rng()).unwrap().chars().nth(0).unwrap() } diff --git a/src/toki.rs b/src/toki.rs index 91bfb08..dcca0c9 100644 --- a/src/toki.rs +++ b/src/toki.rs @@ -1,4 +1,8 @@ use rand::Rng; +use rand::seq::SliceRandom; +use crate::lipu_nimi; + + pub fn pali(nimi_sin: &str) -> String { let mut toki = String::new(); @@ -8,8 +12,9 @@ pub fn pali(nimi_sin: &str) -> String { } fn pali_lili(toki: String, nimi_sin: &str, la_li_ken: bool, nimi_sin_li_lon_a: bool) -> String { - let kulupu_nimi = ["akesi", "ala", "alasa", "ale", "anpa", "ante", "awen", "esun", "ijo", "ike", "ilo", "insa", "jaki", "jan", "jelo", "jo", "kala", "kalama", "kama", "kasi", "ken", "kepeken", "kili", "kiwen", "ko", "kon", "kule", "kulupu", "kute", "lape", "laso", "lawa", "len", "lete", "lili", "linja", "lipu", "loje", "lon", "luka", "lukin", "lupa", "ma", "mama", "mani", "mi", "moku", "moli", "monsi", "mu", "mun", "musi", "mute", "nanpa", "nasa", "nasin", "nena", "ni", "nimi", "noka", "olin", "ona", "open", "pakala", "pali", "palisa", "pan", "pilin", "pimeja", "pini", "pipi", "poka", "poki", "pona", "pu", "sama", "seli", "selo", "seme", "sewi", "sike", "sin", "sina", "sinpin", "sona", "sitelen", "soweli", "suli", "suno", "supa", "suwi", "tan", "taso", "tawa", "telo", "tenpo", "toki", "tomo", "tu", "unpa", "uta", "utala", "walo", "wan", "waso", "wawa", "weka", "wile", "tonsi", "ku", "epiku", "jasima", "kijetesantakalu", "kin", "kipisi", "kokosila", "lanpan", "leko", "meso", "misikeke", "monsuta", "monsuta", "namako", "oko", "soko"]; //nimi pi ku suli - let kulupu_nimi_ante = ["kepeken", "sama", "tan", "tawa", "lon"]; //kepeken li nimi ni li sama ala kepeken pi nimi ante. + let nimi_pi_ku_suli = lipu_nimi::pana(0,1); + let nimi_tawa = lipu_nimi::pana(1,1); + let mut toki_sin = String::clone(&toki); let mut mi_anu_sina = false; let mut la_anu_seme = rand::thread_rng().gen_range(0_u8..10) == 0; @@ -31,7 +36,7 @@ fn pali_lili(toki: String, nimi_sin: &str, la_li_ken: bool, nimi_sin_li_lon_a: b toki_sin.push_str("e "); //nimi "e" } if x == 3 { - toki_sin.push_str(kulupu_nimi_ante[rand::thread_rng().gen_range(0..kulupu_nimi_ante.len())]); //nimi sama nimi "kepeken" + toki_sin.push_str(nimi_tawa.choose(&mut rand::thread_rng()).unwrap()); //nimi sama nimi "kepeken" toki_sin.push_str(" "); } let mut y = 0; @@ -41,16 +46,16 @@ fn pali_lili(toki: String, nimi_sin: &str, la_li_ken: bool, nimi_sin_li_lon_a: b suli_kipisi = rand::thread_rng().gen_range(1_u8..4); //kipisi la nimi tu tu li ken lon } while y < suli_kipisi { - let nimi_ni = kulupu_nimi[rand::thread_rng().gen_range(0..kulupu_nimi.len())]; - if (nimi_ni == "mi" || nimi_ni == "sina") && suli_kipisi == 1 { + let nimi_ni = nimi_pi_ku_suli.choose(&mut rand::thread_rng()).unwrap(); + if (nimi_ni == &"mi" || nimi_ni == &"sina") && suli_kipisi == 1 { mi_anu_sina = true; //nimi li nimi "mi" taso anu nimi "sina" taso } if (rand::thread_rng().gen_range(0_u8..6) == 0 || (x == suli-1 && y == suli_kipisi-1)) && !nimi_sin_li_lon { toki_sin.push_str(nimi_sin); //ilo li pana e nimi sin. nimi_sin_li_lon = true; //ni la, nimi sin li lon! } else { - toki_sin.push_str(kulupu_nimi[rand::thread_rng(). - gen_range(0..kulupu_nimi.len())]); //ilo li pana e nimi pi ku suli + toki_sin.push_str(nimi_pi_ku_suli.choose(&mut rand::thread_rng()) + .unwrap()); //ilo li pana e nimi pi ku suli } toki_sin.push_str(" "); y += 1; diff --git a/󱥠.png b/󱥠.png new file mode 100644 index 0000000..c01d9d1 Binary files /dev/null and b/󱥠.png differ