def _split(s)
s.chars.inject([]) {|a, c| a.empty? || a.last.first != c ? a << [c] : a.last << c; a}
end
def f9009(s)
_split(s).map {|a| a.size < 3 ? a.size.to_s + a.first : a.first}.join
end
p (0..10).inject(['0']) {|acc, _| acc << f9009(acc.last)}
ZGVmIF9zcGxpdChzKQogIHMuY2hhcnMuaW5qZWN0KFtdKSB7fGEsIGN8IGEuZW1wdHk/IHx8IGEubGFzdC5maXJzdCAhPSBjID8gYSA8PCBbY10gOiBhLmxhc3QgPDwgYzsgYX0KZW5kCmRlZiBmOTAwOShzKQogIF9zcGxpdChzKS5tYXAge3xhfCBhLnNpemUgPCAzID8gYS5zaXplLnRvX3MgKyBhLmZpcnN0IDogYS5maXJzdH0uam9pbgplbmQKcCAoMC4uMTApLmluamVjdChbJzAnXSkge3xhY2MsIF98IGFjYyA8PCBmOTAwOShhY2MubGFzdCl9Cg==
["0", "10", "1110", "110", "2110", "122110", "11222110", "2122110", "1211222110", "11122122110", "12211222110", "11222122110"]