RangeもNumericのようにstepで飛ばし飛ばし実行できます。
eachで回してブロック内部でif判定しなくても良いんです。
最大値は範囲で指定しているので不要です。
(:a..:z).step(2){|i| p i} #>> :a #>> :c #>> ... #>> :u #>> :w #>> :y
ひっくり返したい場合は配列にするなり文字列にするなりしてからreverseです
(:a..:z).step(2).to_a.reverse #>> [:y, :w, :u, :s, :q, :o, :m, :k, :i, :g, :e, :c, :a]