Virgil.GRiffith:: WebLog #1 Topic : 2008-04-15 21.23.40 virgil : Creating N-ary graycodes [Changes]   [Calendar]   [Search]   [Index]   
  [Back to weblog: VIRGIL.GRiffith]  

Creating N-ary graycodes

For a project I once needed to create N-ary gray codes. However, I didn't find any ready-made functions to do this. So I made one, so that all of you out there googling for binary graycode, ternary graycode, or even N-ary graycode, can find it. Can create graycodes in base 2 to 10.


The way it works is:

  1. Convert decimal number -> base-N
  2. Convert base-N -> N-ary gray code.

Download Python Code
  • dec2graycode.py

    If you don't know python, the important function is 'baseN2graycode2'. It returns the graycode given the Nary digit and the base of the Nary digit.

  • Example Output

    converting digits 0-100 to base 3, padding=5
    ----------------------------------------------------
    0         -> base3=00000         -> base3_graycode=00000          dist=0          graydist=0
    1         -> base3=00001         -> base3_graycode=00001          dist=1          graydist=1
    2         -> base3=00002         -> base3_graycode=00002          dist=1          graydist=1
    3         -> base3=00010         -> base3_graycode=00012          dist=2          graydist=1
    4         -> base3=00011         -> base3_graycode=00010          dist=1          graydist=1
    5         -> base3=00012         -> base3_graycode=00011          dist=1          graydist=1
    6         -> base3=00020         -> base3_graycode=00021          dist=2          graydist=1
    7         -> base3=00021         -> base3_graycode=00022          dist=1          graydist=1
    8         -> base3=00022         -> base3_graycode=00020          dist=1          graydist=1
    9         -> base3=00100         -> base3_graycode=00120          dist=3          graydist=1
    10         -> base3=00101         -> base3_graycode=00121          dist=1          graydist=1
    11         -> base3=00102         -> base3_graycode=00122          dist=1          graydist=1
    12         -> base3=00110         -> base3_graycode=00102          dist=2          graydist=1
    13         -> base3=00111         -> base3_graycode=00100          dist=1          graydist=1
    14         -> base3=00112         -> base3_graycode=00101          dist=1          graydist=1
    15         -> base3=00120         -> base3_graycode=00111          dist=2          graydist=1
    16         -> base3=00121         -> base3_graycode=00112          dist=1          graydist=1
    17         -> base3=00122         -> base3_graycode=00110          dist=1          graydist=1
    18         -> base3=00200         -> base3_graycode=00210          dist=3          graydist=1
    19         -> base3=00201         -> base3_graycode=00211          dist=1          graydist=1
    20         -> base3=00202         -> base3_graycode=00212          dist=1          graydist=1
    21         -> base3=00210         -> base3_graycode=00222          dist=2          graydist=1
    22         -> base3=00211         -> base3_graycode=00220          dist=1          graydist=1
    23         -> base3=00212         -> base3_graycode=00221          dist=1          graydist=1
    24         -> base3=00220         -> base3_graycode=00201          dist=2          graydist=1
    25         -> base3=00221         -> base3_graycode=00202          dist=1          graydist=1
    26         -> base3=00222         -> base3_graycode=00200          dist=1          graydist=1
    27         -> base3=01000         -> base3_graycode=01200          dist=4          graydist=1
    28         -> base3=01001         -> base3_graycode=01201          dist=1          graydist=1
    29         -> base3=01002         -> base3_graycode=01202          dist=1          graydist=1
    30         -> base3=01010         -> base3_graycode=01212          dist=2          graydist=1
    31         -> base3=01011         -> base3_graycode=01210          dist=1          graydist=1
    32         -> base3=01012         -> base3_graycode=01211          dist=1          graydist=1
    33         -> base3=01020         -> base3_graycode=01221          dist=2          graydist=1
    34         -> base3=01021         -> base3_graycode=01222          dist=1          graydist=1
    35         -> base3=01022         -> base3_graycode=01220          dist=1          graydist=1
    36         -> base3=01100         -> base3_graycode=01020          dist=3          graydist=1
    37         -> base3=01101         -> base3_graycode=01021          dist=1          graydist=1
    38         -> base3=01102         -> base3_graycode=01022          dist=1          graydist=1
    39         -> base3=01110         -> base3_graycode=01002          dist=2          graydist=1
    40         -> base3=01111         -> base3_graycode=01000          dist=1          graydist=1
    41         -> base3=01112         -> base3_graycode=01001          dist=1          graydist=1
    42         -> base3=01120         -> base3_graycode=01011          dist=2          graydist=1
    43         -> base3=01121         -> base3_graycode=01012          dist=1          graydist=1
    44         -> base3=01122         -> base3_graycode=01010          dist=1          graydist=1
    45         -> base3=01200         -> base3_graycode=01110          dist=3          graydist=1
    46         -> base3=01201         -> base3_graycode=01111          dist=1          graydist=1
    47         -> base3=01202         -> base3_graycode=01112          dist=1          graydist=1
    48         -> base3=01210         -> base3_graycode=01122          dist=2          graydist=1
    49         -> base3=01211         -> base3_graycode=01120          dist=1          graydist=1
    50         -> base3=01212         -> base3_graycode=01121          dist=1          graydist=1
    51         -> base3=01220         -> base3_graycode=01101          dist=2          graydist=1
    52         -> base3=01221         -> base3_graycode=01102          dist=1          graydist=1
    53         -> base3=01222         -> base3_graycode=01100          dist=1          graydist=1
    54         -> base3=02000         -> base3_graycode=02100          dist=4          graydist=1
    55         -> base3=02001         -> base3_graycode=02101          dist=1          graydist=1
    56         -> base3=02002         -> base3_graycode=02102          dist=1          graydist=1
    57         -> base3=02010         -> base3_graycode=02112          dist=2          graydist=1
    58         -> base3=02011         -> base3_graycode=02110          dist=1          graydist=1
    59         -> base3=02012         -> base3_graycode=02111          dist=1          graydist=1
    60         -> base3=02020         -> base3_graycode=02121          dist=2          graydist=1
    61         -> base3=02021         -> base3_graycode=02122          dist=1          graydist=1
    62         -> base3=02022         -> base3_graycode=02120          dist=1          graydist=1
    63         -> base3=02100         -> base3_graycode=02220          dist=3          graydist=1
    64         -> base3=02101         -> base3_graycode=02221          dist=1          graydist=1
    65         -> base3=02102         -> base3_graycode=02222          dist=1          graydist=1
    66         -> base3=02110         -> base3_graycode=02202          dist=2          graydist=1
    67         -> base3=02111         -> base3_graycode=02200          dist=1          graydist=1
    68         -> base3=02112         -> base3_graycode=02201          dist=1          graydist=1
    69         -> base3=02120         -> base3_graycode=02211          dist=2          graydist=1
    70         -> base3=02121         -> base3_graycode=02212          dist=1          graydist=1
    71         -> base3=02122         -> base3_graycode=02210          dist=1          graydist=1
    72         -> base3=02200         -> base3_graycode=02010          dist=3          graydist=1
    73         -> base3=02201         -> base3_graycode=02011          dist=1          graydist=1
    74         -> base3=02202         -> base3_graycode=02012          dist=1          graydist=1
    75         -> base3=02210         -> base3_graycode=02022          dist=2          graydist=1
    76         -> base3=02211         -> base3_graycode=02020          dist=1          graydist=1
    77         -> base3=02212         -> base3_graycode=02021          dist=1          graydist=1
    78         -> base3=02220         -> base3_graycode=02001          dist=2          graydist=1
    79         -> base3=02221         -> base3_graycode=02002          dist=1          graydist=1
    80         -> base3=02222         -> base3_graycode=02000          dist=1          graydist=1
    81         -> base3=10000         -> base3_graycode=12000          dist=5          graydist=1
    82         -> base3=10001         -> base3_graycode=12001          dist=1          graydist=1
    83         -> base3=10002         -> base3_graycode=12002          dist=1          graydist=1
    84         -> base3=10010         -> base3_graycode=12012          dist=2          graydist=1
    85         -> base3=10011         -> base3_graycode=12010          dist=1          graydist=1
    86         -> base3=10012         -> base3_graycode=12011          dist=1          graydist=1
    87         -> base3=10020         -> base3_graycode=12021          dist=2          graydist=1
    88         -> base3=10021         -> base3_graycode=12022          dist=1          graydist=1
    89         -> base3=10022         -> base3_graycode=12020          dist=1          graydist=1
    90         -> base3=10100         -> base3_graycode=12120          dist=3          graydist=1
    91         -> base3=10101         -> base3_graycode=12121          dist=1          graydist=1
    92         -> base3=10102         -> base3_graycode=12122          dist=1          graydist=1
    93         -> base3=10110         -> base3_graycode=12102          dist=2          graydist=1
    94         -> base3=10111         -> base3_graycode=12100          dist=1          graydist=1
    95         -> base3=10112         -> base3_graycode=12101          dist=1          graydist=1
    96         -> base3=10120         -> base3_graycode=12111          dist=2          graydist=1
    97         -> base3=10121         -> base3_graycode=12112          dist=1          graydist=1
    98         -> base3=10122         -> base3_graycode=12110          dist=1          graydist=1
    99         -> base3=10200         -> base3_graycode=12210          dist=3          graydist=1
    
    (last modified 2009-01-23)       [Login]
    (No back references.)