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) let mute = npsa.gen_range(1..i); //suli nimi la ken mute li lon let mut x = 0; let mut nimi_pini = 'x'; //nimi 'x' li ken ala lon la ni li nimi_pini lon open let mut nimi_sin = String::new(); while x < mute { let mut nimi: char; if rand::random() || x > 0 { //kipisi 1 la nimi ni li ken lon li ken lon ala. kipisi mute la nimi ni li wile lon if nimi_pini == 'n' { nimi = nimi_tan(3,3); } else { nimi = nimi_tan(3,4); } nimi_sin.push(nimi); nimi_pini = nimi; } //o wuwojiti ala if nimi_pini == 'w' { //ni li nasa a nimi = *Vec::from([nimi_tan(5,5), nimi_tan(7,7)]) .choose(&mut rand::thread_rng()).unwrap(); } else if nimi_pini == 'j' { nimi = nimi_tan(5,6); } else { nimi = nimi_tan(5,7); } nimi_sin.push(nimi); if rand::thread_rng().gen_range(0..10) == 0 { //nimi n li ken lon. TENPO KAMA LA mi ken wile e ni: nimi n li lon la, ante li lon ala. ante li lon la, nimi n li lon ala nimi = 'n'; nimi_sin.push(nimi); } nimi_pini = nimi; x += 1; } if lipu_nimi::pana(0,2).contains(&nimi_sin) { //nimi sin li sin ala la, o pali sin e nimi return pali(i) } nimi_sin //o pana e nimi sin } fn nimi_tan(i: usize, j: usize) -> char { //ni li pana e nimi tan linja lon lipu let kulupu_nimi = lipu_nimi::pana(i,j); kulupu_nimi.choose(&mut rand::thread_rng()).unwrap().chars().nth(0).unwrap() }