-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtmp
35 lines (34 loc) · 1.23 KB
/
tmp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
// given group sizes and specified included elememnts (list of integer greycode-ish locations)
let n = info.sizes.reduce((a,b)=>a*b);
let m = info.m - info.forced.length;
let forced_max = Math.max(...info.forced);
let subset_codes = [...combinations(range(0,n), m)];
// console.log('subset_codes', subset_codes);
let include_code_sets = subset_codes.filter(x => Math.min(...x) > forced_max); // include only sets with codes greater than or equal to the max of forced
// console.log('include_code_sets',include_code_sets);
let all_sets = ;
// console.log('all_sets',all_sets);
let forced_include = info.forced.map(x => all_sets[x]);
// console.log('forced_include',forced_include);
let include_sets = include_code_sets.map(x => new GeneralSet(x.map(y => all_sets[y])));
for (let gs of include_sets) {
gs.add_all(forced_include);
}
// console.log('include_sets', include_sets);
let found = false;
let set = null;
for (let gs of include_sets) {
// console.log(gs.to_string(), JSON.stringify(forced_include[0]));
let h2A = gs.hfold_restricted_sumset(2,info.sizes);
h2A.intersect(gs);
if (h2A.is_empty()) {
found = true;
set = gs;
break;
}
}
self.postMessage({
type:'complete',
found:found,
set:found ? set.to_string() : null
});