Convert integer to balanced dozenal
J, 74 72 characters

Here's my J implementation (f =. not included in character count):

f =. **}.^:(*@#*0={.)@([:((12-~[),0&gt;:@{.@]`[`]}])`,@.(6&gt;[)/&amp;.|.0,12&amp;#.^:_1)@|


And some tests (each result is boxed, and underscore means negative):

   NB. Integers [-10..10]:
   (&lt;@f"0)i:10
┌────┬────┬────┬────┬────┬──┬──┬──┬──┬──┬─┬─┬─┬─┬─┬─┬────┬────┬────┬────┬────┐
│_1 2│_1 3│_1 4│_1 5│_1 6│_5│_4│_3│_2│_1│0│1│2│3│4│5│1 _6│1 _5│1 _4│1 _3│1 _2│
└────┴────┴────┴────┴────┴──┴──┴──┴──┴──┴─┴─┴─┴─┴─┴─┴────┴────┴────┴────┴────┘
   NB. Some boundary values:
   (&lt;@f"0)215 216 217 71 72 73 
┌──────┬──────┬──────┬────┬──────┬──────┐
│1 6 _1│2 _6 0│2 _6 1│6 _1│1 _6 0│1 _6 1│
└──────┴──────┴──────┴────┴──────┴──────┘


Interestingly, the rules for 6 have no special place in the function. They work that way just by handling all digits >= 6 together and only working on positive numbers.

I made another version, which doesn't rely on #.^:_1, but it's longer:

**_2&amp;([:}.^:(0={.)+/\)@(((&lt;.@%&amp;12,(1,-&amp;12)`(0,])@.(6&gt;])@(12&amp;|))@{.,}.)^:(0~:{.)^:_)@(,&amp;0)@|