Ticket #148: dfa.patch

File dfa.patch, 65.9 kB (added by draqo, 19 months ago)

Usage of DFA in all patterns and few errors corrected + small upgrade in owl_test_cuts

  • doc/patterns.texi

    diff -N -r -u -X .ignore gnugo-copy/doc/patterns.texi gnugo/doc/patterns.texi
    old new  
    13971397@file{patterns.h}) by a standalone program @file{mkpat.c}, and the resulting  
    13981398@file{.c} files are compiled and linked into the main GNU Go executable. 
    13991399 
     1400IMPORTANT: After any change in patterns, which uses DFA pattern matching, one 
     1401should optimize pattern databases, in which the changes was made. This is done 
     1402by running a part of @file{optimize} script in @file{patterns} directory. Run 
     1403only parts of this script, which refers to desired databases, because it takes 
     1404a very long time to execute. 
     1405 
    14001406Each pattern is compiled to a header, and a sequence of elements, 
    14011407which are (notionally) checked sequentially at every position and 
    14021408orientation 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  
    649649static int 
    650650scan_for_patterns(dfa_rt_t *pdfa, int l, int *dfa_pos, int *pat_list) 
    651651{ 
    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; 
    654654  int row = 0; /* initial row */ 
    655655  int id = 0; /* position in id_list */ 
     656  int att; 
    656657 
    657658  for (;;) { 
     659    state = start + act; 
     660 
    658661    /* collect patterns indexes */ 
    659     int att = state->att; 
     662    att = state->att; 
    660663    while (att != 0) { 
    661664      pat_list[id++] = pdfa->indexes[att].val; 
    662665      att = pdfa->indexes[att].next; 
    663666    } 
    664667 
    665668    /* 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) 
    668671      return id; /* error state */ 
    669  
    670     state += delta; 
    671672  } 
    672673} 
    673674 
  • engine/owl.c

    diff -N -r -u -X .ignore gnugo-copy/engine/owl.c gnugo/engine/owl.c
    old new  
    50795079    signed char component[MAX_CUTS]; 
    50805080    signed char component2[BOARDMAX]; 
    50815081    int component_size[MAX_CUTS]; 
     5082    int component_libs[MAX_CUTS]; 
    50825083    int num_components; 
    50835084    int biggest_component = -1; 
    50845085    struct connection_data *conn_data; 
     
    51035104     */ 
    51045105    memset(component2, -1, BOARDMAX); 
    51055106    memset(component_size, 0, sizeof(int) * num_components); 
     5107    memset(component_libs, 0, sizeof(int) * num_components); 
    51065108    conn_data = malloc(sizeof(struct connection_data) * num_components); 
    51075109    for (c_id = 0; c_id < num_components; c_id++) { 
    51085110      signed char this_goal[BOARDMAX]; 
     
    51385140      if (closest_component != -1) { 
    51395141        mark_string(pos, component2, closest_component); 
    51405142        component_size[closest_component] += countstones(pos); 
     5143        component_libs[closest_component] += countlib(pos); 
    51415144      } 
    51425145    } 
    51435146 
    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     */ 
    51455150    { 
    51465151      int biggest_size = 0; 
     5152      int fewest_libs = (size_t)-1; 
    51475153      for (c_id = 0; c_id < num_components; c_id++) 
    51485154        if (component_size[c_id] > biggest_size) { 
    51495155          biggest_size = component_size[c_id]; 
     5156          fewest_libs = component_libs[c_id]; 
    51505157          biggest_component = c_id; 
    51515158        } 
     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        } 
    51525164      gg_assert(biggest_component != -1); 
    51535165    } 
    51545166 
  • patterns/Makefile.am

    diff -N -r -u -X .ignore gnugo-copy/patterns/Makefile.am gnugo/patterns/Makefile.am
    old new  
    33 
    44DSP = dfa.dsp patterns.dsp joseki.dsp mkeyes.dsp mkpat.dsp fuseki.dsp 
    55DTR = 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 
    79 
    810EXTRA_DIST = $(DSP)\ 
    911        $(DTR)\ 
     
    121123takamoku.db : $(srcdir)/takamoku.sgf joseki$(EXEEXT) 
    122124        ./joseki JT $(srcdir)/takamoku.sgf >takamoku.db 
    123125 
    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.c 
     126patterns.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 
    127129 
    128130josekidb.c : $(DBBUILT) mkpat$(EXEEXT) 
    129131        ./mkpat -C joseki $(DBBUILT_INPUT) -o josekidb.c 
    130132 
    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 
     133apatterns.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 
     137dpatterns.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 
     141conn.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 
     145endgame.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 
    142148 
    143149eyes.c: $(srcdir)/eyes.db mkeyes$(EXEEXT) 
    144150        ./mkeyes < $(srcdir)/eyes.db >eyes.c 
    145151 
    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 
     152influence.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 
     156barriers.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 
    151159 
    152160aa_attackpat.c : $(srcdir)/aa_attackpats.db $(srcdir)/aa_attackpats.dtr mkpat$(EXEEXT) 
    153161        ./mkpat $(DFAFLAGS) -b -t $(srcdir)/aa_attackpats.dtr aa_attackpat \ 
     
    169177               -i $(srcdir)/owl_defendpats.db -o owl_defendpat.c 
    170178 
    171179fusekipat.c : $(srcdir)/fuseki.db mkpat$(EXEEXT) 
    172         ./mkpat -b fusekipat -i $(srcdir)/fuseki.db -o fusekipat.c 
     180        ./mkpat -b -m fusekipat -i $(srcdir)/fuseki.db -o fusekipat.c 
    173181 
    174182fuseki9.c : $(srcdir)/fuseki9.dbz uncompress_fuseki$(EXEEXT) 
    175183        ./uncompress_fuseki 9 $(srcdir)/fuseki9.dbz c >fuseki9.c 
     
    180188fuseki19.c : $(srcdir)/fuseki19.dbz uncompress_fuseki$(EXEEXT) 
    181189        ./uncompress_fuseki 19 $(srcdir)/fuseki19.dbz c >fuseki19.c 
    182190 
    183 handipat.c : $(srcdir)/handicap.db mkpat$(EXEEXT) 
    184         ./mkpat -b handipat -i $(srcdir)/handicap.db -o handipat.c 
     191handipat.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 
    185194 
    186195 
    187196ETAGS_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  
    8080 
    8181DSP = dfa.dsp patterns.dsp joseki.dsp mkeyes.dsp mkpat.dsp fuseki.dsp 
    8282DTR = 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 
    8486 
    8587 
    8688EXTRA_DIST = $(DSP)\ 
     
    526528takamoku.db : $(srcdir)/takamoku.sgf joseki$(EXEEXT) 
    527529        ./joseki JT $(srcdir)/takamoku.sgf >takamoku.db 
    528530 
    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.c 
     531patterns.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 
    532534 
    533535josekidb.c : $(DBBUILT) mkpat$(EXEEXT) 
    534536        ./mkpat -C joseki $(DBBUILT_INPUT) -o josekidb.c 
    535537 
    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 
     538apatterns.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 
     542dpatterns.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 
     546conn.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 
     550endgame.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 
    547553 
    548554eyes.c: $(srcdir)/eyes.db mkeyes$(EXEEXT) 
    549555        ./mkeyes < $(srcdir)/eyes.db >eyes.c 
    550556 
    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 
     557influence.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 
     561barriers.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 
    556564 
    557565aa_attackpat.c : $(srcdir)/aa_attackpats.db $(srcdir)/aa_attackpats.dtr mkpat$(EXEEXT) 
    558566        ./mkpat $(DFAFLAGS) -b -t $(srcdir)/aa_attackpats.dtr aa_attackpat \ 
     
    574582               -i $(srcdir)/owl_defendpats.db -o owl_defendpat.c 
    575583 
    576584fusekipat.c : $(srcdir)/fuseki.db mkpat$(EXEEXT) 
    577         ./mkpat -b fusekipat -i $(srcdir)/fuseki.db -o fusekipat.c 
     585        ./mkpat -b -m fusekipat -i $(srcdir)/fuseki.db -o fusekipat.c 
    578586 
    579587fuseki9.c : $(srcdir)/fuseki9.dbz uncompress_fuseki$(EXEEXT) 
    580588        ./uncompress_fuseki 9 $(srcdir)/fuseki9.dbz c >fuseki9.c 
     
    585593fuseki19.c : $(srcdir)/fuseki19.dbz uncompress_fuseki$(EXEEXT) 
    586594        ./uncompress_fuseki 19 $(srcdir)/fuseki19.dbz c >fuseki19.c 
    587595 
    588 handipat.c : $(srcdir)/handicap.db mkpat$(EXEEXT) 
    589         ./mkpat -b handipat -i $(srcdir)/handicap.db -o handipat.c 
     596handipat.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 
    590599# Tell versions [3.59,3.63) of GNU make to not export all variables. 
    591600# Otherwise a system limit (for SysV at least) may be exceeded. 
    592601.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      1 
     1A1      0 
    22A2      3 
    33A3      0 
    44A4      0 
    55A5      1 
    66A6      1 
    77A7      1 
    8 A8      1 
     8A7b     4 
     9A7c     1 
     10A8      5 
    911A9      0 
    1012A10     2 
    1113A11     4 
     
    1618A16     6 
    1719A17     0 
    1820A18     6 
    19 A19     1 
    20 A20     6 
     21A19     6 
     22A20     4 
    2123A21     0 
    2224A22     1 
    23 A23     5 
     25A23     2 
     26A24     1 
     27A25     0 
     28A26     1 
  • patterns/attack.dtr

    diff -N -r -u -X .ignore gnugo-copy/patterns/attack.dtr gnugo/patterns/attack.dtr
    old new  
     1Attack1 0 
     2Attack2 0 
     3Attack4 2 
     4Attack5 0 
     5Attack6 6 
     6Attack10        0 
     7Attack11        6 
     8Attack13        1 
     9Attack14        2 
     10Attack15        0 
     11Attack16        5 
     12Attack17        0 
     13Attack18        6 
     14Attack19        4 
  • patterns/barriers.dtr

    diff -N -r -u -X .ignore gnugo-copy/patterns/barriers.dtr gnugo/patterns/barriers.dtr
    old new  
     1Barrier1        1 
     2Barrier1b       1 
     3Barrier2        1 
     4Barrier3        1 
     5Barrier4a       3 
     6Barrier4b       4 
     7Barrier5        0 
     8Barrier6        7 
     9Barrier6b       0 
     10Barrier7        0 
     11Barrier8        1 
     12Barrier9        1 
     13Barrier10       0 
     14Barrier11       0 
     15Barrier12       6 
     16Barrier13       0 
     17Barrier14       0 
     18Barrier15       6 
     19Barrier16       5 
     20Barrier16b      6 
     21Barrier17       6 
     22Barrier18       6 
     23Barrier19       0 
     24Barrier20       0 
     25Barrier21       1 
     26Barrier22       0 
     27Barrier22a      6 
     28Barrier22b      0 
     29Barrier23       5 
     30Barrier24       0 
     31Barrier25       6 
     32Barrier26       5 
     33Barrier27       0 
     34Barrier28       0 
     35Barrier29       7 
     36Barrier30       0 
     37Barrier31       0 
     38Barrier32       7 
     39Barrier33       0 
     40Barrier34       7 
     41Barrier34b      0 
     42Barrier35       0 
     43Barrier36       0 
     44Barrier37       7 
     45Barrier38       7 
     46Barrier39       6 
     47Barrier40       0 
     48Barrier41a      3 
     49Barrier41b      3 
     50Barrier42       7 
     51Barrier43       6 
     52Barrier44       0 
     53Barrier45       0 
     54Barrier46       6 
     55Barrier47       0 
     56Barrier48       0 
     57Barrier49       0 
     58Barrier50       0 
     59Barrier51       5 
     60Barrier52       7 
     61Barrier53       7 
     62Barrier54       0 
     63Barrier55       6 
     64Barrier56       6 
     65Barrier56b      0 
     66Barrier57       6 
     67Barrier58       4 
     68Barrier59       1 
     69Barrier60a      3 
     70Barrier60b      3 
     71Barrier61       0 
     72Barrier62       6 
     73Barrier63       0 
     74Barrier64       0 
     75Barrier65       6 
     76Barrier66       7 
     77Barrier67       0 
     78Intrusion1      7 
     79Intrusion1a     7 
     80Intrusion1b     3 
     81Intrusion1c     3 
     82Intrusion1d     3 
     83Intrusion2      3 
     84Intrusion3      7 
     85Intrusion4      0 
     86Intrusion5a     7 
     87Intrusion5b     0 
     88Intrusion6      7 
     89Intrusion7b     6 
     90Intrusion8a     6 
     91Intrusion8b     1 
     92Intrusion9      1 
     93Intrusion10     7 
     94Intrusion11     0 
     95Intrusion12a    0 
     96Intrusion12b    0 
     97Intrusion13     7 
     98Intrusion14     0 
     99Intrusion15     7 
     100Intrusion16     0 
     101Intrusion17     6 
     102Intrusion18     1 
     103Intrusion19     6 
     104Intrusion20     0 
     105Intrusion21     0 
     106Intrusion21b    6 
     107Intrusion22     0 
     108Intrusion23     0 
     109Intrusion24     0 
     110Intrusion25     7 
     111Intrusion26     7 
     112Intrusion27     6 
     113Intrusion28     0 
     114Intrusion29     6 
     115Intrusion30     7 
     116Intrusion30a    0 
     117Intrusion31     7 
     118Intrusion32     7 
     119Intrusion33     5 
     120Intrusion34     0 
     121Intrusion35     7 
     122Intrusion36     1 
     123Intrusion37     1 
     124Intrusion38     7 
     125Intrusion39     1 
     126Intrusion40     5 
     127Intrusion41     5 
     128Intrusion42     7 
     129Intrusion43     4 
     130Intrusion44a    3 
     131Intrusion44b    4 
     132Intrusion45     7 
     133Intrusion46     0 
     134Intrusion47     6 
     135Intrusion48     5 
     136Intrusion49     0 
     137Intrusion50     6 
     138Intrusion51a    0 
     139Intrusion51b    0 
     140Intrusion52     6 
     141Intrusion53     1 
     142Intrusion54     4 
     143Intrusion55     7 
     144Intrusion56     7 
     145Intrusion57     3 
     146Intrusion58     7 
     147Intrusion59     2 
     148Intrusion60     7 
     149Intrusion61     3 
     150Intrusion62     0 
     151Intrusion63     0 
     152Nonterritory1   0 
     153Nonterritory1b  6 
     154Nonterritory1c  6 
     155Nonterritory2   4 
     156Nonterritory3   4 
     157Nonterritory4   7 
     158Nonterritory5   7 
     159Nonterritory6   7 
     160Nonterritory7   0 
     161Nonterritory7b  0 
     162Nonterritory7c  7 
     163Nonterritory8   0 
     164Nonterritory8b  0 
     165Nonterritory9   0 
     166Nonterritory10  5 
     167Nonterritory11  7 
     168Nonterritory12  1 
     169Nonterritory13  0 
     170Nonterritory14  5 
     171Nonterritory15  2 
     172Nonterritory16  7 
     173Nonterritory17  6 
     174Nonterritory17b 0 
     175Nonterritory18a 0 
     176Nonterritory18b 0 
     177Nonterritory19  3 
     178Nonterritory20  7 
     179Nonterritory21  3 
     180Nonterritory22  3 
     181Nonterritory23  1 
     182Nonterritory24  0 
     183Nonterritory25  6 
     184Nonterritory26  0 
     185Nonterritory27  1 
     186Nonterritory28  0 
     187Nonterritory29  0 
     188Nonterritory30  0 
     189Nonterritory31  7 
     190Nonterritory32  1 
     191Nonterritory33  0 
     192Nonterritory34  0 
     193Nonterritory35  3 
     194Nonterritory36  0 
     195Nonterritory37  1 
     196Nonterritory38  6 
     197Nonterritory39  1 
     198Nonterritory40  3 
     199Nonterritory41  5 
     200Nonterritory42  6 
     201Nonterritory43  0 
     202Nonterritory44  7 
     203Nonterritory45  2 
     204Nonterritory46  6 
     205Nonterritory47  1 
     206Nonterritory48  6 
     207Nonterritory49  0 
     208Nonterritory50  6 
     209Nonterritory51  0 
     210Nonterritory52  6 
     211Nonterritory53  1 
     212Nonterritory54  3 
     213Nonterritory55  7 
     214Nonterritory56  6 
     215Nonterritory57  3 
     216Nonterritory58  3 
     217Nonterritory59  0 
     218Nonterritory60  6 
  • patterns/conn.db

    diff -N -r -u -X .ignore gnugo-copy/patterns/conn.db gnugo/patterns/conn.db
    old new  
    161161XO 
    162162O* 
    163163 
    164 :\,B,cutstone2_helper 
     164:\,B 
    165165 
    166 AO 
    167 O* 
     166Ac 
     167b* 
    168168 
    169 ;attack(A) 
     169;attack(A) && cutstone2_helper(A,b,c) 
    170170 
    171171 
    172172Pattern CB11b 
  • patterns/conn.dtr

    diff -N -r -u -X .ignore gnugo-copy/patterns/conn.dtr gnugo/patterns/conn.dtr
    old new  
     1CB1b    0 
     2CB2b    0 
     3CB3b    2 
     4CB3c    1 
     5CB7     1 
     6CB11b   3 
     7CB15b   0 
     8CB16    2 
     9CB17    0 
     10CB18    1 
     11EC1     0 
     12EC1b    0 
     13EC3a    0 
     14CC101   1 
     15CC103   1 
     16CC104   6 
     17CC105   1 
     18CC106   2 
     19CC107   6 
     20CC108   2 
     21CC109   5 
     22CC401   0 
     23CC402   0 
     24CC501   1 
     25CC502   1 
     26CC502b  1 
     27CC503   0 
     28CC504   1 
     29CC505   1 
     30CC506   0 
     31CC506b  6 
     32CC507   3 
     33CC508   0 
     34CC509   3 
     35CC511   1 
  • patterns/defense.dtr

    diff -N -r -u -X .ignore gnugo-copy/patterns/defense.dtr gnugo/patterns/defense.dtr
    old new  
     1Def1    1 
     2Def2    0 
     3Def4    0 
     4Def5    0 
     5Def6    0 
     6Def9    5 
     7Def10   7 
     8Def12   6 
     9Def16   4 
     10Def17   4 
     11Def21   2 
     12Def25   6 
     13Def26   3 
     14Def28   1 
     15Def29   0 
     16Def39   0 
     17Def44   0 
     18Def45   3 
     19Def49   3 
     20Def50   0 
     21Def52   4 
     22Def55   6 
     23Def56   0 
     24Def57   3 
     25Def58   0 
     26Def59   0 
     27Def60   0 
     28Def61   7 
     29Def62   7 
     30Def63   1 
     31Def68   0 
     32Def69   5 
     33Def70   7 
  • patterns/dfa.c

    diff -N -r -u -X .ignore gnugo-copy/patterns/dfa.c gnugo/patterns/dfa.c
    old new  
    4040#include <unistd.h> 
    4141#endif 
    4242 
     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 
    4354 
    4455/********************* 
    4556 *   Public data     * 
     
    418429    exit(EXIT_FAILURE); 
    419430  } 
    420431 
    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  
    428432  if (pdfa->last_index + 1 > 65535) { 
    429433    fprintf(of, "#error too many states"); 
    430434    fprintf(stderr, "Error: Too many index entries. Can't fit delta into a short.\n"); 
     
    441445    fprintf(of, "{{"); 
    442446    for (j = 0; j < 4; j++) { 
    443447      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); 
    446450      if (j != 3) 
    447451        fprintf(of, ","); 
    448452    } 
     
    781785} 
    782786 
    783787 
    784 /* 
    785  * Returns max or min jump distance from state to next[next_index] for 
    786  * all states.  If next_index < 0, then max/min for all for states. 
    787  */ 
    788  
    789 int  
    790 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   else 
    799     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  
    822788#define DFA_ALIGN       2 
    823789 
    824790/* 
     
    955921dfa_finalize(dfa_t *pdfa)  
    956922{ 
    957923  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; 
    960929  while (next_bin + 1 != last_bin) { 
    961930    for (j = aux_count + 1; j <= last_bin; j += 2) { 
    962931      if (j+1 == next_bin) 
     
    11981167    if (j == pat->minj) 
    11991168      borders &= ~WEST_EDGE; 
    12001169     
    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); 
    12021171    str[k] = work_space[m + i][n +