プログラミングのお題スレ Part22 (863レス)
プログラミングのお題スレ Part22 http://mevius.5ch.net/test/read.cgi/tech/1691038333/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
レス栞
リロード規制
です。10分ほどで解除するので、
他のブラウザ
へ避難してください。
656: デフォルトの名無しさん [] 2025/02/26(水) 21:33:47.93 ID:rkiIsmEI お題: Python の int.bit_count() 65535 → 16 15 → 4 6 → 2 1 → 1 0 → 0 -1 → 1 -6 → 2 -15 → 4 -65535 → 16 http://mevius.5ch.net/test/read.cgi/tech/1691038333/656
657: デフォルトの名無しさん [] 2025/02/26(水) 23:29:03.38 ID:Gl9HHMVG >>656 C++20 https://paiza.io/projects/R-sSq9oCAOmG17wk6c5naw http://mevius.5ch.net/test/read.cgi/tech/1691038333/657
658: デフォルトの名無しさん [sage] 2025/02/27(木) 00:23:41.10 ID:TOGelnHV >>656 Rust fn bit_count(x: i64) -> usize { const MAGIC_1: u64 = 0x5555555555555555; // 0101..0101 const MAGIC_2: u64 = 0x3333333333333333; // 0011..0011 const MAGIC_3: u64 = 0x0f0f0f0f0f0f0f0f; const MAGIC_4: u64 = 0x00ff00ff00ff00ff; const MAGIC_5: u64 = 0x0000ffff0000ffff; const MAGIC_6: u64 = 0x00000000ffffffff; let x = x.unsigned_abs(); let x = (x & MAGIC_1) + ((x >> 1) & MAGIC_1); let x = (x & MAGIC_2) + ((x >> 2) & MAGIC_2); let x = (x & MAGIC_3) + ((x >> 4) & MAGIC_3); let x = (x & MAGIC_4) + ((x >> 8) & MAGIC_4); let x = (x & MAGIC_5) + ((x >> 16) & MAGIC_5); let x = (x & MAGIC_6) + ((x >> 32) & MAGIC_6); x as usize } fn main() { assert_eq!(bit_count(65535), 16); assert_eq!(bit_count(15), 4); assert_eq!(bit_count(6), 2); assert_eq!(bit_count(1), 1); assert_eq!(bit_count(0), 0); assert_eq!(bit_count(-1), 1); assert_eq!(bit_count(-6), 2); assert_eq!(bit_count(-15), 4); assert_eq!(bit_count(-65535), 16); } http://mevius.5ch.net/test/read.cgi/tech/1691038333/658
659: デフォルトの名無しさん [sage] 2025/02/27(木) 08:26:19.30 ID:LSRTW28H >>656 Rust trait BitCount { fn bit_count(&self) -> usize; } impl BitCount for i32 { fn bit_count(&self) -> usize { self.unsigned_abs().count_ones() as usize } } use num::{BigInt, One}; impl BitCount for BigInt { fn bit_count(&self) -> usize { self.iter_u64_digits().map(|x| x.count_ones() as usize).sum() } } fn main() { for (input, output) in [(65535, 16), (15, 4), (6, 2), (1, 1), (0, 0), (-1, 1), (-6, 2), (-15, 4), (-65535, 16)] { assert_eq!(input.bit_count(), output); } assert_eq!(BigInt::from(-1).bit_count(), 1); assert_eq!((BigInt::from(2).pow(1_000_000_000) - BigInt::one()).bit_count(), 1_000_000_000); } http://mevius.5ch.net/test/read.cgi/tech/1691038333/659
663: デフォルトの名無しさん [] 2025/03/01(土) 20:18:20.34 ID:H8RpZRUP >>656 PowerShellのBigIntなら、 $b = @(0) 1..8 |% {$b += $b |% {$_ + 1}} function bit_count([BigInt]$n) { ($b[[BigInt]::Abs($n).ToByteArray()] | measure -sum).Sum } 65535, 15, 6, 1, 0, -1, -6, -15, -65535, [BigInt]::Pow(123, 45) |% { "$_ → $(bit_count $_)" } [実行結果] 65535 → 16 15 → 4 6 → 2 1 → 1 0 → 0 -1 → 1 -6 → 2 -15 → 4 -65535 → 16 11110408185131956285910790587176451918559153212268021823629073199866111001242743283966127048043 → 159 http://mevius.5ch.net/test/read.cgi/tech/1691038333/663
669: デフォルトの名無しさん [] 2025/03/11(火) 21:18:30.26 ID:Qmk3F8/1 >>656 PowerShellでもPopCountがいつの間にか使えるようになっていた。Version 7.5.0で動作確認。 function bit_count($n) { [BigInt]::PopCount([BigInt]::Abs($n)) } 65535, 15, 6, 1, 0, -1, -6, -15, -65535, [BigInt]::Pow(123, 45) |% { "$_ → $(bit_count $_)" } 実行結果は>>663と同じ。 http://mevius.5ch.net/test/read.cgi/tech/1691038333/669
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.032s