JPhrases/Grids

From J Wiki
Jump to: navigation, search

8B. Grids

m0=: i. First y non-negative integers
m1=: Ai=: >:@i. Augmented integers (begin at 1)
m2=: Ei=: i.@>: Extended integers (0 to y inclusive)
m3=: Si=: -Ei@+: Symmetric integers (-y to y inclusive)
m4=: grid=: +`(*i.)/ General grid (2{y steps from 0{y by 1{y)
m5=: cb=: ] {. 1 _1"_ $~ >: - 2&| Checkerboard. Try box cb 2 3 4 5
m6=: box=: <"2 Box rank 2 cells (for readable display)
m7=: CB=: *cb@$ Alternate signs of atoms of y.
m8=: bcb=: _1&=@cb Boolean checkerboard
m9=: {. 0 1"_ $~ ] + 2&|@>: "
m10=: _1: ^ m9 Checkerboard
a11=: syft=: (/~)(@Si) Symmetric function tables
v12=: WRAP=: wrap : (wrap@]^:[) Wrap (monad) and repeated wrap (dyad)
m13=: wrap=: RL@(,.(next+i.@#))^:4 Wrap argument with successive integers
m14=: RL=: |.@|: Roll table to left
m15=: next=: >:@(>./)@, Next integer after largest in table

The first four phrases give commonly useful integer lists, and the fifth allows specification of the beginning value, the step size, and the number of steps. For example:

   (m0 ; Ai ; Ei ; Si) 3
+-----+-----+-------+----------------+
|0 1 2|1 2 3|0 1 2 3|3 2 1 0 _1 _2 _3|
+-----+-----+-------+----------------+

   (*/~ ; !/~) Si 3
+-------------------+-----------------+
| 9  6  3 0 _3 _6 _9|1 0 0 0 _1 _4 _10|
| 6  4  2 0 _2 _4 _6|3 1 0 0  1  3   6|
| 3  2  1 0 _1 _2 _3|3 2 1 0 _1 _2  _3|
| 0  0  0 0  0  0  0|1 1 1 1  1  1   1|
|_3 _2 _1 0  1  2  3|0 0 0 0  1  0   0|
|_6 _4 _2 0  2  4  6|0 0 0 0 _1  1   0|
|_9 _6 _3 0  3  6  9|0 0 0 0  1 _2   1|
+-------------------+-----------------+

   grid 3 4 5
3 7 11 15 19

Phrases 5-10 give various checkerboard patterns. Note the alternation along each axis:

   box cb 2 3 4 5
+--------------+--------------+--------------+
| 1 _1  1 _1  1|_1  1 _1  1 _1| 1 _1  1 _1  1|
|_1  1 _1  1 _1| 1 _1  1 _1  1|_1  1 _1  1 _1|
| 1 _1  1 _1  1|_1  1 _1  1 _1| 1 _1  1 _1  1|
|_1  1 _1  1 _1| 1 _1  1 _1  1|_1  1 _1  1 _1|
+--------------+--------------+--------------+
|_1  1 _1  1 _1| 1 _1  1 _1  1|_1  1 _1  1 _1|
| 1 _1  1 _1  1|_1  1 _1  1 _1| 1 _1  1 _1  1|
|_1  1 _1  1 _1| 1 _1  1 _1  1|_1  1 _1  1 _1|
| 1 _1  1 _1  1|_1  1 _1  1 _1| 1 _1  1 _1  1|
+--------------+--------------+--------------+
   CB i. 3 4
 0 _1  2  _3
_4  5 _6   7
 8 _9 10 _11

Phrase 11 is an adverb that produces function tables on symmetric arguments:

   (+syft ; *syft ; !syft) 3
+-------------------+-------------------+-----------------+
|6  5  4  3  2  1  0| 9  6  3 0 _3 _6 _9|1 0 0 0 _1 _4 _10|
|5  4  3  2  1  0 _1| 6  4  2 0 _2 _4 _6|3 1 0 0  1  3   6|
|4  3  2  1  0 _1 _2| 3  2  1 0 _1 _2 _3|3 2 1 0 _1 _2  _3|
|3  2  1  0 _1 _2 _3| 0  0  0 0  0  0  0|1 1 1 1  1  1   1|
|2  1  0 _1 _2 _3 _4|_3 _2 _1 0  1  2  3|0 0 0 0  1  0   0|
|1  0 _1 _2 _3 _4 _5|_6 _4 _2 0  2  4  6|0 0 0 0 _1  1   0|
|0 _1 _2 _3 _4 _5 _6|_9 _6 _3 0  3  6  9|0 0 0 0  1 _2   1|
+-------------------+-------------------+-----------------+

The final phrases produce spirals by wrapping a table (or by default a list or scalar) in a blanket of successive integers:

   ]t=: i. 2 3
0 1 2
3 4 5

   (RL t) ; (WRAP 0) ; (3 WRAP 0)
+---+-----+--------------------+
|2 5|6 7 8|42 43 44 45 46 47 48|
|1 4|5 0 1|41 20 21 22 23 24 25|
|0 3|4 3 2|40 19  6  7  8  9 26|
|   |     |39 18  5  0  1 10 27|
|   |     |38 17  4  3  2 11 28|
|   |     |37 16 15 14 13 12 29|
|   |     |36 35 34 33 32 31 30|
+---+-----+--------------------+