プログラミングのお題スレ Part22 (857レス)
プログラミングのお題スレ Part22 http://mevius.5ch.net/test/read.cgi/tech/1691038333/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
必死チェッカー(本家)
(べ)
自ID
レス栞
あぼーん
238: デフォルトの名無しさん [sage] 2024/02/15(木) 21:30:35.17 ID:MveN6p4/ >>234 Rust fn foo(n: usize) -> (usize, Option<usize>) { let n2b = |n: usize| { let mut o = Some(n); iter::from_fn(|| { let n = o.take()?; o = (n >= 10).then(|| n / 10); Some((n % 10) as i8) }).collect::<Vec<i8>>() }; let b2n = |b: &[i8]| b.iter().rev().fold(0_usize, |n, b| n * 10 + *b as usize); let pal = |b: &mut [i8]| { let len = b.len() / 2; let (l, u) = b.split_at_mut(len); iter::zip(l, u.iter().rev()).for_each(|(l, u)| *l = *u); }; let inc = |b: &mut [i8]| { let len = b.len() / 2; let mut c = 1; b[len..].iter_mut().for_each(|b| { *b += c; if *b > 9 { *b = 0; c = 1; } else { c = 0; }}); }; let dec = |b: &mut [i8]| { let len = b.len() / 2; let mut c = 1; b[len..].iter_mut().for_each(|b| { *b -= c; if *b < 0 { *b = 9; c = 1; } else { c = 0; }}); }; let fix = |b: &mut [i8]| { if b.last() == Some(&0) { if b.len() & 1 == 0 { b[(b.len() - 1) / 2] = 9; } true } else { false } }; let mut b = n2b(n); pal(&mut b); let n1 = b2n(&b); match n.cmp(&n1) { Ordering::Equal => return (n, None), Ordering::Greater => inc(&mut b), Ordering::Less => dec(&mut b), } if fix(&mut b) { b.pop(); } pal(&mut b); let n2 = b2n(&b); match n.abs_diff(n1).cmp(&n.abs_diff(n2)) { Ordering::Less => (n1, None), Ordering::Greater => (n2, None), Ordering::Equal => (n1, Some(n2)), } } http://mevius.5ch.net/test/read.cgi/tech/1691038333/238
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.034s