Shrink a number string
Ruby 1.9+, 73 characters

I see the no-regex rule as silly and arbitrary, so here's a spiteful regex based solution:

gets
($.+=1;puts$_.gsub!(/(.)(.)/){$2*$1.to_i})until~/^(22)*[12]?$/
p~-$.


Test run:

$ ruby 21.rb &lt;&lt;&lt; 122122122121212212
211222111111222
11222111222
122111222
2111222
111222
1222
222
7


The last line is the number of steps.

Edit: Regex restriction has been removed by Vereos.