🛞
nim言語でbit全探索をする時は、bitops.testBitを使おう
(執筆時の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