nvec ← p ##.nicediv q                       ⍝ ⍵ similar integers with sum ⍺.
From Nicolas Delcros, this function distributes integer [p] nicely into [q] sim-
ilarly-sized partitions.
For example,  in a GUI application, we might want to draw a grid of 5 rows and 7
columns, which fits exactly in a rectangle of 211 by 437 pixels:
    211 437 nicediv¨ 5 8
┌──────────────┬───────────────────────┐
│42 42 43 42 42│55 54 55 55 54 55 54 55│
└──────────────┴───────────────────────┘
Then:
    'MyGrid' ⎕WS 'CellHeights' 'CellWidths' {⍺ ⍵}¨ 211 437 nicediv¨ 5 8
Technical note:
Phil Last provides this alternative coding:
    nicecdiv←{¯2-/0,⌊0.5++\⍵⍴⍺÷⍵}
and  adds:  "(¯2-/0,) is,  I believe,  the proper inverse of (+\) so we could do
(+\⍣¯1) instead!
    nicediv←{+\⍣¯1⌊0.5++\⍵⍴⍺÷⍵}
which is neater but slower by about 25%".
Examples:
    100 nicediv 7           ⍝ 7 similar integers, which sum to 100.
14 15 14 14 14 15 14
    ↑ (0 to 10)nicediv¨5    ⍝ 5-item rows sum to 0 .. 10
0 0 0 0 0
0 0 1 0 0
0 1 0 1 0
1 0 1 0 1
1 1 0 1 1
1 1 1 1 1
1 1 2 1 1
1 2 1 2 1
2 1 2 1 2
2 2 1 2 2
2 2 2 2 2
    hist←{' ⎕'⌷⍨⊂⎕io+⊖⍉⍵∘.≥⍳⌈/⍵}        ⍝ simple histogram.
    stacked←{⊖⎕fmt⊖∘hist¨⍺ nicediv¨⍵}   ⍝ ⍺ bricks stacked nicely into ⍵ columns
    100 stacked 12 23 39                ⍝ 100 bricks in various column-widths.
  ⎕  ⎕  ⎕  ⎕
 ⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕
 ⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕
 ⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕
 ⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕   ⎕  ⎕  ⎕  ⎕ ⎕  ⎕  ⎕  ⎕
 ⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕  ⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕
 ⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕  ⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕  ⎕ ⎕ ⎕ ⎕⎕ ⎕ ⎕ ⎕ ⎕⎕ ⎕ ⎕ ⎕⎕ ⎕ ⎕ ⎕ ⎕⎕ ⎕ ⎕ ⎕
 ⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕  ⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕  ⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕
 ⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕  ⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕  ⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕⎕
    12 stacked 3 to 9                   ⍝ various stackings of 12 bricks.
 ⎕⎕⎕
 ⎕⎕⎕  ⎕⎕⎕⎕   ⎕ ⎕
 ⎕⎕⎕  ⎕⎕⎕⎕  ⎕⎕⎕⎕⎕  ⎕⎕⎕⎕⎕⎕  ⎕ ⎕⎕⎕ ⎕  ⎕ ⎕ ⎕ ⎕    ⎕  ⎕  ⎕
 ⎕⎕⎕  ⎕⎕⎕⎕  ⎕⎕⎕⎕⎕  ⎕⎕⎕⎕⎕⎕  ⎕⎕⎕⎕⎕⎕⎕  ⎕⎕⎕⎕⎕⎕⎕⎕  ⎕⎕⎕⎕⎕⎕⎕⎕⎕
Back to: contents
Back to: Workspaces