: frac ( fraction -- count comparison ) >fraction [ mod ] keep 2dup / 1/2 <=> [ [ drop ] [ swap - ] [ 2drop 0 ] comparator-case ] keep ; : comparator-case ( comparator quot1 quot2 quot3 -- quot ) 3array swap { { +lt+ [ first ] } { +gt+ [ second ] } { +eq+ [ third ] } } case call ; inline : distribute ( amount n -- seq ) tuck / [ round '[ _ ] replicate 0 ] keep frac [ [ 1+ ] ] [ [ 1- ] ] [ [ ] ] comparator-case [ pick ] dip change-each ;