ナベアツ問題の改良

BCDカウンタをif文無しで実現するようにしました。

#!/bin/env ruby

j = 0
(1..1000).each do |i|
  a = j | 0x666666666
  a &= (a >> 1)
  a &= (a >> 2)
  a &= 0x11111111
  a |= (a << 1)
  a |= (a << 2)
  a =  ~a
  a |= (a << 4)
  a |= (a << 8)
  a |= (a << 16)
  a = ~a
  j += (a & 0x66666666)
  j += 1

  k = j
  k ^= 0xcccccccc
  k &= (k >> 1)
  k &= (k >> 2)
  k |= (k >> 16)
  k |= (k >> 8)
  k |= (k >> 4)
  k &= 1
  
  print i
  if k == 1 or i % 3 == 0 then
    print " aho"
  end
  if i % 5 == 0 then
    print " wan"
  end
  print "\n"
end

このプログラムを書いていて、Rubyにハーフキャリーが欲しいなと思いました。