@@ -44,10 +44,17 @@ void fillworker::init(const puzdef &pd, int d_) {
44
44
delete looktmp ;
45
45
looktmp = 0 ;
46
46
}
47
- looktmp = new allocsetval (pd, pd.solved ) ;
48
- while (posns.size () <= 100 || (int )posns.size () <= d_+1 )
49
- posns.push_back (allocsetval (pd, pd.solved )) ;
50
- pd.assignpos (posns[0 ], pd.solved ) ;
47
+ if (quarter < 2 ) {
48
+ looktmp = new allocsetval (pd, pd.solved ) ;
49
+ while (posns.size () <= 100 || (int )posns.size () <= d_+2 )
50
+ posns.push_back (allocsetval (pd, pd.solved )) ;
51
+ pd.assignpos (posns[0 ], pd.solved ) ;
52
+ } else {
53
+ looktmp = new allocsetval (pd, pd.id ) ;
54
+ while (posns.size () <= 100 || (int )posns.size () <= d_+2 )
55
+ posns.push_back (allocsetval (pd, pd.id )) ;
56
+ pd.assignpos (posns[0 ], pd.id ) ;
57
+ }
51
58
d = d_ ;
52
59
for (int i=0 ; i<MEMSHARDS; i++)
53
60
fillbufs[i].nchunks = 0 ;
@@ -118,11 +125,21 @@ ull fillworker::filltable(const puzdef &pd, prunetable &pt, int togo,
118
125
ull r = 0 ;
119
126
if (togo == 0 ) {
120
127
ull h ;
121
- if ((int )pd.rotgroup .size () > 1 ) {
122
- slowmodm2 (pd, posns[sp], *looktmp) ;
123
- h = pt.indexhash (pd.totsize , *looktmp) ;
128
+ if (quarter >= 2 ) {
129
+ pd.mulinv (pd.solved , posns[sp], posns[sp+1 ]) ;
130
+ if ((int )pd.rotgroup .size () > 1 ) {
131
+ slowmodm2 (pd, posns[sp+1 ], *looktmp) ;
132
+ h = pt.indexhash (pd.totsize , *looktmp) ;
133
+ } else {
134
+ h = pt.indexhash (pd.totsize , posns[sp+1 ]) ;
135
+ }
124
136
} else {
125
- h = pt.indexhash (pd.totsize , posns[sp]) ;
137
+ if ((int )pd.rotgroup .size () > 1 ) {
138
+ slowmodm2 (pd, posns[sp], *looktmp) ;
139
+ h = pt.indexhash (pd.totsize , *looktmp) ;
140
+ } else {
141
+ h = pt.indexhash (pd.totsize , posns[sp]) ;
142
+ }
126
143
}
127
144
int shard = (h >> pt.shardshift ) ;
128
145
fillbuf &fb = fillbufs[shard] ;
@@ -363,6 +380,8 @@ void prunetable::addsumdat(const puzdef &pd, string &filename) const {
363
380
}
364
381
string prunetable::makefilename (const puzdef &pd) const {
365
382
string filename = " tws5-" + inputbasename + " -" ;
383
+ if (quarter > 1 )
384
+ filename += " q" ;
366
385
if (quarter)
367
386
filename += " q-" ;
368
387
ull bytes = size >> 2 ;
0 commit comments