[Jprogramming] guidelines for writing J code that is less-dependent on data layout

Björn Helgason gosinn at gmail.com
Fri Jul 28 02:52:53 HKT 2006


I tried this and got

out of memory: script
|   h=.    ,/h,"_ 1"2(([:~:&1(2&{))"2 h)#^:_1"1"1 _>:tap 4
|[-28] c:\j601\temp\17.ijs

2006/7/19, Sashikanth Chandrasekaran <sashikanth.chandrasekaran at yahoo.com>:
>
> Assume that there are N entities each of which has M
> attributes and I save the values as an N*M array. If I
> want to work on the first attribute, it is tempting to
> use {."1 . Similarly, if I want to work on the 3rd
> attribute it is tempting to use 2{"1 and so on. But
> this makes the program dependent on the data layout -
> if I add one more attribute in the middle of the row,
> the program breaks.
>
> Are there any best practices/style guidelines to make
> the code we write less dependent on data layout
> without sacrificing performance? I presume that
> "hiding" data inside a class and using trivial get/put
> functions to access the data is not the J style.
>
> To use a concrete example, I coded a simple solution
> for the so-called Einstein riddle
> (http://www.naute.com/puzzles/puzzle13.phtml) below.
> As you can see the code is completely tied to the
> location of the possible values in the grid - i.e. the
> code will break if I switch 'Red' and 'Green' or
> switch two rows etc. What is the recommended method
> for making it less fragile? Thx, -sashi.
>
>
> NB. Brute-force solution for Einstein's Riddle
> grid =. ".;._2 (0 : 0)
>   'Brit';'Sweede';'Dane';'German';'Norwegian'
>   'Red';'Green';'White';'Yellow';'Blue'
>   'Dogs';'Birds';'Cats';'Horses';'Fish'
>   'Tea';'Coffee';'Milk';'Beer';'Water'
>   'Pall Mall';'Dunhill';'Blends';'Blue
> Master';'Prince'
> )
>
> NB. Table of permutations, copied from J vocabulary
> page for A..
> tap =. i.@! A. i.
>
> NB. The Brit lives in a red house.
> h =. (#~ (([: i.&0 {:) = [: i.&0 {.)"2) ,/ ,:"1"1 _~
> tap 5
>
> NB. The Swede keeps dogs as pets.
> h =. ,/ h ,"_ 1"2 (([: ~:&1 {.)"2 h) #^:_1"1"1 _ >:
> tap 4
>
> NB. The Dane drinks tea.
> h =. ,/ h ,"_ 1"2 (([: ~:&2 {.)"2 h) #^:_1"1"1 _ >:
> tap 4
>
> NB. The Green house is next to, and on the left of the
> White house.
> h =. (#~ ([: (1: = i.&2 - i.&1) 1&{)"2) h
>
> NB. The owner of the Green house drinks coffee.
> h =. (#~ (([: i.&1 {:) = [: i.&1 (1&{))"2) h
>
> NB. The person who smokes Pall Mall rears birds.
> h =. ,/ h ,"_ 1"2 (([: ~:&1 (2&{))"2 h) #^:_1"1"1 _ >:
> tap 4
>
> NB. The owner of the Yellow house smokes Dunhill.
> h =. (#~ (([: i.&1 {:) = [: i.&3 (1&{))"2) h
>
> NB. The man living in the centre house drinks milk.
> h =. (#~ (2: = (<3 2)&{)"2) h
>
> NB. The Norwegian lives in the first house.
> h =. (#~ (4: = (<0 0)&{)"2) h
>
> NB. The man who smokes Blends lives next to the one
> who keeps cats.
> h =. (#~ ([: e.&_1 1 ([: i.&2 (2&{)) - [: i.&2 {:)"2)
> h
>
> NB. The man who keeps horses lives next to the man who
> smokes Dunhill.
> h =. (#~ ([: e.&_1 1 ([: i.&1 {:) - [: i.&3 (2&{))"2)
> h
>
> NB. The man who smokes Blue Master drinks beer.
> h =. (#~ (([: i.&3 (3&{)) = [: i.&3 {:)"2) h
>
> NB. The German smokes Prince.
> h =. (#~ (([: i.&4 {:) = [: i.&3 {.)"2) h
>
> NB. The Norwegian lives next to the blue house.
> h =. (#~ ([: e.&_1 1 ([: i.&4 (1&{)) - [: i.&4 {.)"2)
> h
>
> NB. The man who smokes Blends has a neighbour who
> drinks water.
> h =. (#~ ([: e.&_1 1 ([: i.&4 (3&{)) - [: i.&2 {:)"2)
> h
>
> NB. display the valid combinations
> h {"1"_1 _ grid
>
>
>
>
>
>
> __________________________________________________
> Do You Yahoo!?
> Tired of spam?  Yahoo! Mail has the best spam protection around
> http://mail.yahoo.com
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
>



-- 
Björn Helgason, Verkfræðingur
Fugl&Fiskur ehf, Þerneyjarsund 23,
Skype: gosiminn, gsm: +3546985532
801 Grímsnes ,t-póst: gosinn at gmail.com
Landslags og skrúðgarðagerð, gröfuþjónusta
http://groups.google.com/group/J-Programming


Tæknikunnátta höndlar hið flókna, sköpunargáfa er meistari einfaldleikans

góður kennari getur stigið á tær án þess að glansinn fari af skónum
          /|_      .-----------------------------------.
         ,'  .\  /  | Með léttri lund verður        |
     ,--'    _,'   | Dagurinn í dag                     |
    /       /       | Enn betri en gærdagurinn  |
   (   -.  |        `-----------------------------------'
   |     ) |        (\_ _/)
  (`-.  '--.)       (='.'=)
   `. )----'        (")_(")


More information about the Programming mailing list