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;
// };