Ticket #148: dfa.patch
| File dfa.patch, 65.9 kB (added by draqo, 19 months ago) |
|---|
-
doc/patterns.texi
diff -N -r -u -X .ignore gnugo-copy/doc/patterns.texi gnugo/doc/patterns.texi
old new 1397 1397 @file{patterns.h}) by a standalone program @file{mkpat.c}, and the resulting 1398 1398 @file{.c} files are compiled and linked into the main GNU Go executable. 1399 1399 1400 IMPORTANT: After any change in patterns, which uses DFA pattern matching, one 1401 should optimize pattern databases, in which the changes was made. This is done 1402 by running a part of @file{optimize} script in @file{patterns} directory. Run 1403 only parts of this script, which refers to desired databases, because it takes 1404 a very long time to execute. 1405 1400 1406 Each pattern is compiled to a header, and a sequence of elements, 1401 1407 which are (notionally) checked sequentially at every position and 1402 1408 orientation of the board. These elements are relative to the pattern -
engine/matchpat.c
diff -N -r -u -X .ignore gnugo-copy/engine/matchpat.c gnugo/engine/matchpat.c
old new 649 649 static int 650 650 scan_for_patterns(dfa_rt_t *pdfa, int l, int *dfa_pos, int *pat_list) 651 651 { 652 int delta;653 const state_rt_t *state = pdfa->states + 1; /* initial state */652 int act = 1; /* initial state */ 653 const state_rt_t *state, *start = pdfa->states; 654 654 int row = 0; /* initial row */ 655 655 int id = 0; /* position in id_list */ 656 int att; 656 657 657 658 for (;;) { 659 state = start + act; 660 658 661 /* collect patterns indexes */ 659 intatt = state->att;662 att = state->att; 660 663 while (att != 0) { 661 664 pat_list[id++] = pdfa->indexes[att].val; 662 665 att = pdfa->indexes[att].next; 663 666 } 664 667 665 668 /* go to next state */ 666 delta= state->next[*(dfa_pos + spiral[row++][l])];667 if (! delta)669 act = state->next[*(dfa_pos + spiral[row++][l])]; 670 if (!act) 668 671 return id; /* error state */ 669 670 state += delta;671 672 } 672 673 } 673 674 -
engine/owl.c
diff -N -r -u -X .ignore gnugo-copy/engine/owl.c gnugo/engine/owl.c
old new 5079 5079 signed char component[MAX_CUTS]; 5080 5080 signed char component2[BOARDMAX]; 5081 5081 int component_size[MAX_CUTS]; 5082 int component_libs[MAX_CUTS]; 5082 5083 int num_components; 5083 5084 int biggest_component = -1; 5084 5085 struct connection_data *conn_data; … … 5103 5104 */ 5104 5105 memset(component2, -1, BOARDMAX); 5105 5106 memset(component_size, 0, sizeof(int) * num_components); 5107 memset(component_libs, 0, sizeof(int) * num_components); 5106 5108 conn_data = malloc(sizeof(struct connection_data) * num_components); 5107 5109 for (c_id = 0; c_id < num_components; c_id++) { 5108 5110 signed char this_goal[BOARDMAX]; … … 5138 5140 if (closest_component != -1) { 5139 5141 mark_string(pos, component2, closest_component); 5140 5142 component_size[closest_component] += countstones(pos); 5143 component_libs[closest_component] += countlib(pos); 5141 5144 } 5142 5145 } 5143 5146 5144 /* Now find the biggest_component. */ 5147 /* Now find the biggest_component. If some components have the same 5148 * size, one with the fewest number of liberties is chosen. 5149 */ 5145 5150 { 5146 5151 int biggest_size = 0; 5152 int fewest_libs = (size_t)-1; 5147 5153 for (c_id = 0; c_id < num_components; c_id++) 5148 5154 if (component_size[c_id] > biggest_size) { 5149 5155 biggest_size = component_size[c_id]; 5156 fewest_libs = component_libs[c_id]; 5150 5157 biggest_component = c_id; 5151 5158 } 5159 else if (component_size[c_id] == biggest_size 5160 && component_libs[c_id] < fewest_libs) { 5161 fewest_libs = component_libs[c_id]; 5162 biggest_component = c_id; 5163 } 5152 5164 gg_assert(biggest_component != -1); 5153 5165 } 5154 5166 -
patterns/Makefile.am
diff -N -r -u -X .ignore gnugo-copy/patterns/Makefile.am gnugo/patterns/Makefile.am
old new 3 3 4 4 DSP = dfa.dsp patterns.dsp joseki.dsp mkeyes.dsp mkpat.dsp fuseki.dsp 5 5 DTR = aa_attackpats.dtr owl_attackpats.dtr owl_defendpats.dtr \ 6 owl_vital_apats.dtr 6 owl_vital_apats.dtr attack.dtr defense.dtr conn.dtr \ 7 barriers.dtr endgame.dtr handicap.dtr influence.dtr \ 8 patterns.dtr 7 9 8 10 EXTRA_DIST = $(DSP)\ 9 11 $(DTR)\ … … 121 123 takamoku.db : $(srcdir)/takamoku.sgf joseki$(EXEEXT) 122 124 ./joseki JT $(srcdir)/takamoku.sgf >takamoku.db 123 125 124 patterns.c : $(srcdir)/patterns.db $(srcdir)/patterns2.db mkpat$(EXEEXT)125 ./mkpat -b pat -i $(srcdir)/patterns.db -i$(srcdir)/patterns2.db\126 - o patterns.c126 patterns.c : $(srcdir)/patterns.db $(srcdir)/patterns2.db $(srcdir)/patterns.dtr mkpat$(EXEEXT) 127 ./mkpat $(DFAFLAGS) -b -t $(srcdir)/patterns.dtr pat \ 128 -i $(srcdir)/patterns.db -i$(srcdir)/patterns2.db -o patterns.c 127 129 128 130 josekidb.c : $(DBBUILT) mkpat$(EXEEXT) 129 131 ./mkpat -C joseki $(DBBUILT_INPUT) -o josekidb.c 130 132 131 apatterns.c : $(srcdir)/attack.db mkpat$(EXEEXT) 132 ./mkpat -X attpat -i $(srcdir)/attack.db -o apatterns.c 133 134 dpatterns.c : $(srcdir)/defense.db mkpat$(EXEEXT) 135 ./mkpat defpat -i $(srcdir)/defense.db -o dpatterns.c 136 137 conn.c : $(srcdir)/conn.db mkpat$(EXEEXT) 138 ./mkpat -c conn -i $(srcdir)/conn.db -o conn.c 139 140 endgame.c : $(srcdir)/endgame.db mkpat$(EXEEXT) 141 ./mkpat -b endpat -i $(srcdir)/endgame.db -o endgame.c 133 apatterns.c : $(srcdir)/attack.db $(srcdir)/attack.dtr mkpat$(EXEEXT) 134 ./mkpat $(DFAFLAGS) -X -t $(srcdir)/attack.dtr attpat \ 135 -i $(srcdir)/attack.db -o apatterns.c 136 137 dpatterns.c : $(srcdir)/defense.db $(srcdir)/defense.dtr mkpat$(EXEEXT) 138 ./mkpat $(DFAFLAGS) -t $(srcdir)/defense.dtr defpat \ 139 -i $(srcdir)/defense.db -o dpatterns.c 140 141 conn.c : $(srcdir)/conn.db $(srcdir)/conn.dtr mkpat$(EXEEXT) 142 ./mkpat $(DFAFLAGS) -c -t $(srcdir)/conn.dtr conn \ 143 -i $(srcdir)/conn.db -o conn.c 144 145 endgame.c : $(srcdir)/endgame.db $(srcdir)/endgame.dtr mkpat$(EXEEXT) 146 ./mkpat $(DFAFLAGS) -b -t $(srcdir)/endgame.dtr endpat \ 147 -i $(srcdir)/endgame.db -o endgame.c 142 148 143 149 eyes.c: $(srcdir)/eyes.db mkeyes$(EXEEXT) 144 150 ./mkeyes < $(srcdir)/eyes.db >eyes.c 145 151 146 influence.c : $(srcdir)/influence.db mkpat$(EXEEXT) 147 ./mkpat -c influencepat -i $(srcdir)/influence.db -o influence.c 148 149 barriers.c : $(srcdir)/barriers.db mkpat$(EXEEXT) 150 ./mkpat -c -b barrierspat -i $(srcdir)/barriers.db -o barriers.c 152 influence.c : $(srcdir)/influence.db $(srcdir)/influence.dtr mkpat$(EXEEXT) 153 ./mkpat $(DFAFLAGS) -c -t $(srcdir)/influence.dtr influencepat \ 154 -i $(srcdir)/influence.db -o influence.c 155 156 barriers.c : $(srcdir)/barriers.db $(srcdir)/barriers.dtr mkpat$(EXEEXT) 157 ./mkpat $(DFAFLAGS) -c -b -t $(srcdir)/barriers.dtr barrierspat \ 158 -i $(srcdir)/barriers.db -o barriers.c 151 159 152 160 aa_attackpat.c : $(srcdir)/aa_attackpats.db $(srcdir)/aa_attackpats.dtr mkpat$(EXEEXT) 153 161 ./mkpat $(DFAFLAGS) -b -t $(srcdir)/aa_attackpats.dtr aa_attackpat \ … … 169 177 -i $(srcdir)/owl_defendpats.db -o owl_defendpat.c 170 178 171 179 fusekipat.c : $(srcdir)/fuseki.db mkpat$(EXEEXT) 172 ./mkpat -b fusekipat -i $(srcdir)/fuseki.db -o fusekipat.c180 ./mkpat -b -m fusekipat -i $(srcdir)/fuseki.db -o fusekipat.c 173 181 174 182 fuseki9.c : $(srcdir)/fuseki9.dbz uncompress_fuseki$(EXEEXT) 175 183 ./uncompress_fuseki 9 $(srcdir)/fuseki9.dbz c >fuseki9.c … … 180 188 fuseki19.c : $(srcdir)/fuseki19.dbz uncompress_fuseki$(EXEEXT) 181 189 ./uncompress_fuseki 19 $(srcdir)/fuseki19.dbz c >fuseki19.c 182 190 183 handipat.c : $(srcdir)/handicap.db mkpat$(EXEEXT) 184 ./mkpat -b handipat -i $(srcdir)/handicap.db -o handipat.c 191 handipat.c : $(srcdir)/handicap.db $(srcdir)/handicap.dtr mkpat$(EXEEXT) 192 ./mkpat $(DFAFLAGS) -b -t $(srcdir)/handicap.dtr handipat \ 193 -i $(srcdir)/handicap.db -o handipat.c 185 194 186 195 187 196 ETAGS_ARGS = --language none --regex '/^Pattern[ \t]+[a-zA-Z0-9]+/' $(DB_TO_TAG)\ -
patterns/Makefile.in
diff -N -r -u -X .ignore gnugo-copy/patterns/Makefile.in gnugo/patterns/Makefile.in
old new 80 80 81 81 DSP = dfa.dsp patterns.dsp joseki.dsp mkeyes.dsp mkpat.dsp fuseki.dsp 82 82 DTR = aa_attackpats.dtr owl_attackpats.dtr owl_defendpats.dtr \ 83 owl_vital_apats.dtr 83 owl_vital_apats.dtr attack.dtr defense.dtr conn.dtr \ 84 barriers.dtr endgame.dtr handicap.dtr influence.dtr \ 85 patterns.dtr 84 86 85 87 86 88 EXTRA_DIST = $(DSP)\ … … 526 528 takamoku.db : $(srcdir)/takamoku.sgf joseki$(EXEEXT) 527 529 ./joseki JT $(srcdir)/takamoku.sgf >takamoku.db 528 530 529 patterns.c : $(srcdir)/patterns.db $(srcdir)/patterns2.db mkpat$(EXEEXT)530 ./mkpat -b pat -i $(srcdir)/patterns.db -i$(srcdir)/patterns2.db\531 - o patterns.c531 patterns.c : $(srcdir)/patterns.db $(srcdir)/patterns2.db $(srcdir)/patterns.dtr mkpat$(EXEEXT) 532 ./mkpat $(DFAFLAGS) -b -t $(srcdir)/patterns.dtr pat \ 533 -i $(srcdir)/patterns.db -i$(srcdir)/patterns2.db -o patterns.c 532 534 533 535 josekidb.c : $(DBBUILT) mkpat$(EXEEXT) 534 536 ./mkpat -C joseki $(DBBUILT_INPUT) -o josekidb.c 535 537 536 apatterns.c : $(srcdir)/attack.db mkpat$(EXEEXT) 537 ./mkpat -X attpat -i $(srcdir)/attack.db -o apatterns.c 538 539 dpatterns.c : $(srcdir)/defense.db mkpat$(EXEEXT) 540 ./mkpat defpat -i $(srcdir)/defense.db -o dpatterns.c 541 542 conn.c : $(srcdir)/conn.db mkpat$(EXEEXT) 543 ./mkpat -c conn -i $(srcdir)/conn.db -o conn.c 544 545 endgame.c : $(srcdir)/endgame.db mkpat$(EXEEXT) 546 ./mkpat -b endpat -i $(srcdir)/endgame.db -o endgame.c 538 apatterns.c : $(srcdir)/attack.db $(srcdir)/attack.dtr mkpat$(EXEEXT) 539 ./mkpat $(DFAFLAGS) -X -t $(srcdir)/attack.dtr attpat \ 540 -i $(srcdir)/attack.db -o apatterns.c 541 542 dpatterns.c : $(srcdir)/defense.db $(srcdir)/defense.dtr mkpat$(EXEEXT) 543 ./mkpat $(DFAFLAGS) -t $(srcdir)/defense.dtr defpat \ 544 -i $(srcdir)/defense.db -o dpatterns.c 545 546 conn.c : $(srcdir)/conn.db $(srcdir)/conn.dtr mkpat$(EXEEXT) 547 ./mkpat $(DFAFLAGS) -c -t $(srcdir)/conn.dtr conn \ 548 -i $(srcdir)/conn.db -o conn.c 549 550 endgame.c : $(srcdir)/endgame.db $(srcdir)/endgame.dtr mkpat$(EXEEXT) 551 ./mkpat $(DFAFLAGS) -b -t $(srcdir)/endgame.dtr endpat \ 552 -i $(srcdir)/endgame.db -o endgame.c 547 553 548 554 eyes.c: $(srcdir)/eyes.db mkeyes$(EXEEXT) 549 555 ./mkeyes < $(srcdir)/eyes.db >eyes.c 550 556 551 influence.c : $(srcdir)/influence.db mkpat$(EXEEXT) 552 ./mkpat -c influencepat -i $(srcdir)/influence.db -o influence.c 553 554 barriers.c : $(srcdir)/barriers.db mkpat$(EXEEXT) 555 ./mkpat -c -b barrierspat -i $(srcdir)/barriers.db -o barriers.c 557 influence.c : $(srcdir)/influence.db $(srcdir)/influence.dtr mkpat$(EXEEXT) 558 ./mkpat $(DFAFLAGS) -c -t $(srcdir)/influence.dtr influencepat \ 559 -i $(srcdir)/influence.db -o influence.c 560 561 barriers.c : $(srcdir)/barriers.db $(srcdir)/barriers.dtr mkpat$(EXEEXT) 562 ./mkpat $(DFAFLAGS) -c -b -t $(srcdir)/barriers.dtr barrierspat \ 563 -i $(srcdir)/barriers.db -o barriers.c 556 564 557 565 aa_attackpat.c : $(srcdir)/aa_attackpats.db $(srcdir)/aa_attackpats.dtr mkpat$(EXEEXT) 558 566 ./mkpat $(DFAFLAGS) -b -t $(srcdir)/aa_attackpats.dtr aa_attackpat \ … … 574 582 -i $(srcdir)/owl_defendpats.db -o owl_defendpat.c 575 583 576 584 fusekipat.c : $(srcdir)/fuseki.db mkpat$(EXEEXT) 577 ./mkpat -b fusekipat -i $(srcdir)/fuseki.db -o fusekipat.c585 ./mkpat -b -m fusekipat -i $(srcdir)/fuseki.db -o fusekipat.c 578 586 579 587 fuseki9.c : $(srcdir)/fuseki9.dbz uncompress_fuseki$(EXEEXT) 580 588 ./uncompress_fuseki 9 $(srcdir)/fuseki9.dbz c >fuseki9.c … … 585 593 fuseki19.c : $(srcdir)/fuseki19.dbz uncompress_fuseki$(EXEEXT) 586 594 ./uncompress_fuseki 19 $(srcdir)/fuseki19.dbz c >fuseki19.c 587 595 588 handipat.c : $(srcdir)/handicap.db mkpat$(EXEEXT) 589 ./mkpat -b handipat -i $(srcdir)/handicap.db -o handipat.c 596 handipat.c : $(srcdir)/handicap.db $(srcdir)/handicap.dtr mkpat$(EXEEXT) 597 ./mkpat $(DFAFLAGS) -b -t $(srcdir)/handicap.dtr handipat \ 598 -i $(srcdir)/handicap.db -o handipat.c 590 599 # Tell versions [3.59,3.63) of GNU make to not export all variables. 591 600 # Otherwise a system limit (for SysV at least) may be exceeded. 592 601 .NOEXPORT: -
patterns/aa_attackpats.dtr
diff -N -r -u -X .ignore gnugo-copy/patterns/aa_attackpats.dtr gnugo/patterns/aa_attackpats.dtr
old new 1 A1 11 A1 0 2 2 A2 3 3 3 A3 0 4 4 A4 0 5 5 A5 1 6 6 A6 1 7 7 A7 1 8 A8 1 8 A7b 4 9 A7c 1 10 A8 5 9 11 A9 0 10 12 A10 2 11 13 A11 4 … … 16 18 A16 6 17 19 A17 0 18 20 A18 6 19 A19 120 A20 621 A19 6 22 A20 4 21 23 A21 0 22 24 A22 1 23 A23 5 25 A23 2 26 A24 1 27 A25 0 28 A26 1 -
patterns/attack.dtr
diff -N -r -u -X .ignore gnugo-copy/patterns/attack.dtr gnugo/patterns/attack.dtr
old new 1 Attack1 0 2 Attack2 0 3 Attack4 2 4 Attack5 0 5 Attack6 6 6 Attack10 0 7 Attack11 6 8 Attack13 1 9 Attack14 2 10 Attack15 0 11 Attack16 5 12 Attack17 0 13 Attack18 6 14 Attack19 4 -
patterns/barriers.dtr
diff -N -r -u -X .ignore gnugo-copy/patterns/barriers.dtr gnugo/patterns/barriers.dtr
old new 1 Barrier1 1 2 Barrier1b 1 3 Barrier2 1 4 Barrier3 1 5 Barrier4a 3 6 Barrier4b 4 7 Barrier5 0 8 Barrier6 7 9 Barrier6b 0 10 Barrier7 0 11 Barrier8 1 12 Barrier9 1 13 Barrier10 0 14 Barrier11 0 15 Barrier12 6 16 Barrier13 0 17 Barrier14 0 18 Barrier15 6 19 Barrier16 5 20 Barrier16b 6 21 Barrier17 6 22 Barrier18 6 23 Barrier19 0 24 Barrier20 0 25 Barrier21 1 26 Barrier22 0 27 Barrier22a 6 28 Barrier22b 0 29 Barrier23 5 30 Barrier24 0 31 Barrier25 6 32 Barrier26 5 33 Barrier27 0 34 Barrier28 0 35 Barrier29 7 36 Barrier30 0 37 Barrier31 0 38 Barrier32 7 39 Barrier33 0 40 Barrier34 7 41 Barrier34b 0 42 Barrier35 0 43 Barrier36 0 44 Barrier37 7 45 Barrier38 7 46 Barrier39 6 47 Barrier40 0 48 Barrier41a 3 49 Barrier41b 3 50 Barrier42 7 51 Barrier43 6 52 Barrier44 0 53 Barrier45 0 54 Barrier46 6 55 Barrier47 0 56 Barrier48 0 57 Barrier49 0 58 Barrier50 0 59 Barrier51 5 60 Barrier52 7 61 Barrier53 7 62 Barrier54 0 63 Barrier55 6 64 Barrier56 6 65 Barrier56b 0 66 Barrier57 6 67 Barrier58 4 68 Barrier59 1 69 Barrier60a 3 70 Barrier60b 3 71 Barrier61 0 72 Barrier62 6 73 Barrier63 0 74 Barrier64 0 75 Barrier65 6 76 Barrier66 7 77 Barrier67 0 78 Intrusion1 7 79 Intrusion1a 7 80 Intrusion1b 3 81 Intrusion1c 3 82 Intrusion1d 3 83 Intrusion2 3 84 Intrusion3 7 85 Intrusion4 0 86 Intrusion5a 7 87 Intrusion5b 0 88 Intrusion6 7 89 Intrusion7b 6 90 Intrusion8a 6 91 Intrusion8b 1 92 Intrusion9 1 93 Intrusion10 7 94 Intrusion11 0 95 Intrusion12a 0 96 Intrusion12b 0 97 Intrusion13 7 98 Intrusion14 0 99 Intrusion15 7 100 Intrusion16 0 101 Intrusion17 6 102 Intrusion18 1 103 Intrusion19 6 104 Intrusion20 0 105 Intrusion21 0 106 Intrusion21b 6 107 Intrusion22 0 108 Intrusion23 0 109 Intrusion24 0 110 Intrusion25 7 111 Intrusion26 7 112 Intrusion27 6 113 Intrusion28 0 114 Intrusion29 6 115 Intrusion30 7 116 Intrusion30a 0 117 Intrusion31 7 118 Intrusion32 7 119 Intrusion33 5 120 Intrusion34 0 121 Intrusion35 7 122 Intrusion36 1 123 Intrusion37 1 124 Intrusion38 7 125 Intrusion39 1 126 Intrusion40 5 127 Intrusion41 5 128 Intrusion42 7 129 Intrusion43 4 130 Intrusion44a 3 131 Intrusion44b 4 132 Intrusion45 7 133 Intrusion46 0 134 Intrusion47 6 135 Intrusion48 5 136 Intrusion49 0 137 Intrusion50 6 138 Intrusion51a 0 139 Intrusion51b 0 140 Intrusion52 6 141 Intrusion53 1 142 Intrusion54 4 143 Intrusion55 7 144 Intrusion56 7 145 Intrusion57 3 146 Intrusion58 7 147 Intrusion59 2 148 Intrusion60 7 149 Intrusion61 3 150 Intrusion62 0 151 Intrusion63 0 152 Nonterritory1 0 153 Nonterritory1b 6 154 Nonterritory1c 6 155 Nonterritory2 4 156 Nonterritory3 4 157 Nonterritory4 7 158 Nonterritory5 7 159 Nonterritory6 7 160 Nonterritory7 0 161 Nonterritory7b 0 162 Nonterritory7c 7 163 Nonterritory8 0 164 Nonterritory8b 0 165 Nonterritory9 0 166 Nonterritory10 5 167 Nonterritory11 7 168 Nonterritory12 1 169 Nonterritory13 0 170 Nonterritory14 5 171 Nonterritory15 2 172 Nonterritory16 7 173 Nonterritory17 6 174 Nonterritory17b 0 175 Nonterritory18a 0 176 Nonterritory18b 0 177 Nonterritory19 3 178 Nonterritory20 7 179 Nonterritory21 3 180 Nonterritory22 3 181 Nonterritory23 1 182 Nonterritory24 0 183 Nonterritory25 6 184 Nonterritory26 0 185 Nonterritory27 1 186 Nonterritory28 0 187 Nonterritory29 0 188 Nonterritory30 0 189 Nonterritory31 7 190 Nonterritory32 1 191 Nonterritory33 0 192 Nonterritory34 0 193 Nonterritory35 3 194 Nonterritory36 0 195 Nonterritory37 1 196 Nonterritory38 6 197 Nonterritory39 1 198 Nonterritory40 3 199 Nonterritory41 5 200 Nonterritory42 6 201 Nonterritory43 0 202 Nonterritory44 7 203 Nonterritory45 2 204 Nonterritory46 6 205 Nonterritory47 1 206 Nonterritory48 6 207 Nonterritory49 0 208 Nonterritory50 6 209 Nonterritory51 0 210 Nonterritory52 6 211 Nonterritory53 1 212 Nonterritory54 3 213 Nonterritory55 7 214 Nonterritory56 6 215 Nonterritory57 3 216 Nonterritory58 3 217 Nonterritory59 0 218 Nonterritory60 6 -
patterns/conn.db
diff -N -r -u -X .ignore gnugo-copy/patterns/conn.db gnugo/patterns/conn.db
old new 161 161 XO 162 162 O* 163 163 164 :\,B ,cutstone2_helper164 :\,B 165 165 166 A O167 O*166 Ac 167 b* 168 168 169 ;attack(A) 169 ;attack(A) && cutstone2_helper(A,b,c) 170 170 171 171 172 172 Pattern CB11b -
patterns/conn.dtr
diff -N -r -u -X .ignore gnugo-copy/patterns/conn.dtr gnugo/patterns/conn.dtr
old new 1 CB1b 0 2 CB2b 0 3 CB3b 2 4 CB3c 1 5 CB7 1 6 CB11b 3 7 CB15b 0 8 CB16 2 9 CB17 0 10 CB18 1 11 EC1 0 12 EC1b 0 13 EC3a 0 14 CC101 1 15 CC103 1 16 CC104 6 17 CC105 1 18 CC106 2 19 CC107 6 20 CC108 2 21 CC109 5 22 CC401 0 23 CC402 0 24 CC501 1 25 CC502 1 26 CC502b 1 27 CC503 0 28 CC504 1 29 CC505 1 30 CC506 0 31 CC506b 6 32 CC507 3 33 CC508 0 34 CC509 3 35 CC511 1 -
patterns/defense.dtr
diff -N -r -u -X .ignore gnugo-copy/patterns/defense.dtr gnugo/patterns/defense.dtr
old new 1 Def1 1 2 Def2 0 3 Def4 0 4 Def5 0 5 Def6 0 6 Def9 5 7 Def10 7 8 Def12 6 9 Def16 4 10 Def17 4 11 Def21 2 12 Def25 6 13 Def26 3 14 Def28 1 15 Def29 0 16 Def39 0 17 Def44 0 18 Def45 3 19 Def49 3 20 Def50 0 21 Def52 4 22 Def55 6 23 Def56 0 24 Def57 3 25 Def58 0 26 Def59 0 27 Def60 0 28 Def61 7 29 Def62 7 30 Def63 1 31 Def68 0 32 Def69 5 33 Def70 7 -
patterns/dfa.c
diff -N -r -u -X .ignore gnugo-copy/patterns/dfa.c gnugo/patterns/dfa.c
old new 40 40 #include <unistd.h> 41 41 #endif 42 42 43 #if TIME_WITH_SYS_TIME 44 # include <sys/time.h> 45 # include <time.h> 46 #else 47 # if HAVE_SYS_TIME_H 48 # include <sys/time.h> 49 # else 50 # include <time.h> 51 # endif 52 #endif 53 43 54 44 55 /********************* 45 56 * Public data * … … 418 429 exit(EXIT_FAILURE); 419 430 } 420 431 421 assert(dfa_minmax_delta(pdfa, -1, 1) > -32768);422 if (dfa_minmax_delta(pdfa, -1, 0) > 32768) {423 fprintf(of, "#error too many states");424 fprintf(stderr, "Error: The dfa states are too disperse. Can't fit delta into a short.\n");425 exit(EXIT_FAILURE);426 }427 428 432 if (pdfa->last_index + 1 > 65535) { 429 433 fprintf(of, "#error too many states"); 430 434 fprintf(stderr, "Error: Too many index entries. Can't fit delta into a short.\n"); … … 441 445 fprintf(of, "{{"); 442 446 for (j = 0; j < 4; j++) { 443 447 int n = pdfa->states[i].next[j]; 444 assert((n == 0) || (abs(n - i) < 32768));445 fprintf(of, "%d", n ? n - i : 0);448 assert((n >= 0) && (n <= 65535)); 449 fprintf(of, "%d", n); 446 450 if (j != 3) 447 451 fprintf(of, ","); 448 452 } … … 781 785 } 782 786 783 787 784 /*785 * Returns max or min jump distance from state to next[next_index] for786 * all states. If next_index < 0, then max/min for all for states.787 */788 789 int790 dfa_minmax_delta(dfa_t *pdfa, int next_index, int isMin)791 {792 793 int ret, i, j;794 assert(next_index <= 3);795 796 if (isMin)797 ret = 99999;798 else799 ret = -1;800 801 for (i = 0; i <= pdfa->last_state; i++) {802 for (j = 0; j < 4; j++) {803 if (j == next_index || next_index < 0) {804 int next = pdfa->states[i].next[j];805 if (!next)806 continue;807 if (isMin) {808 if (ret > next - i)809 ret = next - i;810 }811 else {812 if (ret < next - i)813 ret = next - i;814 }815 }816 }817 }818 819 return ret;820 }821 822 788 #define DFA_ALIGN 2 823 789 824 790 /* … … 955 921 dfa_finalize(dfa_t *pdfa) 956 922 { 957 923 int j; 958 int next_bin = aux_count; 959 int last_bin = aux_count + DFA_BINS - 1; 924 int next_bin; 925 int last_bin; 926 aux_count += DFA_BINS; /* To avoid negative values of aux_count. */ 927 next_bin = aux_count; 928 last_bin = aux_count + DFA_BINS - 1; 960 929 while (next_bin + 1 != last_bin) { 961 930 for (j = aux_count + 1; j <= last_bin; j += 2) { 962 931 if (j+1 == next_bin) … … 1198 1167 if (j == pat->minj) 1199 1168 borders &= ~WEST_EDGE; 1200 1169 1201 assert(m + i < DFA_MAX_BOARD * 3 && m + i < DFA_MAX_BOARD * 3);1170 assert(m + i < DFA_MAX_BOARD * 4 && n + j < DFA_MAX_BOARD * 4); 1202 1171 str[k] = work_space[m + i][n +
