aboutsummaryrefslogtreecommitdiff
path: root/cpc/cpc2.rb
blob: 54d05c6dc4977c25c062d4ef68662aa7a0fb6935 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
BITS = 8

class Integer
  def rotate_left(bits, width = bit_width)
    bits %= width
    (self << bits | self >> (width - bits)) & ((1 << width) - 1)
  end
end

candidates = (0...(2**BITS)).to_a

(2**BITS).times do |candidate|
  next if candidates[candidate].nil?
  (1...BITS).each do |bits|
    candidates[candidate.rotate_left(bits, BITS)] = nil
  end
end

codewords = candidates.compact

p codewords
puts codewords.length

#=> [1, 3, 5, 7, 9, 11, 13, 15, 19, 21, 23, 25, 27, 29, 31, 37, 39, 43, 45, 47, 53, 55, 59, 61, 63, 87, 91, 95, 111, 127]
#=> 30