Coin de Gamma
12 months ago
1 changed files with 184 additions and 0 deletions
@ -0,0 +1,184 @@ |
|||||||
|
use std::collections::HashSet; |
||||||
|
|
||||||
|
fn er() -> Vec<u32> { |
||||||
|
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::<u32>().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::<u32>().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<u32>) -> 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<u32>, ps: &HashSet<u32>) -> 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<u32> { |
||||||
|
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);
|
||||||
|
//}
|
||||||
|
} |
||||||
|
|
Loading…
Reference in new issue