def shift(char, offset) (((char.ord - 'A'.ord + offset) % 26) + 'A'.ord).chr end m = 'CGULKVIPFRGDOOCSJTRRVMORCQDZG' (0..25).each do |i| j = i puts m.chars.map { |c| d = shift(c, -j); j -= 1; d }.join end