2015年6月21日日曜日

150621

Project Euler


Problem 520

Simber(2進法版)を考えてみた。
すなわち、0を含むなら偶数個含み、1を含むなら奇数個含むようなものを考える。

N = 10
# nが偶数のときは存在しない
1.step(N, 2){|n|
  ary = []
  (2 ** (n - 1)..2 ** n - 1).each{|i|
    ary0 = i.to_s(2).split('').map(&:to_i)
    if ary0.count(0) % 2 == 0
      if ary0.count(1) % 2 == 1 || ary0.count(1) == 0
        ary.push(i.to_s(2).to_i)
      end
    end
  }
  p ary
}

出力結果
[1]
[100, 111]
[10000, 10011, 10101, 10110, 11001, 11010, 11100, 11111]
[1000000, 1000011, 1000101, 1000110, 1001001, 1001010, 1001100, 1001111, 1010001
, 1010010, 1010100, 1010111, 1011000, 1011011, 1011101, 1011110, 1100001, 110001
0, 1100100, 1100111, 1101000, 1101011, 1101101, 1101110, 1110000, 1110011, 11101
01, 1110110, 1111001, 1111010, 1111100, 1111111]
[100000000, 100000011, 100000101, 100000110, 100001001, 100001010, 100001100, 10
0001111, 100010001, 100010010, 100010100, 100010111, 100011000, 100011011, 10001
1101, 100011110, 100100001, 100100010, 100100100, 100100111, 100101000, 10010101
1, 100101101, 100101110, 100110000, 100110011, 100110101, 100110110, 100111001,
100111010, 100111100, 100111111, 101000001, 101000010, 101000100, 101000111, 101
001000, 101001011, 101001101, 101001110, 101010000, 101010011, 101010101, 101010
110, 101011001, 101011010, 101011100, 101011111, 101100000, 101100011, 101100101
, 101100110, 101101001, 101101010, 101101100, 101101111, 101110001, 101110010, 1
01110100, 101110111, 101111000, 101111011, 101111101, 101111110, 110000001, 1100
00010, 110000100, 110000111, 110001000, 110001011, 110001101, 110001110, 1100100
00, 110010011, 110010101, 110010110, 110011001, 110011010, 110011100, 110011111,
 110100000, 110100011, 110100101, 110100110, 110101001, 110101010, 110101100, 11
0101111, 110110001, 110110010, 110110100, 110110111, 110111000, 110111011, 11011
1101, 110111110, 111000000, 111000011, 111000101, 111000110, 111001001, 11100101
0, 111001100, 111001111, 111010001, 111010010, 111010100, 111010111, 111011000,
111011011, 111011101, 111011110, 111100001, 111100010, 111100100, 111100111, 111
101000, 111101011, 111101101, 111101110, 111110000, 111110011, 111110101, 111110
110, 111111001, 111111010, 111111100, 111111111]