1.11M Members

A J language problem

 
0
 

I am exploring the J language for scientific purposes and am running this Fibonacci number code. Does anyone know how to add up the values in each of the four columns?

   NB. Fibo101.ijs
   NB. Fibonacci numbers
   NB. using J language free from www.jsoftware.com

   NB. F creates a list of the first 64 Fibonacci numbers
   F =: ((, [: +/_2&{.)^:62)0 1x

   NB. Show the numbers arranged in 4 columns
   _4 [\ F  
            0             1             1             2
            3             5             8            13
           21            34            55            89
          144           233           377           610
          987          1597          2584          4181
         6765         10946         17711         28657
        46368         75025        121393        196418
       317811        514229        832040       1346269
      2178309       3524578       5702887       9227465
     14930352      24157817      39088169      63245986
    102334155     165580141     267914296     433494437
    701408733    1134903170    1836311903    2971215073
   4807526976    7778742049   12586269025   20365011074
  32951280099   53316291173   86267571272  139583862445
 225851433717  365435296162  591286729879  956722026041
1548008755920 2504730781961 4052739537881 6557470319842
 
2
 

You probably solved it by now. I also reminded little about J. I got this basically from imitation of documentation example.

   t =: _4 [\ F
   cs =: ,.@; +/
   cs t
┌───────────────────────────────────────────────────────┐
│            0             1             1             2│
│            3             5             8            13│
│           21            34            55            89│
│          144           233           377           610│
│          987          1597          2584          4181│
│         6765         10946         17711         28657│
│        46368         75025        121393        196418│
│       317811        514229        832040       1346269│
│      2178309       3524578       5702887       9227465│
│     14930352      24157817      39088169      63245986│
│    102334155     165580141     267914296     433494437│
│    701408733    1134903170    1836311903    2971215073│
│   4807526976    7778742049   12586269025   20365011074│
│  32951280099   53316291173   86267571272  139583862445│
│ 225851433717  365435296162  591286729879  956722026041│
│1548008755920 2504730781961 4052739537881 6557470319842│
├───────────────────────────────────────────────────────┤
│1812440220360 2932589879121 4745030099481 7677619978602│
└───────────────────────────────────────────────────────┘
 
0
 

Oh yes, J language is powerful but rather cryptic, so I want to salute pyTony for coming up with a solution!

I meant to give you this hint ...

   NB. exploring J lists
   NB. using J language free from www.jsoftware.com
   NB. see http://www.jsoftware.com/help/learning/contents.htm


   NB. create a list of integers 0 to 11
   mylist =: i. 12

   NB. Show the numbers arranged in 4 columns
   _4 [\ mylist 
0 1  2  3
4 5  6  7
8 9 10 11

   NB. sum up each column
   +/ _4 [\ mylist
12 15 18 21
 
0
 

Yes it is easy to get the sum added, but tough to get it boxed. I still did not unscramble the method used. Simple solution would of course be:

t,+/t
 
1
 

Thank y'all!
I studied up a little and came to these insights:

   NB. a simple 3 by 4 array ...
   array34 =: i. 3 4

   array34
0 1  2  3
4 5  6  7
8 9 10 11

   NB. this sums up each column
   +/ array34
12 15 18 21

   NB. link (;) box values original array34 (,.) and summed up (+/)
   box_vertical =: ,. @; +/
   box_horizontal =: ,. ; +/

   box_vertical array34
┌───────────┐
│0 1  2  3  │
│4 5  6  7  │
│8 9 10 11  │
├───────────┤
│12 15 18 21│
└───────────┘

   box_horizontal array34
┌─────────┬───────────┐
│0 1  2  3│12 15 18 21│
│4 5  6  7│           │
│8 9 10 11│           │
└─────────┴───────────┘
 
1
 

I got this

   data =: i. 3 4

   data ; (3 1 $ +/"1 data)
┌─────────┬──┐
│0 1  2  3│ 6│
│4 5  6  7│22│
│8 9 10 11│38│
└─────────┴──┘

 d =: ; 3 1 $ +/"1
   d data
┌─────────┬──┐
│0 1  2  3│ 6│
│4 5  6  7│22│
│8 9 10 11│38│
└─────────┴──┘
 
0
 

Nice J experiment Tony!

J is full of surprises ...

   NB. try this ...
   += i. 5
1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 1 0
0 0 0 0 1
 
0
 

Oh, I got it indexes are same for the diagonal, this seems to also do it:

= i. 5
1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 1 0
0 0 0 0 1

You could of course do tables with two arguments

   a =. i.5 
   a <:/ a
1 1 1 1 1
0 1 1 1 1
0 0 1 1 1
0 0 0 1 1
0 0 0 0 1
   a >:/ a
1 0 0 0 0
1 1 0 0 0
1 1 1 0 0
1 1 1 1 0
1 1 1 1 1
   a =/ a
1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 1 0
0 0 0 0 1
 
2
 

Laminating experiments

   (<'Mo Tu We Th Fr Sa Su')  ,:<5 7 $ (30 31,(1 + i. 30),1 2 3)
┌────────────────────┐
│Mo Tu We Th Fr Sa Su│
├────────────────────┤
│30 31  1  2  3  4  5│
│ 6  7  8  9 10 11 12│
│13 14 15 16 17 18 19│
│20 21 22 23 24 25 26│
│27 28 29 30  1  2  3│
└────────────────────┘
 
0
 

Breaking down the given fibonacci definition as my own:

   sum_2 =: , [: +/_2&{. NB. take last two, sum and append result at end
   fib =: 3 : '(sum_2 ^: (y - 1)) 0x 1x' NB. y + 1 values of fibonacci 
   fibn =: 13 : '{: fib y'
   fibn
┌──┬──┬───┐
│[:│{:│fib│
└──┴──┴───┘
   fibn 10
55
   fib 10
0 1 1 2 3 5 8 13 21 34 55
   fibn 10
55
   33 3 $ fib 100
                   0                    1                     1
                   2                    3                     5
                   8                   13                    21
                  34                   55                    89
                 144                  233                   377
                 610                  987                  1597
                2584                 4181                  6765
               10946                17711                 28657
               46368                75025                121393
              196418               317811                514229
              832040              1346269               2178309
             3524578              5702887               9227465
            14930352             24157817              39088169
            63245986            102334155             165580141
           267914296            433494437             701408733
          1134903170           1836311903            2971215073
          4807526976           7778742049           12586269025
         20365011074          32951280099           53316291173
         86267571272         139583862445          225851433717
        365435296162         591286729879          956722026041
       1548008755920        2504730781961         4052739537881
       6557470319842       10610209857723        17167680177565
      27777890035288       44945570212853        72723460248141
     117669030460994      190392490709135       308061521170129
     498454011879264      806515533049393      1304969544928657
    2111485077978050     3416454622906707      5527939700884757
    8944394323791464    14472334024676221     23416728348467685
   37889062373143906    61305790721611591     99194853094755497
  160500643816367088   259695496911122585    420196140727489673
  679891637638612258  1100087778366101931   1779979416004714189
 2880067194370816120  4660046610375530309   7540113804746346429
12200160415121876738 19740274219868223167  31940434634990099905
51680708854858323072 83621143489848422977 135301852344706746049
Isn't it about time forums rewarded their contributors?

Earn rewards points for helping others. Gain kudos. Cash out. Get better answers yourself.

It's as simple as contributing editorial or replying to discussions labeled or OP Kudos

You
This article has been dead for over six months: Start a new discussion instead
Post:
Start New Discussion
Tags Related to this Article