animals =: 'bird';'cow';'cow';'dog';'cow';'cow';'cow';'bird';'dog';'cat';'dog';'pig';'dog';'bird';'pig'

ids =: 1;2;3;4;5;6;7;8;9;10;11;12;13;14;15

t =. animals,:ids

(~.@[ ,. ]/.)/ t

+----+--+--+--+--+-+

|bird|1 |8 |14|  | |

+----+--+--+--+--+-+

|cow |2 |3 |5 |6 |7|

+----+--+--+--+--+-+

|dog |4 |9 |11|13| |

+----+--+--+--+--+-+

|cat |10|  |  |  | |

+----+--+--+--+--+-+

|pig |12|15|  |  | |

+----+--+--+--+--+-+

(~.@[ ,. <@;/.)/ t

+----+---------+

|bird|1 8 14   |

+----+---------+

|cow |2 3 5 6 7|

+----+---------+

|dog |4 9 11 13|

+----+---------+

|cat |10       |

+----+---------+

|pig |12 15    |

+----+---------+


Henry Rich

On 3/4/2016 4:46 AM, 'Jon Hough' via Programming wrote:
I guess the input needs to be

animals ,: ids

so...

ai =: animals ,: ids

f2 =: (1&{) f (0&{) NB. f same as previous answer.

f2 ai

I guess that's not really "one expression" now, so

f2 =:  1&{ (((1 ,~ #) $ ])@:~.@:] ,. ]/.~) 0&{


--------------------------------------------
On Fri, 3/4/16, 'Jon Hough' via Programming <[email protected]> wrote:

  Subject: Re: [Jprogramming] J Challenge
  To: [email protected]
  Date: Friday, March 4, 2016, 6:34 PM
I don't think for a minute that this
  will be the most terse or most elegant but this is what I
  got:
animals =:
  
'bird';'cow';'cow';'dog';'cow';'cow';'cow';'bird';'dog';'cat';'dog';'pig';'dog';'bird';'pig'
ids =: 1;2;3;4;5;6;7;8;9;10;11;12;13;14;15 f =: (((1,~ #) $])@:~.@:]) ,. (]/.)~ ids f animals --------------------------------------------
  On Fri, 3/4/16, Skip Cave <[email protected]>
  wrote:
Subject: [Jprogramming] J Challenge
   To: "[email protected]"
  <[email protected]>
   Date: Friday, March 4, 2016, 6:01 PM
​Well, the format of that last post
   was a bit messy. Here's a second try:​
   The
    animal control officer wants to keep track of the
  animals
   in a city.
   The officer tags all the animals with a serial number.
   He keeps a list of all the animals he has tagged, along
  with
   each serial
   number.
list​
   ​┌────┬───┬───┬───┬───┬───┬───┬────┬───┬───┬───┬───┬───┬────┬───┐
   │bird│cow│cow│dog│cow│cow│cow│bird│dog│cat│dog│pig│dog│bird│pig│
   ├────┼───┼───┼───┼───┼───┼───┼────┼───┼───┼───┼───┼───┼────┼───┤
   │1   │2  │3  │4
   │5  │6  │7
   │8   │9  │10 │11 │12 │13
   │14  │15 │
   └────┴───┴───┴───┴───┴───┴───┴────┴───┴───┴───┴───┴───┴────┴───┘​
The officer now wants to make a second list showing each
   type
   of animal along with all the serial numbers tagged for
  each
   animal.
list2 ​
   ┌────┬──┬──┬──┬──┬─┐
   │bird│1 │8 │14│  │ │
   ├────┼──┼──┼──┼──┼─┤
   │cow │2 │3 │5 │6 │7│
   ├────┼──┼──┼──┼──┼─┤
   │dog │4 │9 │11│13│ │
   ├────┼──┼──┼──┼──┼─┤
   │cat │10│  │  │  │ │
   ├────┼──┼──┼──┼──┼─┤
   │pig │12│15│  │  │ │
   └────┴──┴──┴──┴──┴─┘
​What is the shortest J expression to generate list2?
   ​ (Tacit would be nice)​
   ​
   Skip Cave
   ----------------------------------------------------------------------
   For information about J forums see http://www.jsoftware.com/forums.htm
  ----------------------------------------------------------------------
  For information about J forums see http://www.jsoftware.com/forums.htm
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to