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 { loop { nimi = nimi_w(); if nimi_pini != 'n' { break; } if nimi != 'n' && nimi != 'm' { break; } } nimi_sin.push(nimi); nimi_pini = nimi; } loop { nimi = nimi_e(); if nimi_pini != 'w' && nimi_pini != 'j' && nimi_pini != 't' { break; } if nimi_pini == 'w' && nimi != 'o' && nimi != 'u' { break; } if (nimi_pini == 'j' || nimi_pini == 't') && nimi != 'i' { break; } } nimi_sin.push(nimi); if rand::random() { nimi = 'n'; nimi_sin.push(nimi); } 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 = lipu_nimi::pana(3,3); kulupu_nimi.choose(&mut rand::thread_rng()).unwrap().chars().nth(0).unwrap() } fn nimi_e() -> char { let kulupu_nimi = lipu_nimi::pana(4,4); kulupu_nimi.choose(&mut rand::thread_rng()).unwrap().chars().nth(0).unwrap() }