🛞

nim言語でbit全探索をする時は、bitops.testBitを使おう

2024/06/27に公開

(執筆時のnim言語のバージョンは2.0.2です)

bit全探索をする時にi and (1 shl j) != 0などと書いて、2進表現でのある桁が1であるかを確かめたくなります。
しかし便利なプロシージャが用意されているので使いましょうという話です。

bitops.testBit 公式ドキュメント: https://nim-lang.org/docs/bitops.html#testBit%2CT%2CBitsRange[T%3A SomeInteger]

import sequtils, bitops

let A = (0..<4).toSeq
let N = A.len  # 要素数

# Aの各要素について選ぶ、選ばないを決めた時にあり得るパターンを列挙
for i in 0..<(1 shl N):
  var selectedElements = newSeq[int]()
  for j in 0..<N:
    if i.testBit(j): # ここで使っている
      selectedElements.add(A[j])
  echo selectedElements

Discussion