2022-05-02 16:52:19 +00:00
use rand ::Rng ;
2022-05-03 03:42:27 +00:00
use rand ::seq ::SliceRandom ;
use crate ::lipu_nimi ;
2022-05-02 16:52:19 +00:00
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 ;
2022-05-03 16:01:02 +00:00
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
2022-05-02 16:52:19 +00:00
loop {
nimi = nimi_w ( ) ;
if nimi_pini ! = 'n' { break ; }
2022-05-03 16:01:02 +00:00
if nimi ! = 'n' & & nimi ! = 'm' { break ; } //o nn ala o nm ala
2022-05-02 16:52:19 +00:00
}
nimi_sin . push ( nimi ) ;
nimi_pini = nimi ;
}
2022-05-03 13:33:59 +00:00
2022-05-02 16:52:19 +00:00
loop {
nimi = nimi_e ( ) ;
2022-05-03 16:01:02 +00:00
//o wuwojiti ala
2022-05-02 16:52:19 +00:00
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 ) ;
2022-05-03 19:40:22 +00:00
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
2022-05-02 16:52:19 +00:00
nimi = 'n' ;
nimi_sin . push ( nimi ) ;
}
nimi_pini = nimi ;
x + = 1 ;
}
2022-05-03 16:01:02 +00:00
if lipu_nimi ::pana ( 0 , 2 ) . contains ( & nimi_sin ) { //nimi sin li sin ala la, o pali sin e nimi
2022-05-03 03:42:27 +00:00
return pali ( i )
}
2022-05-03 16:01:02 +00:00
nimi_sin //o pana e nimi sin
2022-05-02 16:52:19 +00:00
}
2022-05-03 16:01:02 +00:00
fn nimi_w ( ) -> char { //ni li pana e nimi sama nimi w
2022-05-03 03:42:27 +00:00
let kulupu_nimi = lipu_nimi ::pana ( 3 , 3 ) ;
kulupu_nimi . choose ( & mut rand ::thread_rng ( ) ) . unwrap ( ) . chars ( ) . nth ( 0 ) . unwrap ( )
2022-05-02 16:52:19 +00:00
}
2022-05-03 16:01:02 +00:00
fn nimi_e ( ) -> char { //ni li pana e nimi sama nimi e
2022-05-03 03:42:27 +00:00
let kulupu_nimi = lipu_nimi ::pana ( 4 , 4 ) ;
kulupu_nimi . choose ( & mut rand ::thread_rng ( ) ) . unwrap ( ) . chars ( ) . nth ( 0 ) . unwrap ( )
2022-05-02 16:52:19 +00:00
}