/frames 8 def /rows 8 def /NN 420 def /MM 90 def /N NN def /M NN def /NN 301 def /MM 5 def /N NN def /M NN def /Ndots NN def %include /u/rs/book3/pslib/tools.ps %include /u/rs/book3/pslib/dots.ps /dy 3 def /dx 3 def /TOP 321 def /OFF1 5 def /OFF2 22 def /OFF3 22 def /OFF4 32 def /OFF5 22 def /OFF6 22 def /myscale {dy mul TOP exch sub exch dx mul exch} def /stacksize { /calls calls 1 add def count 2 sub 2 div calls myscale lineto gsave currentpoint newpath 1 0 360 arc fill grestore } def /drawinit { 0 translate .5 setlinewidth 0 setcolor 0 0 myscale moveto /calls 0 def } def /drawlines { currentpoint stroke exch pop 0 exch moveto 0 0 myscale lineto 0 setlinewidth stroke } def /swap {/ii exch def /jj exch def A ii get /t exch def A ii A jj get put A jj t put } def /partition { /r exch def /l exch def /v A r get def /j r def /i l 1 sub def { { /j j 1 sub def j 0 lt { exit } if A j get v le { exit } if } loop { /i i 1 add def A i get v ge { exit } if } loop j i lt { exit } if j i swap } loop r i swap i } def /quicksort { stacksize 2 copy partition 1 sub dup 2 add 3 -1 roll % l i-1 i+1 r % 4 2 roll 4 copy exch sub 3 1 roll exch sub gt { 4 2 roll} if % smaller on top 2 copy exch sub MM gt { quicksort } { pop pop } ifelse 2 copy exch sub MM gt { quicksort } { pop pop } ifelse } def /compareswap {/jj exch def /ii exch def A ii get A jj get gt { jj ii swap} if } def /hsort { /inc exch def inc 1 N 1 sub { /k exch def k inc neg inc { dup inc sub compareswap } for } for } def /partition3 { /r exch def /l exch def /mm r l sub 2 idiv l add def l mm compareswap l r compareswap mm r compareswap mm r 1 sub swap /v A r 1 sub get def /j r 1 sub def /i l def { { /j j 1 sub def A j get v le { exit } if } loop { /i i 1 add def A i get v ge { exit } if } loop j i lt { exit } if j i swap } loop r 1 sub i swap i } def /quicksort3 { stacksize 2 copy partition3 1 sub dup 2 add 3 -1 roll % l i-1 i+1 r 4 copy exch sub 3 1 roll exch sub gt { 4 2 roll} if % smaller on top 2 copy exch sub MM gt { quicksort } { pop pop } ifelse 2 copy exch sub MM gt { quicksort } { pop pop } ifelse } def /N 420 def OFF1 drawinit N randomperm /A exch def /A [0 A aload pop ] def /LL 1 def /RR N 1 sub def LL RR quicksort drawlines OFF2 drawinit N randomperm /A exch def /A [0 A aload pop ] def /LL 1 def /RR N 1 sub def LL RR quicksort drawlines OFF3 drawinit 3 testarray /A exch def /A [0 A aload pop ] def /LL 1 def /RR N 1 sub def LL RR quicksort drawlines