One issue is this: i.@<.&.(3&^.)
Notice that 3%^. is the right verb for the under conjunction. There's no simple way of passing the 3 in as an argument to that verb. Does that make sense? Thanks, -- Raul On Sun, Dec 22, 2013 at 10:28 PM, Devon McCormick <[email protected]> wrote: > Hi Everybody - > > I was recently thinking of a possible use for Gray codes that work in a > base greater than 2. Searching my mail on this, I was led back to a > discussion from 2006 that Dan Bron had kicked off by offering the > generation and conversion of Gray codes as a puzzle. > > R. E. Boss, among others, took this and ran with it, resulting in this set > of solutions: > http://www.jsoftware.com/jwiki/RE%20Boss/Performance%20Records/Gray%20code . > > Alas, these were all for binary Gray codes but I want one that works in > base 3, so I looked at the 0th-place entry on Mr. Boss's list (wrapped line) > : > > ([:>[:(({. * #@]) ,@:+ ($ (,: |.)))&.>/ (<0 1) ,~ 2: <@^ ] ((($~ *)@- > +:@{:) , |.@]) i.@<.&.(2&^.)) > > And thought, do I really have to fully understand this to convert it from > base 2 to base 3? It turns out, I don't. Simply by replacing the 2s with > 3s (and the "0 1", which appeared to be "i.2", with "0 1 2"), I came up > with this: > > ([:>[:(({. * #@]) ,@:+ ($ (,: |.)))&.>/ (<0 1 2) ,~ 3: <@^ ] ((($~ *)@- > +:@{:) , |.@]) i.@<.&.(3&^.)) > > Applying this to an argument to see what I get: > > ([:>[:(({. * #@]) ,@:+ ($ (,: |.)))&.>/ (<0 1 2) ,~ 3: <@^ ] ((($~ *)@- > +:@{:) , |.@]) i.@<.&.(3&^.)) 3 > 0 1 2 5 4 3 6 7 8 17 16 15 12 13 14 11 10 9 18 19 20 23 22 21 24 25 26 > > I get a promising result as it appears to be a permutation of i.3^3; this > is the solution in "decimal" form. Converting this to base 3 confirms my > suspicion that this actually worked: > > 3 3 3#:([:>[:(({. * #@]) ,@:+ ($ (,: |.)))&.>/ (<0 1 2) ,~ 3: <@^ ] > ((($~ *)@- +:@{:) , |.@]) i.@<.&.(3&^.)) 3 > 0 0 0 > 0 0 1 > 0 0 2 > 0 1 2 > 0 1 1 > 0 1 0 > 0 2 0 > 0 2 1 > 0 2 2 > 1 2 2 > 1 2 1 > 1 2 0 > 1 1 0 > 1 1 1 > 1 1 2 > 1 0 2 > 1 0 1 > 1 0 0 > 2 0 0 > 2 0 1 > 2 0 2 > 2 1 2 > 2 1 1 > 2 1 0 > 2 2 0 > 2 2 1 > 2 2 2 > > Rather amazing, don't you think? > > However, in addition to my refusal to understand the code before I modified > it, I'm faced with my inability to grasp why I can't simply generalize > this into a dyadic verb. I know enough to be suspicious that the "2:" or > "3:" is problematic, and when I try my usual crutch of "13 :", it confirms > that there is some kind of bump in the road from explicit to tacit: > > 13 : '([:>[:(({. * #@]) ,@:+ ($ (,: |.)))&.>/ (<i.x) ,~ x <@^ ] ((($~ > *)@- +:@{:) , |.@]) i.@<.&.(x&^.)) y' > 4 : '([:>[:(({. * #@]) ,@:+ ($ (,: |.)))&.>/ (<i.x) ,~ x <@^ ] ((($~ *)@- > +:@{:) , |.@]) i.@<.&.(x&^.)) y' > > Though this answer is functionally correct, it's not tacit: > > 3 (4 : '([:>[:(({. * #@]) ,@:+ ($ (,: |.)))&.>/ (<i.x) ,~ x <@^ ] ((($~ > *)@- +:@{:) , |.@]) i.@<.&.(x&^.)) y') 3 > 0 1 2 5 4 3 6 7 8 17 16 15 12 13 14 11 10 9 18 19 20 23 22 21 24 25 26 > > Can anyone explain to me why "13 :" fails, or how one might retain the > tacit structure with the conversion to the dyadic version? > > Also, there's actually a flaw in my working solution above as a better > sequence would wrap from the last to the first as a Gray code too. Though > this is an additional constraint not in the original puzzle, it is a useful > one. For example, a good sequence for two base-3 digits would be this: > > 00 > 01 > 02 > 22 > 20 > 21 > 11 > 12 > 10 > > In this case, the last "10" Gray-codes to "00", the initial one. > > Any ideas on any of these questions? > > Thanks, > > Devon > -- > Devon McCormick, CFA > ---------------------------------------------------------------------- > For information about J forums see http://www.jsoftware.com/forums.htm ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm
