2015年5月17日日曜日

150517

Ruby


n進グレイコード ↔ n進表記

n進グレイコード を作り、また元に戻すコード。
(http://ja.stackoverflow.com/questions/10263/%EF%BD%8E%E9%80%B2%E3%82%B0%E3%83%AC%E3%82%A4%E3%82%B3%E3%83%BC%E3%83%89%E3%81%8B%E3%82%89%EF%BD%8E%E9%80%B2%E8%A1%A8%E8%A8%98%E3%81%B8%E6%88%BB%E3%81%99%E3%81%AB%E3%81%AF)

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

# n進グレイコードから n進表記へ
def to_n_ary(n, k, str)
  a = 0
  str.rjust(k, '0').split('').map{|d| ((a += d.to_i(n)) % n).to_s(n)}.join
end

n, k = 11, 2

ary0 = []
(0..n ** k - 1).each{|i| ary0 << to_gray(n, k, i.to_s(n))}
p ary0

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

出力結果
["00", "01", "02", "03", "04", "05", "06", "07", "08", "09", "0a", "1a", "10", "
11", "12", "13", "14", "15", "16", "17", "18", "19", "29", "2a", "20", "21", "22
", "23", "24", "25", "26", "27", "28", "38", "39", "3a", "30", "31", "32", "33",
 "34", "35", "36", "37", "47", "48", "49", "4a", "40", "41", "42", "43", "44", "
45", "46", "56", "57", "58", "59", "5a", "50", "51", "52", "53", "54", "55", "65
", "66", "67", "68", "69", "6a", "60", "61", "62", "63", "64", "74", "75", "76",
 "77", "78", "79", "7a", "70", "71", "72", "73", "83", "84", "85", "86", "87", "
88", "89", "8a", "80", "81", "82", "92", "93", "94", "95", "96", "97", "98", "99
", "9a", "90", "91", "a1", "a2", "a3", "a4", "a5", "a6", "a7", "a8", "a9", "aa",
 "a0"]
["00", "01", "02", "03", "04", "05", "06", "07", "08", "09", "0a", "10", "11", "
12", "13", "14", "15", "16", "17", "18", "19", "1a", "20", "21", "22", "23", "24
", "25", "26", "27", "28", "29", "2a", "30", "31", "32", "33", "34", "35", "36",
 "37", "38", "39", "3a", "40", "41", "42", "43", "44", "45", "46", "47", "48", "
49", "4a", "50", "51", "52", "53", "54", "55", "56", "57", "58", "59", "5a", "60
", "61", "62", "63", "64", "65", "66", "67", "68", "69", "6a", "70", "71", "72",
 "73", "74", "75", "76", "77", "78", "79", "7a", "80", "81", "82", "83", "84", "
85", "86", "87", "88", "89", "8a", "90", "91", "92", "93", "94", "95", "96", "97
", "98", "99", "9a", "a0", "a1", "a2", "a3", "a4", "a5", "a6", "a7", "a8", "a9",
 "aa"]

0 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。