lld_rand 0.0.2

Children's programming homework
Documentation
use std::sync::atomic::*; //{AtomicI32, Ordering}
/*
这是 2025年8月 暑假 给蓝蓝 睿睿 讲编程的 随机数库
功能 是 从一个固定的 随机数表里 随机取出一个数
 */

/// 从 0 到 99 随机取出一个数
pub fn r0_99() -> u8 {
    static COUNT: AtomicI32 = AtomicI32::new(-1);
    let str = "01314338046255651329025981171941238695748590730115510359061473873460924854940036340395810618931832194835403756138791662481826012601456035467061993320104558230127941352209807602023135932559593204864098372047685372065251493470981891599933237435904172436127289843733614581721769453677835718563739241010816732410425889649358480073620549171929025636876752657603777105489392834495322258081187685161982077864381662765067685957396948258277985872515538896359215043318243936200566297327454017933209695226488786574058970941810208753116526722105283728199676336197146793901613838269289730728853171906818622339639460913137590566217983870452315876188856851321940946938827217907053302279728208833657745262300539573933287819176084138602455368301251184112579344546657896808627871642462423183812605485603113860365961557901399346985268077938422648659988902205890229740375578465492543413002414851004417094261773884873636311332937679451030817740090728880512955221825145634650910487458198466897387434016906464482798992317173031083855310003453190176754766328576023949054888477308012940962607120598841716914155872596894259227120102463505530786341528661537601355692998040907633802287349767087304319677880520292390735331569449674131892695350195446695649879411610775577534848701845344887864618685270339705873263977941202883268812767218202607712002985143226526181772765265695324160960361848820027877255590602525191368902065255542912044989438190035474189479476614198667416399941008315642362470705199478008955806878150618609001926134431852585288994420306076489868596703185806042375800774457532735816639393512084085912479543011857703805721245793754510914930210081282895585457276908774023862404839951600426992221377644649156594463398633980225623017570946810301881071141217298162740435410602043855137487619851480377788951999986949876033697174438544012706347576661730059155450890383678883744123643103515138173610702452542999376612949301904826774829037398950537440809428531218346030476225288439230948538567237218166457446859496056895732527970410612416122507090110538796265742376978297863145712674824653567631280824105057206328795924672881694236550615122193970839984779819906462636643531689762644927034722226509857238001625586690886982467240898038853738852822683860670815126540723267766919153188084273441451877040168112285079211972002583460360369592625312391278468063723654808544761766464380187118775103257204619674290366310775667350900347783919141374983222385555300981614527560360439479743010541713047734305753712524683054201918588983355070204866880487635096230376675970250010076972813955763389840355017763492857095194132036946149038720440418498940402568934938208591194013576793477746871798060272816184334769017858257857265023793660539629696490434112753713149059726021728882559427943562044792695110392436301622263090064449290047879765386107589526144114084129468376759611106257522628248488658948190274409562532844395953959870973565565251097915327073219320152110257086019705333582241331332408390047760669036578962806144386335212832415350890039933619155578870771081665047069074323283855614458464085909535084153502251511460753644497455017573288692070910598639431074461254933061862345963467383789422248318552514385062136933391958732497116257371531024574841474714200025208002701242974019271013892536099698096971414254764350627765810316579264883940897849982141160916867576568546292632068158014912268463262773470314797771808718475498105239483652243796447891883213271660134273170350366468298584861164381940653468778883701152590124817454047749729462979665940480315252496827633626292224780369067120566653653295758905385641544803609629109113539589740027808327078451040787159816932219127118264435491294253156383525637332280099967504179316974804024214590171572886707534621726021587280245442512794945088652362546252494389359465166728391119165240874239673230318279406476480562071551068475428560716712148028973210429151890914156201707941442186998729695608905898782263876601623865756369637526456966804147075135914399524603552313330114493567587209525540518313172543241281921957372574635049994962463198613996855364473511941779257342999195609483800534280615500540115213619238084663082098594378071723291315508391722464656763259355522931364793925240107157397760611291079800179787098109514938769252905487992644947027977482671469086108808858616775244747794725807723190697854931535847674225986724405206399003398181164446993065046939973839004378337520784064221653113435565864350957059860025731642388278383478081111351058908834547723632493178558705163185424272527057926928275943757545503861423506067403207094678723441791880592690689559838471796912046894657733703020723093831123501062600879326677169164559906292498138424540945720455878919522113477244443670602439497027851607646224136030212688715129933999959148674933612767061323015968571938784585661416424274699077111972143154115619682775045118201612193844512148851956333766970692990832868414921308551253489417673513267312481220065456310632194082630265829057015421359872793361643460863289089029143529990014636497413";

    if COUNT.load(Ordering::SeqCst) == -1 {
        let now = std::time::SystemTime::now();
        let duration = now.duration_since(std::time::UNIX_EPOCH).unwrap();
        let seed = duration.as_secs() as u32;
        COUNT.store(seed as i32 % str.len() as i32 - 1, Ordering::SeqCst);
    }
    //print!("COUNT {}  ", COUNT.load(Ordering::SeqCst));   
    //println!("str  {}", &str[COUNT.load(Ordering::SeqCst) as usize .. COUNT.load(Ordering::SeqCst) as usize + 2]);
    let r = &str[COUNT.load(Ordering::SeqCst) as usize .. COUNT.load(Ordering::SeqCst) as usize + 2];
    COUNT.fetch_add(1, Ordering::SeqCst);

    if COUNT.load(Ordering::SeqCst) > str.len() as i32 - 2 {
        COUNT.store(0, Ordering::SeqCst);
    }
    r.parse::<u8>().unwrap()
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn t1() {
        for _ in 0..10 {
            let result = r0_99();
            assert!(result <= 99);
        }
    }


}


//static mut COUNT: u64 = 0;
    // unsafe {
    //     COUNT += 1;
    //     aaa = COUNT;
    // };