2008-10-01 22:58:53 -04:00
|
|
|
! Copyright (C) 2008 John Benediktsson
|
|
|
|
! See http://factorcode.org/license.txt for BSD license
|
|
|
|
|
|
|
|
USING: sequences kernel arrays vectors accessors assocs sorting math math.functions ;
|
|
|
|
|
|
|
|
IN: math.binpack
|
|
|
|
|
|
|
|
: (binpack) ( bins item -- )
|
|
|
|
swap dup [ [ second ] map sum ] map swap zip sort-keys values first push ;
|
|
|
|
|
|
|
|
: binpack ( assoc n -- bins )
|
|
|
|
[ sort-values reverse [ length ] keep swap ] dip
|
2008-10-01 23:05:08 -04:00
|
|
|
[ / ceiling ] keep swap <array> [ <vector> ] map
|
2008-10-01 22:58:53 -04:00
|
|
|
swap [ dupd (binpack) ] each ;
|
|
|
|
|
|
|
|
: binpack* ( items n -- bins )
|
|
|
|
[ dup zip ] dip binpack [ keys ] map ;
|
|
|
|
|
|
|
|
: binpack! ( items quot n -- bins )
|
|
|
|
[ dup ] 2dip [ map zip ] dip binpack [ keys ] map ;
|
|
|
|
|