1.11M Members

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
``````

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│
└───────────────────────────────────────────────────────┘
``````

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
``````

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
``````

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│           │
└─────────┴───────────┘
``````

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│
└─────────┴──┘
``````

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
``````

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
``````

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│
└────────────────────┘
``````

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