From a1ff92c72ec761b1095cc69910dbab77706dc0cb Mon Sep 17 00:00:00 2001 From: Coin de Gamma Date: Wed, 3 Jan 2024 18:11:09 +0000 Subject: [PATCH] 051 ok --- 051/main.rs | 184 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 184 insertions(+) create mode 100644 051/main.rs diff --git a/051/main.rs b/051/main.rs new file mode 100644 index 0000000..eb8657b --- /dev/null +++ b/051/main.rs @@ -0,0 +1,184 @@ +use std::collections::HashSet; + +fn er() -> Vec { + let mut nums = Vec::new(); + let size = 1000000; + for n in 0..size+1 { nums.push(true); } + let mut p = 1; + loop { + let mut found = false; + for i in p+1..size { + if nums[i] { + found = true; + p = i; + break; + } + } + if !found { break; } + for i in (2 * p .. size).step_by(p) { + nums[i] = false; + } + } + let mut res = Vec::new(); + for i in 2..size { + if nums[i] { res.push(i as u32); } + } + return res; +} + +fn rt(n: u32) -> u32 { + let s = n.to_string(); + let mut chars = s.chars(); + let f = chars.next().unwrap(); + //chars.next_back(); + let mut res = String::from(chars.as_str()); + res.push(f); + res.parse::().unwrap() +} + +fn rp(n: u32, is: u32, k: u8) -> u32 { + let s = n.to_string(); + let mut hs = HashSet::new(); + let mut iss = is; + while iss > 0 { + hs.insert(iss%10); + iss/=10; + } + + let mut ress = 0; + let mut index = 0; + for c in s.chars() { + ress*=10; + if !hs.contains(&(index+1)) { + let cc = c.to_string().parse::().unwrap(); + //println!("--{} {} {} {}", cc, c, index+1, s); + ress += cc; + } else { + ress += k as u32; + } + index+=1; + } + return ress; +} + +fn replacements(n: u32, is:u32, ps: &HashSet) -> usize { + //let mut res = Vec::new(); + //println!("-------"); + let mut res = 0; + let mut found = false; + for i in 0..=9 { + let r=rp(n, is, i); + if r.to_string().len() < n.to_string().len() { continue; } + if r == n { found = true; } + //println!("{} {} {} {}", r, n, is, i); + if ps.contains(&r) { + //println!(":: {} {} {} {}", r, n,is,i); + //res.push(r); + res+=1; + } + } + if !found { return 0; } + return res; +} + +fn rm(n: u32, _: &Vec, ps: &HashSet) -> usize { + let len = n.to_string().len(); + let rms = lpp(len as u8); + let mut max_rpls = 0; + //println!("len {}", rms.len()); + for r in rms.iter() { + if r.to_string().len() > len { + break; + } + //if !is_diff_tn(*r, len as u32) { + // continue; + //} + let rpsss = replacements(n, *r, ps); + //println!("{} {} {}", rpsss, n, *r); + if rpsss > max_rpls { + max_rpls = rpsss; + //println!("-------- {}", *r); + //for r in rpsss.iter() { + // println!("{}", r); + //} + } + } + return max_rpls; +} + +fn b_t_is(n: u32) -> u32 { + let mut rr = n; + let mut index = 1; + let mut res = 0; + while rr > 0 { + let c = rr % 2; + if c == 1 { + res*=10; + res+=index; + } + index+=1; + rr/=2; + } + return res; +} + +fn lpp(n: u8) -> Vec { + let mut res = Vec::new(); + let bt = 0; + let mut tn = 1; + for _ in 0..n { + tn *= 2; + } + for i in 1..tn { + res.push(b_t_is(i)); + } + + return res; +} + + +fn main() { + //let r = b_t_is(5); + //println!("{}", r); + //return; + //let pmsss = lpp(4); + //for p in pmsss.iter() { + // println!("{}", p); + //} + //return; + let ps = er(); + let mut hs = HashSet::new(); + for p in ps.iter() { + hs.insert(*p); + } + //let r = rp(56003, 13, 1); + //let id = is_diff(763); + //println!("..."); + let rms = lpp(6); + //for r in rs.iter() { + // println!("{}", r); + //} + // + //println!(".x."); + //let v8res = rm(120383, &rms, &hs); // 100109, + //for p in v8res.iter() { + // println!("{}", v8res); + //} + //return; + + for p in ps.iter() { + let l = rm(*p, &rms, &hs); + //println!("{}", p); + if l == 8 { + //if *p == 56003 { + println!("{}", p); + //} + break; + } + } + //println!("{}", bs); + //for r in rsss { + // println!("{}", r); + //} +} +