[過去ログ] プログラミングのお題スレ Part20 (1002レス)
前次1-
抽出解除 レス栞

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
446
(8): 2021/12/08(水)14:07 ID:Bws6ftLO(1) AAS
お題が出なくなったので全く実用性がないと思われる頭の体操的なやつを一つ。

お題: 与えられた数値の配列の 1 になっているビットをカウントする。

例えばC言語で unsigned char の配列とか使って、処理する関数はポインタで渡された所から何要素みたいに指定されるようにする。。

それで例えば 0xde, 0x96 (11011110, 10010110) なら答えは 10。
449: 2021/12/08(水)19:09 ID:nFeiLLyh(1) AAS
>>446
最適なコードが環境に大きく依存するからなあ
シフトの速度とか専用命令有無とか

あまり良いお題じゃないし荒れそう
455: 2021/12/09(木)22:53 ID:93rp7Kwc(1) AAS
>>446 Ruby

p [0b1110, 0b1010111].reduce(0){|s, n| s + n.digits(2).count(1)}

# => 8
456
(1): 2021/12/09(木)23:18 ID:2ghuDZG2(1) AAS
>>446
外部リンク:ideone.com
457: 2021/12/10(金)00:33 ID:Uh57IFJZ(1/2) AAS
>>446
C
外部リンク:paiza.io

入力を配列に入れてからカウントさせている。(uint32_t 型の配列)
カウント部分は>>456に似てる。しかし最初に引くのは思いつかなかった。
459: 2021/12/10(金)09:12 ID:rDACCx1y(1) AAS
>>446

Haskell

sumCntBits = id
. length
. filter odd
. ( >>= ( takeWhile ( /= 0 ) . iterate ( flip div 2 ) ) )

main = do
print $ sumCntBits [ 0xde, 0x96 ]
print $ sumCntBits [ 0x12345, 0x6789a,0xbcdef ]

----
省2
460: 2021/12/11(土)11:47 ID:kARxTGM3(1) AAS
>>446 rust
外部リンク:ideone.com
fn main() {
let f = |a: &[u32]| a.iter().map(|n| n.count_ones()).sum::<u32>();
println!("{}", f(&[0xde, 0x96]));
}
461: 2021/12/11(土)20:38 ID:LF8J+dNV(1) AAS
>>446
Kotlin
外部リンク:paiza.io

普通に作るのは出尽くした感があるのでちょっと変わったやり方にした。
入力から Int の List を作り、それを 1 ビットづつの Boolean のリスト(というか Iterator) にしてから true のみをカウントしている。
462: 2021/12/11(土)22:30 ID:LvGvT7a1(1) AAS
>>446 octave
外部リンク:ideone.com
f = @(a) sum(dec2bin(a)(:) - '0');
f([0xde 0x96])
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.944s*