module Enumerable
def chunq
Enumerator.new do |y|
tmp = self.dup
while 0 < tmp.count
k = yield tmp.first
a = tmp.take_while {|x| k == yield(x)}
y << [k, a]
tmp = tmp.drop a.size
end
end
end
end
a = [1,1,2,2,3,3,3,1]
p a.chunk {|x| x}.map &:first
p a.chunq {|x| x}.map &:first
bW9kdWxlIEVudW1lcmFibGUKICBkZWYgY2h1bnEKICAgIEVudW1lcmF0b3IubmV3IGRvIHx5fAogICAgICB0bXAgPSBzZWxmLmR1cAogICAgICB3aGlsZSAwIDwgdG1wLmNvdW50CiAgICAgICAgayA9IHlpZWxkIHRtcC5maXJzdAogICAgICAgIGEgPSB0bXAudGFrZV93aGlsZSB7fHh8IGsgPT0geWllbGQoeCl9CiAgICAgICAgeSA8PCBbaywgYV0KICAgICAgICB0bXAgPSB0bXAuZHJvcCBhLnNpemUKICAgICAgZW5kCiAgICBlbmQKICBlbmQKZW5kCmEgPSBbMSwxLDIsMiwzLDMsMywxXQpwIGEuY2h1bmsge3x4fCB4fS5tYXAgJjpmaXJzdApwIGEuY2h1bnEge3x4fCB4fS5tYXAgJjpmaXJzdAo=