weights = [1..10, 1..20, 1..20, 1..40].combinations().grep { it.sum() == 40 }.collect { it.sort() }.unique() println (weights.grep { it.inject([0], { a, v -> a + a*.plus(v) + a*.plus(-v) }).containsAll ( 1..40 )})