n進グレイコードの出力を行った
(参考:n進グレイコードの出力について
ので、その逆をやってみました。

# n進表記から n進グレイコードへ
def to_gray(n, k, str)
  str.rjust(k + 1, '0').split('').each_cons(2).map{|d| (d[1].to_i - d[0].to_i) % n}.join
end

# n進グレイコードから n進表記へ
def to_n_ary(n, k, str)
  ary0 = str.rjust(k, '0').split('')
  d = ary0[0].to_i
  n_ary = [d]
  (1..k - 1).each{|e|
    d = (d + ary0[e].to_i) % n
    n_ary << d
  }
  n_ary.join
end

n, k = 2, 3
ary = []
(0..n ** k - 1).each{|i| ary << to_n_ary(n, k, to_gray(n, k, i.to_s(n)))}
p ary # n進表記に戻っているはず

さて上記コードにおいて、
n > 10 のとき上手くいかないのですが、
 どのように修正すればよろしいでしょうか?
②to_gray(n, k, str) の逆操作を to_n_ary(n, k, str)
 で行なっているわけですが、
 to_n_ary(n, k, str)
 をもう少し短く書くにはどうすればよろしいでしょうか?