プログラミングのお題スレ Part22 (859レス)
上下前次1-新
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん
リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
708: デフォルトの名無しさん [sage] 2025/03/27(木) 11:39:31.21 ID:vU3T1Sq/(1) AAS
>>697697(6): デフォルトの名無しさん [sage] 2025/03/21(金) 12:56:29.73 ID:CgJbZEAu(1/2) AAS
>>680 Rust
fn odai_680() -> Vec<i128> {
let mut answer = vec![0];
let n_max = (0..).find(|&n| pow16(n + 1) > pow10(36)).unwrap();
for s in (0..).take_while(|&s| pow16(n_max) >= pow10(n_max + s + 1)) {
let c = (0..=n_max).map(|i| pow16(i) - pow10(i + s)).collect::<Vec<_>>();
let rmax = c.iter().scan(0, |s, &c| { *s += if c > 0 { c * 9 } else { 0 }; Some(*s) }).collect::<Vec<_>>();
let rmin = c.iter().scan(0, |s, &c| { *s += if c < 0 { c * 9 } else { 0 }; Some(*s) }).collect::<Vec<_>>();
let (mut i, mut n, mut d, mut ct) = (0, 1, vec![0; c.len()], vec![0; c.len() + 1]);
loop {
d[i] += 1;
if d[i] < 10 {
let m = pow10(n as u32 + s); ct[i] = c[i] * d[i] + ct[i+1];
if i == 0 {
if ct[0] >= 0 && ct[0] % m < pow10(s) { answer.push(d.iter().take(n).rev().fold(0, |sum, &d| sum * 16 + d)) }
} else {
let (max, min) = (ct[i] + rmax[i-1], ct[i] + rmin[i-1]);
if max >= 0 && (max - min > m || pow10(s) > min % m || min % m > max % m) { i -= 1; }
}
} else { d[i] = -1; i += 1; if i == n { if n == d.len() { break; } n += 1; } }
}
}
answer.sort(); answer
}
crateのnumを使う
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.039s