プログラミングのお題スレ Part22 (863レス)
上下前次1-新
抽出解除 レス栞
リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
656(5): デフォルトの名無しさん [] 02/26(水)21:33 ID:rkiIsmEI(1)
お題: Python の int.bit_count()
65535 → 16
15 → 4
6 → 2
1 → 1
0 → 0
-1 → 1
-6 → 2
-15 → 4
-65535 → 16
657: デフォルトの名無しさん [] 02/26(水)23:29 ID:Gl9HHMVG(1)
>>656
C++20
https://paiza.io/projects/R-sSq9oCAOmG17wk6c5naw
658: デフォルトの名無しさん [sage] 02/27(木)00:23 ID:TOGelnHV(1)
>>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);
}
659: デフォルトの名無しさん [sage] 02/27(木)08:26 ID:LSRTW28H(1)
>>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);
}
663(1): デフォルトの名無しさん [] 03/01(土)20:18 ID:H8RpZRUP(1/2)
>>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
669: デフォルトの名無しさん [] 03/11(火)21:18 ID:Qmk3F8/1(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と同じ。
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.034s