gecoder-with-gecode 0.9.0 → 0.9.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (919) hide show
  1. data/CHANGES +6 -0
  2. data/README +1 -1
  3. data/THANKS +18 -0
  4. data/example/equation_system.rb +3 -1
  5. data/example/magic_sequence.rb +3 -1
  6. data/example/queens.rb +3 -1
  7. data/example/send_more_money.rb +24 -30
  8. data/example/send_most_money.rb +15 -26
  9. data/example/square_tiling.rb +3 -1
  10. data/example/sudoku-set.rb +3 -1
  11. data/ext/{gecode-2.1.1 → gecode-2.2.0}/LICENSE +0 -0
  12. data/ext/{gecode-2.1.1 → gecode-2.2.0}/Makefile.contribs +0 -0
  13. data/ext/gecode-2.2.0/Makefile.dep +8056 -0
  14. data/ext/gecode-2.2.0/Makefile.in +1590 -0
  15. data/ext/gecode-2.2.0/changelog.in +2698 -0
  16. data/ext/gecode-2.2.0/configure +13112 -0
  17. data/ext/gecode-2.2.0/configure.ac +273 -0
  18. data/ext/gecode-2.2.0/configure.ac.in +269 -0
  19. data/ext/{gecode-2.1.1 → gecode-2.2.0}/contribs/README +0 -0
  20. data/ext/gecode-2.2.0/contribs/qecode/Doxyfile +263 -0
  21. data/ext/gecode-2.2.0/contribs/qecode/Implicative.cc +267 -0
  22. data/ext/gecode-2.2.0/contribs/qecode/Implicative.hh +164 -0
  23. data/ext/gecode-2.2.0/contribs/qecode/Makefile.in.in +163 -0
  24. data/ext/gecode-2.2.0/contribs/qecode/OptVar.cc +82 -0
  25. data/ext/gecode-2.2.0/contribs/qecode/OptVar.hh +123 -0
  26. data/ext/gecode-2.2.0/contribs/qecode/Strategy.cc +131 -0
  27. data/ext/gecode-2.2.0/contribs/qecode/Strategy.hh +91 -0
  28. data/ext/gecode-2.2.0/contribs/qecode/StrategyNode.cc +62 -0
  29. data/ext/gecode-2.2.0/contribs/qecode/StrategyNode.hh +47 -0
  30. data/ext/gecode-2.2.0/contribs/qecode/autom4te.cache/output.0 +2264 -0
  31. data/ext/gecode-2.2.0/contribs/qecode/autom4te.cache/requests +115 -0
  32. data/ext/gecode-2.2.0/contribs/qecode/autom4te.cache/traces.0 +57 -0
  33. data/ext/gecode-2.2.0/contribs/qecode/config.log +147 -0
  34. data/ext/gecode-2.2.0/contribs/qecode/config.status +817 -0
  35. data/ext/gecode-2.2.0/contribs/qecode/configure +2264 -0
  36. data/ext/gecode-2.2.0/contribs/qecode/configure.ac +23 -0
  37. data/ext/gecode-2.2.0/contribs/qecode/examples/COMPILING +13 -0
  38. data/ext/gecode-2.2.0/contribs/qecode/examples/MatrixGame.cpp +140 -0
  39. data/ext/gecode-2.2.0/contribs/qecode/examples/NimFibo.cpp +73 -0
  40. data/ext/gecode-2.2.0/contribs/qecode/examples/connect-5-3-3-3.cpp +842 -0
  41. data/ext/gecode-2.2.0/contribs/qecode/examples/network-pricing.cc +146 -0
  42. data/ext/gecode-2.2.0/contribs/qecode/examples/optim2.cc +149 -0
  43. data/ext/gecode-2.2.0/contribs/qecode/examples/stress_test.cpp +240 -0
  44. data/ext/{gecode-2.1.1 → gecode-2.2.0}/contribs/qecode/heap.cc +0 -0
  45. data/ext/{gecode-2.1.1 → gecode-2.2.0}/contribs/qecode/myDom.cc +0 -0
  46. data/ext/{gecode-2.1.1 → gecode-2.2.0}/contribs/qecode/myspace.cc +0 -0
  47. data/ext/gecode-2.2.0/contribs/qecode/myspace.hh +68 -0
  48. data/ext/{gecode-2.1.1 → gecode-2.2.0}/contribs/qecode/qecode.hh +0 -0
  49. data/ext/gecode-2.2.0/contribs/qecode/qsolver.cc +268 -0
  50. data/ext/gecode-2.2.0/contribs/qecode/qsolver.hh +46 -0
  51. data/ext/{gecode-2.1.1 → gecode-2.2.0}/contribs/qecode/shortdesc.ac +0 -0
  52. data/ext/{gecode-2.1.1 → gecode-2.2.0}/contribs/qecode/vartype.hh +0 -0
  53. data/ext/{gecode-2.1.1 → gecode-2.2.0}/doxygen/doxygen.conf.in +0 -0
  54. data/ext/gecode-2.2.0/doxygen/doxygen.hh.in +1112 -0
  55. data/ext/gecode-2.2.0/doxygen/reflection.hh +417 -0
  56. data/ext/gecode-2.2.0/examples/all-interval.cc +133 -0
  57. data/ext/gecode-2.2.0/examples/alpha.cc +137 -0
  58. data/ext/gecode-2.2.0/examples/bacp.cc +521 -0
  59. data/ext/gecode-2.2.0/examples/baseline.cc +87 -0
  60. data/ext/gecode-2.2.0/examples/bibd.cc +203 -0
  61. data/ext/gecode-2.2.0/examples/black-hole.cc +389 -0
  62. data/ext/gecode-2.2.0/examples/crew.cc +286 -0
  63. data/ext/gecode-2.2.0/examples/crowded-chess.cc +424 -0
  64. data/ext/gecode-2.2.0/examples/domino.cc +297 -0
  65. data/ext/gecode-2.2.0/examples/donald.cc +107 -0
  66. data/ext/gecode-2.2.0/examples/eq20.cc +125 -0
  67. data/ext/gecode-2.2.0/examples/golf.cc +297 -0
  68. data/ext/gecode-2.2.0/examples/golomb-ruler.cc +199 -0
  69. data/ext/gecode-2.2.0/examples/graph-color.cc +407 -0
  70. data/ext/gecode-2.2.0/examples/grocery.cc +113 -0
  71. data/ext/gecode-2.2.0/examples/hamming.cc +129 -0
  72. data/ext/gecode-2.2.0/examples/ind-set.cc +143 -0
  73. data/ext/gecode-2.2.0/examples/javascript.cc +163 -0
  74. data/ext/gecode-2.2.0/examples/kakuro.cc +686 -0
  75. data/ext/gecode-2.2.0/examples/knights.cc +220 -0
  76. data/ext/gecode-2.2.0/examples/langford-number.cc +225 -0
  77. data/ext/gecode-2.2.0/examples/magic-sequence.cc +146 -0
  78. data/ext/gecode-2.2.0/examples/magic-square.cc +138 -0
  79. data/ext/gecode-2.2.0/examples/minesweeper.cc +304 -0
  80. data/ext/gecode-2.2.0/examples/money.cc +105 -0
  81. data/ext/gecode-2.2.0/examples/nonogram.cc +492 -0
  82. data/ext/gecode-2.2.0/examples/ortho-latin.cc +172 -0
  83. data/ext/gecode-2.2.0/examples/partition.cc +141 -0
  84. data/ext/gecode-2.2.0/examples/pentominoes.cc +949 -0
  85. data/ext/gecode-2.2.0/examples/perfect-square.cc +311 -0
  86. data/ext/gecode-2.2.0/examples/photo.cc +170 -0
  87. data/ext/gecode-2.2.0/examples/queen-armies.cc +284 -0
  88. data/ext/gecode-2.2.0/examples/queens.cc +147 -0
  89. data/ext/gecode-2.2.0/examples/queens.js +57 -0
  90. data/ext/gecode-2.2.0/examples/sports-league.cc +342 -0
  91. data/ext/gecode-2.2.0/examples/steiner.cc +192 -0
  92. data/ext/gecode-2.2.0/examples/stress-distinct.cc +90 -0
  93. data/ext/gecode-2.2.0/examples/stress-domain.cc +99 -0
  94. data/ext/gecode-2.2.0/examples/stress-element.cc +112 -0
  95. data/ext/gecode-2.2.0/examples/stress-exec.cc +97 -0
  96. data/ext/gecode-2.2.0/examples/stress-extensional.cc +134 -0
  97. data/ext/gecode-2.2.0/examples/stress-linear-bool.cc +97 -0
  98. data/ext/gecode-2.2.0/examples/stress-min.cc +98 -0
  99. data/ext/gecode-2.2.0/examples/stress-search.cc +88 -0
  100. data/ext/gecode-2.2.0/examples/sudoku.cc +2341 -0
  101. data/ext/gecode-2.2.0/examples/support.hh +338 -0
  102. data/ext/gecode-2.2.0/examples/support/example.cc +64 -0
  103. data/ext/gecode-2.2.0/examples/support/example.icc +321 -0
  104. data/ext/gecode-2.2.0/examples/support/options.cc +226 -0
  105. data/ext/gecode-2.2.0/examples/support/options.icc +276 -0
  106. data/ext/gecode-2.2.0/examples/tsp.cc +317 -0
  107. data/ext/gecode-2.2.0/examples/warehouses.cc +191 -0
  108. data/ext/gecode-2.2.0/gecode.m4 +1046 -0
  109. data/ext/gecode-2.2.0/gecode/cpltset.hh +797 -0
  110. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/array.cc +0 -0
  111. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/array.icc +0 -0
  112. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/bddmanager.cc +0 -0
  113. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/bddmanager.icc +0 -0
  114. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/branch.cc +0 -0
  115. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/branch.hh +0 -0
  116. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/branch/select-val.icc +0 -0
  117. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/branch/select-view.icc +0 -0
  118. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/constraints/atmost.cc +0 -0
  119. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/constraints/cardinality.cc +0 -0
  120. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/constraints/distinct.cc +0 -0
  121. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/constraints/dom.cc +0 -0
  122. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/constraints/partition.cc +0 -0
  123. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/constraints/rangeroots.cc +0 -0
  124. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/constraints/rel.cc +0 -0
  125. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/constraints/select.cc +0 -0
  126. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/constraints/singleton.cc +0 -0
  127. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/exception.icc +0 -0
  128. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/propagators.hh +0 -0
  129. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/propagators/binary.icc +0 -0
  130. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/propagators/nary.icc +0 -0
  131. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/propagators/naryone.icc +0 -0
  132. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/propagators/narytwo.icc +0 -0
  133. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/propagators/singleton.icc +0 -0
  134. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/propagators/unary.icc +0 -0
  135. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/support.cc +0 -0
  136. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/support.icc +0 -0
  137. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/var-imp.icc +0 -0
  138. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/var-imp/cpltset.cc +0 -0
  139. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/var-imp/cpltset.icc +0 -0
  140. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/var-imp/cpltset.vis +0 -0
  141. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/var/cpltset.cc +0 -0
  142. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/var/cpltset.icc +0 -0
  143. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/view.icc +0 -0
  144. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/view/cpltset.icc +0 -0
  145. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/cpltset/view/print.cc +0 -0
  146. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/gist.hh +0 -0
  147. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/gist/addchild.cc +0 -0
  148. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/gist/addchild.hh +0 -0
  149. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/gist/addvisualisationdialog.cc +0 -0
  150. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/gist/addvisualisationdialog.hh +0 -0
  151. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/gist/better.hh +0 -0
  152. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/gist/config.cc +0 -0
  153. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/gist/config.hh +0 -0
  154. data/ext/gecode-2.2.0/gecode/gist/drawingcursor.cc +281 -0
  155. data/ext/gecode-2.2.0/gecode/gist/drawingcursor.hh +103 -0
  156. data/ext/gecode-2.2.0/gecode/gist/drawingcursor.icc +70 -0
  157. data/ext/gecode-2.2.0/gecode/gist/gecodelogo.cc +672 -0
  158. data/ext/gecode-2.2.0/gecode/gist/gecodelogo.hh +64 -0
  159. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/gist/gist.cc +0 -0
  160. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/gist/gist.icc +0 -0
  161. data/ext/gecode-2.2.0/gecode/gist/layoutcursor.cc +115 -0
  162. data/ext/gecode-2.2.0/gecode/gist/layoutcursor.hh +75 -0
  163. data/ext/gecode-2.2.0/gecode/gist/layoutcursor.icc +48 -0
  164. data/ext/gecode-2.2.0/gecode/gist/mainwindow.cc +274 -0
  165. data/ext/gecode-2.2.0/gecode/gist/mainwindow.hh +86 -0
  166. data/ext/gecode-2.2.0/gecode/gist/node.cc +148 -0
  167. data/ext/gecode-2.2.0/gecode/gist/node.hh +117 -0
  168. data/ext/gecode-2.2.0/gecode/gist/node.icc +99 -0
  169. data/ext/gecode-2.2.0/gecode/gist/nodecursor.cc +123 -0
  170. data/ext/gecode-2.2.0/gecode/gist/nodecursor.hh +147 -0
  171. data/ext/gecode-2.2.0/gecode/gist/nodecursor.icc +122 -0
  172. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/gist/nodevisitor.hh +0 -0
  173. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/gist/nodevisitor.icc +0 -0
  174. data/ext/gecode-2.2.0/gecode/gist/preferences.cc +120 -0
  175. data/ext/gecode-2.2.0/gecode/gist/preferences.hh +79 -0
  176. data/ext/gecode-2.2.0/gecode/gist/spacenode.cc +468 -0
  177. data/ext/gecode-2.2.0/gecode/gist/spacenode.hh +227 -0
  178. data/ext/gecode-2.2.0/gecode/gist/spacenode.icc +170 -0
  179. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/gist/test.cc +0 -0
  180. data/ext/gecode-2.2.0/gecode/gist/textoutput.cc +134 -0
  181. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/gist/textoutput.hh +0 -0
  182. data/ext/gecode-2.2.0/gecode/gist/treecanvas.cc +1343 -0
  183. data/ext/gecode-2.2.0/gecode/gist/treecanvas.hh +361 -0
  184. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/gist/ui_addchild.hh +0 -0
  185. data/ext/gecode-2.2.0/gecode/gist/ui_addvisualisationdialog.hh +165 -0
  186. data/ext/gecode-2.2.0/gecode/gist/visualisation/intvaritem.cc +192 -0
  187. data/ext/gecode-2.2.0/gecode/gist/visualisation/intvaritem.hh +75 -0
  188. data/ext/gecode-2.2.0/gecode/gist/visualisation/setvaritem.cc +235 -0
  189. data/ext/gecode-2.2.0/gecode/gist/visualisation/setvaritem.hh +77 -0
  190. data/ext/gecode-2.2.0/gecode/gist/visualisation/vararrayitem.hh +125 -0
  191. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/gist/visualisation/vararrayview.cc +0 -0
  192. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/gist/visualisation/vararrayview.hh +0 -0
  193. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/gist/visualisation/vararrayviewt.hh +0 -0
  194. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/gist/visualisation/varitem.cc +0 -0
  195. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/gist/visualisation/varitem.hh +0 -0
  196. data/ext/gecode-2.2.0/gecode/gist/visualnode.cc +474 -0
  197. data/ext/gecode-2.2.0/gecode/gist/visualnode.hh +226 -0
  198. data/ext/gecode-2.2.0/gecode/gist/visualnode.icc +198 -0
  199. data/ext/gecode-2.2.0/gecode/gist/zoomToFitIcon.icc +113 -0
  200. data/ext/gecode-2.2.0/gecode/int.hh +2116 -0
  201. data/ext/gecode-2.2.0/gecode/int/arithmetic.cc +237 -0
  202. data/ext/gecode-2.2.0/gecode/int/arithmetic.hh +827 -0
  203. data/ext/gecode-2.2.0/gecode/int/arithmetic/abs.icc +278 -0
  204. data/ext/gecode-2.2.0/gecode/int/arithmetic/divmod.icc +496 -0
  205. data/ext/gecode-2.2.0/gecode/int/arithmetic/max.icc +474 -0
  206. data/ext/gecode-2.2.0/gecode/int/arithmetic/mult.icc +858 -0
  207. data/ext/gecode-2.2.0/gecode/int/arithmetic/sqr.icc +464 -0
  208. data/ext/gecode-2.2.0/gecode/int/arithmetic/sqrt.icc +260 -0
  209. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/array.cc +0 -0
  210. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/array.icc +0 -0
  211. data/ext/gecode-2.2.0/gecode/int/bool.cc +734 -0
  212. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/bool.hh +0 -0
  213. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/bool/base.icc +0 -0
  214. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/bool/eq.icc +0 -0
  215. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/bool/eqv.icc +0 -0
  216. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/bool/lq.icc +0 -0
  217. data/ext/gecode-2.2.0/gecode/int/bool/or.icc +1000 -0
  218. data/ext/gecode-2.2.0/gecode/int/branch.cc +167 -0
  219. data/ext/gecode-2.2.0/gecode/int/branch.hh +587 -0
  220. data/ext/gecode-2.2.0/gecode/int/branch/create-branch.icc +190 -0
  221. data/ext/gecode-2.2.0/gecode/int/branch/select-val.icc +340 -0
  222. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/branch/select-view.icc +0 -0
  223. data/ext/gecode-2.2.0/gecode/int/channel.cc +165 -0
  224. data/ext/gecode-2.2.0/gecode/int/channel.hh +259 -0
  225. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/channel/base.icc +0 -0
  226. data/ext/gecode-2.2.0/gecode/int/channel/dom.icc +348 -0
  227. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/channel/link-multi.cc +0 -0
  228. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/channel/link-multi.icc +0 -0
  229. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/channel/link-single.cc +0 -0
  230. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/channel/link-single.icc +0 -0
  231. data/ext/gecode-2.2.0/gecode/int/channel/val.icc +278 -0
  232. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/circuit.cc +0 -0
  233. data/ext/gecode-2.2.0/gecode/int/circuit.hh +175 -0
  234. data/ext/gecode-2.2.0/gecode/int/circuit/base.icc +266 -0
  235. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/circuit/dom.icc +0 -0
  236. data/ext/gecode-2.2.0/gecode/int/circuit/val.icc +126 -0
  237. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/count.cc +0 -0
  238. data/ext/gecode-2.2.0/gecode/int/count.hh +487 -0
  239. data/ext/gecode-2.2.0/gecode/int/count/int.icc +620 -0
  240. data/ext/gecode-2.2.0/gecode/int/count/rel.icc +144 -0
  241. data/ext/gecode-2.2.0/gecode/int/count/view.icc +449 -0
  242. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/cumulatives.cc +0 -0
  243. data/ext/gecode-2.2.0/gecode/int/cumulatives.hh +138 -0
  244. data/ext/gecode-2.2.0/gecode/int/cumulatives/val.icc +455 -0
  245. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/distinct.cc +0 -0
  246. data/ext/gecode-2.2.0/gecode/int/distinct.hh +341 -0
  247. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/distinct/bilink.icc +0 -0
  248. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/distinct/bnd.icc +0 -0
  249. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/distinct/combptr.icc +0 -0
  250. data/ext/gecode-2.2.0/gecode/int/distinct/dom.icc +752 -0
  251. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/distinct/edge.icc +0 -0
  252. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/distinct/node.icc +0 -0
  253. data/ext/gecode-2.2.0/gecode/int/distinct/ter-dom.icc +136 -0
  254. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/distinct/val.icc +0 -0
  255. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/dom.cc +0 -0
  256. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/dom.hh +0 -0
  257. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/dom/range.icc +0 -0
  258. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/dom/spec.icc +0 -0
  259. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/element.cc +0 -0
  260. data/ext/gecode-2.2.0/gecode/int/element.hh +239 -0
  261. data/ext/gecode-2.2.0/gecode/int/element/int.icc +444 -0
  262. data/ext/gecode-2.2.0/gecode/int/element/view.icc +584 -0
  263. data/ext/gecode-2.2.0/gecode/int/exception.icc +174 -0
  264. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/extensional.cc +0 -0
  265. data/ext/gecode-2.2.0/gecode/int/extensional.hh +415 -0
  266. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/extensional/base.icc +0 -0
  267. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/extensional/basic.icc +0 -0
  268. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/extensional/bitset.icc +0 -0
  269. data/ext/gecode-2.2.0/gecode/int/extensional/dfa.cc +565 -0
  270. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/extensional/dfa.icc +0 -0
  271. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/extensional/incremental.icc +0 -0
  272. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/extensional/layered-graph.icc +0 -0
  273. data/ext/gecode-2.2.0/gecode/int/extensional/tuple-set.cc +285 -0
  274. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/extensional/tuple-set.icc +0 -0
  275. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/gcc.cc +0 -0
  276. data/ext/gecode-2.2.0/gecode/int/gcc.hh +329 -0
  277. data/ext/gecode-2.2.0/gecode/int/gcc/bnd.icc +660 -0
  278. data/ext/gecode-2.2.0/gecode/int/gcc/dom.icc +531 -0
  279. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/gcc/gccbndsup.icc +0 -0
  280. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/gcc/graphsup.icc +0 -0
  281. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/gcc/lbc.icc +0 -0
  282. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/gcc/occur.icc +0 -0
  283. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/gcc/ubc.icc +0 -0
  284. data/ext/gecode-2.2.0/gecode/int/gcc/val.icc +400 -0
  285. data/ext/gecode-2.2.0/gecode/int/int-set.cc +157 -0
  286. data/ext/gecode-2.2.0/gecode/int/int-set.icc +195 -0
  287. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/limits.icc +0 -0
  288. data/ext/gecode-2.2.0/gecode/int/linear-bool.cc +235 -0
  289. data/ext/gecode-2.2.0/gecode/int/linear-int.cc +272 -0
  290. data/ext/gecode-2.2.0/gecode/int/linear.hh +1849 -0
  291. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/linear/bool-int.icc +0 -0
  292. data/ext/gecode-2.2.0/gecode/int/linear/bool-post.cc +433 -0
  293. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/linear/bool-scale.icc +0 -0
  294. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/linear/bool-view.icc +0 -0
  295. data/ext/gecode-2.2.0/gecode/int/linear/int-bin.icc +605 -0
  296. data/ext/gecode-2.2.0/gecode/int/linear/int-dom.icc +539 -0
  297. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/linear/int-nary.icc +0 -0
  298. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/linear/int-noview.icc +0 -0
  299. data/ext/gecode-2.2.0/gecode/int/linear/int-post.cc +493 -0
  300. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/linear/int-ter.icc +0 -0
  301. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/linear/post.icc +0 -0
  302. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/propagator.icc +0 -0
  303. data/ext/gecode-2.2.0/gecode/int/rel.cc +420 -0
  304. data/ext/gecode-2.2.0/gecode/int/rel.hh +627 -0
  305. data/ext/gecode-2.2.0/gecode/int/rel/eq.icc +885 -0
  306. data/ext/gecode-2.2.0/gecode/int/rel/lex.icc +275 -0
  307. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/rel/lq-le.icc +0 -0
  308. data/ext/gecode-2.2.0/gecode/int/rel/nq.icc +118 -0
  309. data/ext/gecode-2.2.0/gecode/int/sorted.cc +81 -0
  310. data/ext/gecode-2.2.0/gecode/int/sorted.hh +118 -0
  311. data/ext/gecode-2.2.0/gecode/int/sorted/matching.icc +173 -0
  312. data/ext/gecode-2.2.0/gecode/int/sorted/narrowing.icc +249 -0
  313. data/ext/gecode-2.2.0/gecode/int/sorted/order.icc +212 -0
  314. data/ext/gecode-2.2.0/gecode/int/sorted/propagate.icc +702 -0
  315. data/ext/gecode-2.2.0/gecode/int/sorted/sortsup.icc +563 -0
  316. data/ext/gecode-2.2.0/gecode/int/support-values.hh +158 -0
  317. data/ext/gecode-2.2.0/gecode/int/support-values.icc +203 -0
  318. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/unshare.cc +0 -0
  319. data/ext/gecode-2.2.0/gecode/int/var-imp.icc +745 -0
  320. data/ext/gecode-2.2.0/gecode/int/var-imp/bool.cc +105 -0
  321. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/var-imp/bool.icc +0 -0
  322. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/var-imp/bool.vis +0 -0
  323. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/var-imp/delta.icc +0 -0
  324. data/ext/gecode-2.2.0/gecode/int/var-imp/int.cc +408 -0
  325. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/var-imp/int.icc +0 -0
  326. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/var-imp/int.vis +0 -0
  327. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/var/bool.cc +0 -0
  328. data/ext/gecode-2.2.0/gecode/int/var/bool.icc +128 -0
  329. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/var/int.cc +0 -0
  330. data/ext/gecode-2.2.0/gecode/int/var/int.icc +153 -0
  331. data/ext/gecode-2.2.0/gecode/int/view.icc +1918 -0
  332. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/view/bool.icc +0 -0
  333. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/view/constint.icc +0 -0
  334. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/view/int.icc +0 -0
  335. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/view/iter.icc +0 -0
  336. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/view/minus.icc +0 -0
  337. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/view/offset.icc +0 -0
  338. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/view/print.cc +0 -0
  339. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/view/rtest.icc +0 -0
  340. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/view/scale.icc +0 -0
  341. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/int/view/zero.icc +0 -0
  342. data/ext/gecode-2.2.0/gecode/iter.hh +98 -0
  343. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/iter/ranges-add.icc +0 -0
  344. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/iter/ranges-append.icc +0 -0
  345. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/iter/ranges-array.icc +0 -0
  346. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/iter/ranges-cache.icc +0 -0
  347. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/iter/ranges-compl.icc +0 -0
  348. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/iter/ranges-diff.icc +0 -0
  349. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/iter/ranges-empty.icc +0 -0
  350. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/iter/ranges-inter.icc +0 -0
  351. data/ext/gecode-2.2.0/gecode/iter/ranges-map.icc +260 -0
  352. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/iter/ranges-minmax.icc +0 -0
  353. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/iter/ranges-minus.icc +0 -0
  354. data/ext/gecode-2.2.0/gecode/iter/ranges-negative.icc +137 -0
  355. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/iter/ranges-offset.icc +0 -0
  356. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/iter/ranges-operations.icc +0 -0
  357. data/ext/gecode-2.2.0/gecode/iter/ranges-positive.icc +139 -0
  358. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/iter/ranges-scale.icc +0 -0
  359. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/iter/ranges-singleton-append.icc +0 -0
  360. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/iter/ranges-singleton.icc +0 -0
  361. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/iter/ranges-size.icc +0 -0
  362. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/iter/ranges-union.icc +0 -0
  363. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/iter/ranges-values.icc +0 -0
  364. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/iter/values-array.icc +0 -0
  365. data/ext/gecode-2.2.0/gecode/iter/values-inter.icc +130 -0
  366. data/ext/gecode-2.2.0/gecode/iter/values-map.icc +136 -0
  367. data/ext/gecode-2.2.0/gecode/iter/values-minus.icc +130 -0
  368. data/ext/gecode-2.2.0/gecode/iter/values-negative.icc +116 -0
  369. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/iter/values-offset.icc +0 -0
  370. data/ext/gecode-2.2.0/gecode/iter/values-positive.icc +123 -0
  371. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/iter/values-ranges.icc +0 -0
  372. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/iter/values-singleton.icc +0 -0
  373. data/ext/gecode-2.2.0/gecode/iter/values-union.icc +137 -0
  374. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/iter/values-unique.icc +0 -0
  375. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/iter/virtual-ranges-compl.icc +0 -0
  376. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/iter/virtual-ranges-inter.icc +0 -0
  377. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/iter/virtual-ranges-union.icc +0 -0
  378. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/iter/virtual-ranges.icc +0 -0
  379. data/ext/gecode-2.2.0/gecode/kernel.hh +188 -0
  380. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/kernel/advisor.icc +0 -0
  381. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/kernel/array.icc +0 -0
  382. data/ext/gecode-2.2.0/gecode/kernel/branching.icc +433 -0
  383. data/ext/gecode-2.2.0/gecode/kernel/core.cc +474 -0
  384. data/ext/gecode-2.2.0/gecode/kernel/core.icc +2311 -0
  385. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/kernel/exception.icc +0 -0
  386. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/kernel/macros.icc +0 -0
  387. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/kernel/memory-manager.cc +0 -0
  388. data/ext/gecode-2.2.0/gecode/kernel/memory-manager.icc +454 -0
  389. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/kernel/modevent.icc +0 -0
  390. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/kernel/propagator.icc +0 -0
  391. data/ext/gecode-2.2.0/gecode/kernel/reflection.cc +951 -0
  392. data/ext/gecode-2.2.0/gecode/kernel/reflection.icc +1213 -0
  393. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/kernel/shared-array.icc +0 -0
  394. data/ext/gecode-2.2.0/gecode/kernel/var-imp.icc +433 -0
  395. data/ext/gecode-2.2.0/gecode/kernel/var-map.cc +269 -0
  396. data/ext/gecode-2.2.0/gecode/kernel/var-map.icc +230 -0
  397. data/ext/gecode-2.2.0/gecode/kernel/var-traits.icc +79 -0
  398. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/kernel/var-type.cc +0 -0
  399. data/ext/gecode-2.2.0/gecode/kernel/var-type.icc +915 -0
  400. data/ext/gecode-2.2.0/gecode/kernel/var.icc +114 -0
  401. data/ext/gecode-2.2.0/gecode/kernel/view.icc +413 -0
  402. data/ext/gecode-2.2.0/gecode/minimodel.hh +1206 -0
  403. data/ext/gecode-2.2.0/gecode/minimodel/arithmetic.icc +118 -0
  404. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/minimodel/bool-expr.cc +0 -0
  405. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/minimodel/bool-expr.icc +0 -0
  406. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/minimodel/bool-rel.icc +0 -0
  407. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/minimodel/exception.icc +0 -0
  408. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/minimodel/lin-expr.icc +0 -0
  409. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/minimodel/lin-rel.icc +0 -0
  410. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/minimodel/matrix.icc +0 -0
  411. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/minimodel/reg.cc +0 -0
  412. data/ext/gecode-2.2.0/gecode/search.hh +759 -0
  413. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/search/bab.cc +0 -0
  414. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/search/bab.icc +0 -0
  415. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/search/dfs.cc +0 -0
  416. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/search/dfs.icc +0 -0
  417. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/search/engine-ctrl.icc +0 -0
  418. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/search/lds.cc +0 -0
  419. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/search/lds.icc +0 -0
  420. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/search/options.cc +0 -0
  421. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/search/options.icc +0 -0
  422. data/ext/gecode-2.2.0/gecode/search/reco-stack.icc +277 -0
  423. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/search/restart.icc +0 -0
  424. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/search/statistics.icc +0 -0
  425. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/search/stop.cc +0 -0
  426. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/search/stop.icc +0 -0
  427. data/ext/gecode-2.2.0/gecode/serialization.hh +149 -0
  428. data/ext/gecode-2.2.0/gecode/serialization/boost.cc +78 -0
  429. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/serialization/boost.icc +0 -0
  430. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/serialization/flatzinc.cc +0 -0
  431. data/ext/gecode-2.2.0/gecode/serialization/javascript.cc +343 -0
  432. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/serialization/javascript.hh +0 -0
  433. data/ext/gecode-2.2.0/gecode/serialization/register.cc +8498 -0
  434. data/ext/gecode-2.2.0/gecode/set.hh +970 -0
  435. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/array.cc +0 -0
  436. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/array.icc +0 -0
  437. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/branch.cc +0 -0
  438. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/branch.hh +0 -0
  439. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/branch/select-val.icc +0 -0
  440. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/branch/select-view.icc +0 -0
  441. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/cardinality.cc +0 -0
  442. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/convex.cc +0 -0
  443. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/convex.hh +0 -0
  444. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/convex/conv.cc +0 -0
  445. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/convex/conv.icc +0 -0
  446. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/convex/hull.cc +0 -0
  447. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/convex/hull.icc +0 -0
  448. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/distinct.cc +0 -0
  449. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/distinct.hh +0 -0
  450. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/distinct/atmostOne.cc +0 -0
  451. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/distinct/atmostOne.icc +0 -0
  452. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/dom.cc +0 -0
  453. data/ext/gecode-2.2.0/gecode/set/element.cc +135 -0
  454. data/ext/gecode-2.2.0/gecode/set/element.hh +233 -0
  455. data/ext/gecode-2.2.0/gecode/set/element/disjoint.cc +308 -0
  456. data/ext/gecode-2.2.0/gecode/set/element/disjoint.icc +75 -0
  457. data/ext/gecode-2.2.0/gecode/set/element/idxarray.hh +113 -0
  458. data/ext/gecode-2.2.0/gecode/set/element/idxarray.icc +155 -0
  459. data/ext/gecode-2.2.0/gecode/set/element/inter.icc +348 -0
  460. data/ext/gecode-2.2.0/gecode/set/element/union.icc +371 -0
  461. data/ext/gecode-2.2.0/gecode/set/element/unionConst.icc +334 -0
  462. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/exception.icc +0 -0
  463. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/int.cc +0 -0
  464. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/int.hh +0 -0
  465. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/int/card.icc +0 -0
  466. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/int/channel-bool.icc +0 -0
  467. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/int/channel-int.icc +0 -0
  468. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/int/match.icc +0 -0
  469. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/int/minmax.icc +0 -0
  470. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/int/weights.icc +0 -0
  471. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/limits.icc +0 -0
  472. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/projectors-compiler.hh +0 -0
  473. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/projectors.cc +0 -0
  474. data/ext/gecode-2.2.0/gecode/set/projectors.hh +438 -0
  475. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/projectors/compiler.cc +0 -0
  476. data/ext/gecode-2.2.0/gecode/set/projectors/formula.cc +312 -0
  477. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/projectors/formula.icc +0 -0
  478. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/projectors/projector-set.cc +0 -0
  479. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/projectors/projector-set.icc +0 -0
  480. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/projectors/projector.cc +0 -0
  481. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/projectors/projector.icc +0 -0
  482. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/projectors/propagator.hh +0 -0
  483. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/projectors/propagator/card.icc +0 -0
  484. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/projectors/propagator/nary.icc +0 -0
  485. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/projectors/propagator/re-nary.cc +0 -0
  486. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/projectors/propagator/re-nary.icc +0 -0
  487. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/projectors/set-expr.cc +0 -0
  488. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/projectors/set-expr.icc +0 -0
  489. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/propagator.icc +0 -0
  490. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/rel-op-const.cc +0 -0
  491. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/rel-op.cc +0 -0
  492. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/rel-op.hh +0 -0
  493. data/ext/gecode-2.2.0/gecode/set/rel-op/common.icc +613 -0
  494. data/ext/gecode-2.2.0/gecode/set/rel-op/inter.icc +452 -0
  495. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/rel-op/partition.icc +0 -0
  496. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/rel-op/post.icc +0 -0
  497. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/rel-op/subofunion.icc +0 -0
  498. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/rel-op/superofinter.icc +0 -0
  499. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/rel-op/union.icc +0 -0
  500. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/rel.cc +0 -0
  501. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/rel.hh +0 -0
  502. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/rel/common.icc +0 -0
  503. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/rel/eq.icc +0 -0
  504. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/rel/nosubset.icc +0 -0
  505. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/rel/nq.icc +0 -0
  506. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/rel/re-eq.icc +0 -0
  507. data/ext/gecode-2.2.0/gecode/set/rel/re-subset.icc +174 -0
  508. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/rel/subset.icc +0 -0
  509. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/sequence.cc +0 -0
  510. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/sequence.hh +0 -0
  511. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/sequence/common.icc +0 -0
  512. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/sequence/seq-u.cc +0 -0
  513. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/sequence/seq-u.icc +0 -0
  514. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/sequence/seq.cc +0 -0
  515. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/sequence/seq.icc +0 -0
  516. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/var-imp.icc +0 -0
  517. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/var-imp/delta.icc +0 -0
  518. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/var-imp/integerset.cc +0 -0
  519. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/var-imp/integerset.icc +0 -0
  520. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/var-imp/iter.icc +0 -0
  521. data/ext/gecode-2.2.0/gecode/set/var-imp/set.cc +215 -0
  522. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/var-imp/set.icc +0 -0
  523. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/var-imp/set.vis +0 -0
  524. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/var/set.cc +0 -0
  525. data/ext/gecode-2.2.0/gecode/set/var/set.icc +303 -0
  526. data/ext/gecode-2.2.0/gecode/set/view.icc +1451 -0
  527. data/ext/gecode-2.2.0/gecode/set/view/complement.icc +614 -0
  528. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/view/const.icc +0 -0
  529. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/view/offset.icc +0 -0
  530. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/view/print.cc +0 -0
  531. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/view/set.icc +0 -0
  532. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/set/view/singleton.icc +0 -0
  533. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support.hh +0 -0
  534. data/ext/gecode-2.2.0/gecode/support/block-allocator.icc +159 -0
  535. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/buddy/AUTHORS +0 -0
  536. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/buddy/ChangeLog +0 -0
  537. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/buddy/NEWS +0 -0
  538. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/buddy/README +0 -0
  539. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/buddy/bdd.h +0 -0
  540. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/buddy/bddio.c +0 -0
  541. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/buddy/bddop.c +0 -0
  542. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/buddy/bddtree.h +0 -0
  543. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/buddy/bvec.c +0 -0
  544. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/buddy/bvec.h +0 -0
  545. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/buddy/cache.c +0 -0
  546. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/buddy/cache.h +0 -0
  547. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/buddy/config.h +0 -0
  548. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/buddy/cppext.cc +0 -0
  549. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/buddy/fdd.c +0 -0
  550. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/buddy/fdd.h +0 -0
  551. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/buddy/imatrix.c +0 -0
  552. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/buddy/imatrix.h +0 -0
  553. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/buddy/kernel.c +0 -0
  554. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/buddy/kernel.h +0 -0
  555. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/buddy/pairs.c +0 -0
  556. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/buddy/prime.c +0 -0
  557. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/buddy/prime.h +0 -0
  558. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/buddy/reorder.c +0 -0
  559. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/buddy/tree.c +0 -0
  560. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/cast.icc +0 -0
  561. data/ext/gecode-2.2.0/gecode/support/config.icc.in +83 -0
  562. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/dynamic-array.icc +0 -0
  563. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/dynamic-stack.icc +0 -0
  564. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/exception.cc +0 -0
  565. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/exception.icc +0 -0
  566. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/macros.icc +0 -0
  567. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/map.icc +0 -0
  568. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/marked-pointer.icc +0 -0
  569. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/memory.icc +0 -0
  570. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/random.icc +0 -0
  571. data/ext/gecode-2.2.0/gecode/support/sentinel-stack.icc +138 -0
  572. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/sort.icc +0 -0
  573. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/static-pqueue.icc +0 -0
  574. data/ext/{gecode-2.1.1 → gecode-2.2.0}/gecode/support/static-stack.icc +0 -0
  575. data/ext/gecode-2.2.0/gecode/support/symbol.cc +241 -0
  576. data/ext/gecode-2.2.0/gecode/support/symbol.icc +134 -0
  577. data/ext/{gecode-2.1.1 → gecode-2.2.0}/install-sh +0 -0
  578. data/ext/{gecode-2.1.1 → gecode-2.2.0}/misc/AppleHelpbookInfo.plist +0 -0
  579. data/ext/{gecode-2.1.1 → gecode-2.2.0}/misc/allexamples.perl +0 -0
  580. data/ext/{gecode-2.1.1 → gecode-2.2.0}/misc/debian/Makefile.am +0 -0
  581. data/ext/{gecode-2.1.1 → gecode-2.2.0}/misc/debian/changelog +0 -0
  582. data/ext/{gecode-2.1.1 → gecode-2.2.0}/misc/debian/control +0 -0
  583. data/ext/{gecode-2.1.1 → gecode-2.2.0}/misc/debian/copyright +0 -0
  584. data/ext/{gecode-2.1.1 → gecode-2.2.0}/misc/debian/gecode.info +0 -0
  585. data/ext/{gecode-2.1.1 → gecode-2.2.0}/misc/debian/gecode.install +0 -0
  586. data/ext/{gecode-2.1.1 → gecode-2.2.0}/misc/debian/gecode.spec +0 -0
  587. data/ext/{gecode-2.1.1 → gecode-2.2.0}/misc/debian/rules +0 -0
  588. data/ext/{gecode-2.1.1 → gecode-2.2.0}/misc/doxygen/back.png +0 -0
  589. data/ext/{gecode-2.1.1 → gecode-2.2.0}/misc/doxygen/footer.html +0 -0
  590. data/ext/{gecode-2.1.1 → gecode-2.2.0}/misc/doxygen/gecode-logo-100.png +0 -0
  591. data/ext/{gecode-2.1.1 → gecode-2.2.0}/misc/doxygen/header.html +0 -0
  592. data/ext/{gecode-2.1.1 → gecode-2.2.0}/misc/doxygen/stylesheet.css +0 -0
  593. data/ext/{gecode-2.1.1 → gecode-2.2.0}/misc/fixproperties.sh +0 -0
  594. data/ext/gecode-2.2.0/misc/gecode-gist.pc.in +45 -0
  595. data/ext/gecode-2.2.0/misc/gecode-minimodel.pc.in +45 -0
  596. data/ext/gecode-2.2.0/misc/gecode-search.pc.in +45 -0
  597. data/ext/gecode-2.2.0/misc/gecode-serialization.pc.in +45 -0
  598. data/ext/gecode-2.2.0/misc/gecode.pc.in +45 -0
  599. data/ext/{gecode-2.1.1 → gecode-2.2.0}/misc/genchangelog.perl +0 -0
  600. data/ext/{gecode-2.1.1 → gecode-2.2.0}/misc/genlcovmakefile.perl +0 -0
  601. data/ext/{gecode-2.1.1 → gecode-2.2.0}/misc/genlicense.perl +0 -0
  602. data/ext/{gecode-2.1.1 → gecode-2.2.0}/misc/genregistry.perl +0 -0
  603. data/ext/gecode-2.2.0/misc/genstatistics.perl +179 -0
  604. data/ext/{gecode-2.1.1 → gecode-2.2.0}/misc/gentxtchangelog.perl +0 -0
  605. data/ext/gecode-2.2.0/misc/genvariables.perl +905 -0
  606. data/ext/{gecode-2.1.1 → gecode-2.2.0}/misc/getrevision.perl +0 -0
  607. data/ext/{gecode-2.1.1 → gecode-2.2.0}/misc/makedepend.perl +0 -0
  608. data/ext/{gecode-2.1.1 → gecode-2.2.0}/misc/svn-ignore.txt +0 -0
  609. data/ext/gecode-2.2.0/test/assign.cc +181 -0
  610. data/ext/gecode-2.2.0/test/assign.hh +93 -0
  611. data/ext/gecode-2.2.0/test/assign/bool.cc +61 -0
  612. data/ext/gecode-2.2.0/test/assign/int.cc +70 -0
  613. data/ext/gecode-2.2.0/test/branch.cc +563 -0
  614. data/ext/gecode-2.2.0/test/branch.hh +144 -0
  615. data/ext/gecode-2.2.0/test/branch/bool.cc +61 -0
  616. data/ext/gecode-2.2.0/test/branch/cpltset.cc +71 -0
  617. data/ext/gecode-2.2.0/test/branch/int.cc +70 -0
  618. data/ext/gecode-2.2.0/test/branch/set.cc +74 -0
  619. data/ext/gecode-2.2.0/test/cpltset.cc +568 -0
  620. data/ext/gecode-2.2.0/test/cpltset.hh +125 -0
  621. data/ext/gecode-2.2.0/test/cpltset/atmost.cc +155 -0
  622. data/ext/gecode-2.2.0/test/cpltset/cardinality.cc +138 -0
  623. data/ext/gecode-2.2.0/test/cpltset/dom.cc +137 -0
  624. data/ext/gecode-2.2.0/test/cpltset/partition.cc +210 -0
  625. data/ext/gecode-2.2.0/test/cpltset/rel.cc +158 -0
  626. data/ext/gecode-2.2.0/test/cpltset/select.cc +216 -0
  627. data/ext/gecode-2.2.0/test/int.cc +688 -0
  628. data/ext/gecode-2.2.0/test/int.hh +267 -0
  629. data/ext/gecode-2.2.0/test/int.icc +266 -0
  630. data/ext/gecode-2.2.0/test/int/arithmetic.cc +766 -0
  631. data/ext/gecode-2.2.0/test/int/basic.cc +77 -0
  632. data/ext/gecode-2.2.0/test/int/bool.cc +340 -0
  633. data/ext/gecode-2.2.0/test/int/channel.cc +238 -0
  634. data/ext/gecode-2.2.0/test/int/circuit.cc +100 -0
  635. data/ext/gecode-2.2.0/test/int/count.cc +357 -0
  636. data/ext/gecode-2.2.0/test/int/distinct.cc +248 -0
  637. data/ext/gecode-2.2.0/test/int/dom.cc +123 -0
  638. data/ext/gecode-2.2.0/test/int/element.cc +333 -0
  639. data/ext/gecode-2.2.0/test/int/extensional.cc +475 -0
  640. data/ext/gecode-2.2.0/test/int/gcc.cc +293 -0
  641. data/ext/gecode-2.2.0/test/int/linear.cc +383 -0
  642. data/ext/gecode-2.2.0/test/int/mm-arithmetic.cc +302 -0
  643. data/ext/gecode-2.2.0/test/int/mm-bool.cc +4342 -0
  644. data/ext/gecode-2.2.0/test/int/mm-count.cc +295 -0
  645. data/ext/gecode-2.2.0/test/int/mm-lin.cc +2035 -0
  646. data/ext/gecode-2.2.0/test/int/mm-rel.cc +136 -0
  647. data/ext/gecode-2.2.0/test/int/rel.cc +416 -0
  648. data/ext/gecode-2.2.0/test/int/scheduling.cc +276 -0
  649. data/ext/gecode-2.2.0/test/int/sorted.cc +165 -0
  650. data/ext/gecode-2.2.0/test/int/unshare.cc +109 -0
  651. data/ext/gecode-2.2.0/test/search.cc +618 -0
  652. data/ext/gecode-2.2.0/test/set.cc +753 -0
  653. data/ext/gecode-2.2.0/test/set.hh +286 -0
  654. data/ext/gecode-2.2.0/test/set.icc +108 -0
  655. data/ext/gecode-2.2.0/test/set/convex.cc +139 -0
  656. data/ext/gecode-2.2.0/test/set/distinct.cc +116 -0
  657. data/ext/gecode-2.2.0/test/set/dom.cc +292 -0
  658. data/ext/gecode-2.2.0/test/set/int.cc +473 -0
  659. data/ext/gecode-2.2.0/test/set/projection.cc +436 -0
  660. data/ext/gecode-2.2.0/test/set/rel-op-const.cc +368 -0
  661. data/ext/gecode-2.2.0/test/set/rel-op.cc +465 -0
  662. data/ext/gecode-2.2.0/test/set/rel.cc +125 -0
  663. data/ext/gecode-2.2.0/test/set/select.cc +299 -0
  664. data/ext/gecode-2.2.0/test/set/sequence.cc +125 -0
  665. data/ext/gecode-2.2.0/test/test.cc +287 -0
  666. data/ext/gecode-2.2.0/test/test.hh +175 -0
  667. data/ext/gecode-2.2.0/test/test.icc +93 -0
  668. data/ext/{gecode-2.1.1 → gecode-2.2.0}/variables.vsl +0 -0
  669. data/lib/gecoder/bindings.rb +7 -5
  670. data/lib/gecoder/bindings/bindings.rb +8 -8
  671. data/lib/gecoder/interface.rb +4 -2
  672. data/lib/gecoder/interface/binding_changes.rb +1 -1
  673. data/lib/gecoder/interface/branch.rb +1 -1
  674. data/lib/gecoder/interface/constraints/bool_enum_constraints.rb +4 -4
  675. data/lib/gecoder/interface/constraints/bool_var_constraints.rb +2 -2
  676. data/lib/gecoder/interface/constraints/extensional_regexp.rb +1 -1
  677. data/lib/gecoder/interface/constraints/fixnum_enum_constraints.rb +2 -2
  678. data/lib/gecoder/interface/constraints/int_enum/extensional.rb +5 -5
  679. data/lib/gecoder/interface/constraints/int_enum_constraints.rb +4 -4
  680. data/lib/gecoder/interface/constraints/int_var_constraints.rb +2 -2
  681. data/lib/gecoder/interface/constraints/selected_set/select.rb +8 -8
  682. data/lib/gecoder/interface/constraints/set_enum/element.rb +79 -0
  683. data/lib/gecoder/interface/constraints/set_enum_constraints.rb +5 -5
  684. data/lib/gecoder/interface/constraints/set_var_constraints.rb +2 -2
  685. data/lib/gecoder/interface/convenience.rb +99 -0
  686. data/lib/gecoder/interface/enum_wrapper.rb +1 -1
  687. data/lib/gecoder/interface/mixin.rb +486 -0
  688. data/lib/gecoder/interface/search.rb +23 -22
  689. data/lib/gecoder/version.rb +1 -1
  690. data/specs/branch.rb +5 -3
  691. data/specs/constraints/bool/boolean.rb +3 -1
  692. data/specs/constraints/bool/linear.rb +3 -1
  693. data/specs/constraints/bool_enum/bool_enum_relation.rb +3 -1
  694. data/specs/constraints/bool_enum/channel.rb +3 -1
  695. data/specs/constraints/fixnum_enum/element.rb +3 -1
  696. data/specs/constraints/int/arithmetic.rb +3 -1
  697. data/specs/constraints/int/channel.rb +3 -1
  698. data/specs/constraints/int/linear.rb +3 -1
  699. data/specs/constraints/int/linear_properties.rb +3 -1
  700. data/specs/constraints/int_enum/arithmetic.rb +3 -1
  701. data/specs/constraints/int_enum/channel.rb +3 -1
  702. data/specs/constraints/int_enum/count.rb +3 -1
  703. data/specs/constraints/int_enum/distinct.rb +3 -1
  704. data/specs/constraints/int_enum/element.rb +3 -1
  705. data/specs/constraints/int_enum/sort.rb +3 -1
  706. data/specs/constraints/property_helper.rb +10 -10
  707. data/specs/constraints/reification_sugar.rb +3 -1
  708. data/specs/constraints/selected_set/select.rb +6 -5
  709. data/specs/constraints/selected_set/select_properties.rb +12 -10
  710. data/specs/constraints/set/channel.rb +3 -1
  711. data/specs/constraints/set/domain.rb +4 -4
  712. data/specs/constraints/set/relation.rb +4 -4
  713. data/specs/constraints/set_enum/channel.rb +3 -1
  714. data/specs/constraints/set_enum/distinct.rb +3 -1
  715. data/specs/constraints/set_enum/element.rb +77 -0
  716. data/specs/enum_wrapper.rb +1 -1
  717. data/specs/mixin.rb +78 -0
  718. data/specs/model.rb +5 -5
  719. data/specs/search.rb +20 -14
  720. data/specs/selected_set.rb +3 -3
  721. data/specs/set_elements.rb +2 -2
  722. data/tasks/distribution.rake +25 -4
  723. metadata +739 -602
  724. data/example/money.rb +0 -36
  725. data/ext/gecode-2.1.1/Makefile.dep +0 -7622
  726. data/ext/gecode-2.1.1/Makefile.in +0 -1568
  727. data/ext/gecode-2.1.1/changelog.in +0 -2459
  728. data/ext/gecode-2.1.1/configure +0 -11631
  729. data/ext/gecode-2.1.1/configure.ac +0 -249
  730. data/ext/gecode-2.1.1/configure.ac.in +0 -245
  731. data/ext/gecode-2.1.1/contribs/qecode/Doxyfile +0 -263
  732. data/ext/gecode-2.1.1/contribs/qecode/FirstFailValueHeuristic.cc +0 -82
  733. data/ext/gecode-2.1.1/contribs/qecode/FirstFailValueHeuristic.hh +0 -37
  734. data/ext/gecode-2.1.1/contribs/qecode/Makefile.in.in +0 -162
  735. data/ext/gecode-2.1.1/contribs/qecode/NaiveValueHeuristics.cc +0 -172
  736. data/ext/gecode-2.1.1/contribs/qecode/NaiveValueHeuristics.hh +0 -63
  737. data/ext/gecode-2.1.1/contribs/qecode/SDFVariableHeuristic.cc +0 -37
  738. data/ext/gecode-2.1.1/contribs/qecode/SDFVariableHeuristic.hh +0 -35
  739. data/ext/gecode-2.1.1/contribs/qecode/configure +0 -2264
  740. data/ext/gecode-2.1.1/contribs/qecode/configure.ac +0 -23
  741. data/ext/gecode-2.1.1/contribs/qecode/examples/COMPILING +0 -13
  742. data/ext/gecode-2.1.1/contribs/qecode/examples/MatrixGame.cpp +0 -144
  743. data/ext/gecode-2.1.1/contribs/qecode/examples/NimFibo.cpp +0 -73
  744. data/ext/gecode-2.1.1/contribs/qecode/examples/stress_test.cpp +0 -179
  745. data/ext/gecode-2.1.1/contribs/qecode/extensivecomparator.cc +0 -34
  746. data/ext/gecode-2.1.1/contribs/qecode/extensivecomparator.hh +0 -46
  747. data/ext/gecode-2.1.1/contribs/qecode/implicative.cc +0 -595
  748. data/ext/gecode-2.1.1/contribs/qecode/implicative.hh +0 -184
  749. data/ext/gecode-2.1.1/contribs/qecode/myspace.hh +0 -69
  750. data/ext/gecode-2.1.1/contribs/qecode/qecore.cc +0 -145
  751. data/ext/gecode-2.1.1/contribs/qecode/qecore.hh +0 -247
  752. data/ext/gecode-2.1.1/contribs/qecode/qsolver.cc +0 -168
  753. data/ext/gecode-2.1.1/contribs/qecode/qsolver.hh +0 -73
  754. data/ext/gecode-2.1.1/contribs/qecode/valueHeuristic.hh +0 -91
  755. data/ext/gecode-2.1.1/contribs/qecode/warner.cc +0 -101
  756. data/ext/gecode-2.1.1/contribs/qecode/warner.hh +0 -83
  757. data/ext/gecode-2.1.1/doxygen/doxygen.hh.in +0 -1111
  758. data/ext/gecode-2.1.1/doxygen/reflection.hh +0 -417
  759. data/ext/gecode-2.1.1/gecode.m4 +0 -956
  760. data/ext/gecode-2.1.1/gecode/cpltset.hh +0 -797
  761. data/ext/gecode-2.1.1/gecode/gist/analysiscursor.cc +0 -115
  762. data/ext/gecode-2.1.1/gecode/gist/analysiscursor.hh +0 -77
  763. data/ext/gecode-2.1.1/gecode/gist/drawingcursor.cc +0 -245
  764. data/ext/gecode-2.1.1/gecode/gist/drawingcursor.hh +0 -101
  765. data/ext/gecode-2.1.1/gecode/gist/gecodelogo.icc +0 -522
  766. data/ext/gecode-2.1.1/gecode/gist/mainwindow.cc +0 -254
  767. data/ext/gecode-2.1.1/gecode/gist/mainwindow.hh +0 -86
  768. data/ext/gecode-2.1.1/gecode/gist/node.cc +0 -100
  769. data/ext/gecode-2.1.1/gecode/gist/node.hh +0 -89
  770. data/ext/gecode-2.1.1/gecode/gist/nodecursor.cc +0 -124
  771. data/ext/gecode-2.1.1/gecode/gist/nodecursor.hh +0 -122
  772. data/ext/gecode-2.1.1/gecode/gist/nodecursor.icc +0 -79
  773. data/ext/gecode-2.1.1/gecode/gist/postscript.cc +0 -543
  774. data/ext/gecode-2.1.1/gecode/gist/postscript.hh +0 -56
  775. data/ext/gecode-2.1.1/gecode/gist/preferences.cc +0 -110
  776. data/ext/gecode-2.1.1/gecode/gist/preferences.hh +0 -76
  777. data/ext/gecode-2.1.1/gecode/gist/reflectionhelpers.cc +0 -55
  778. data/ext/gecode-2.1.1/gecode/gist/reflectionhelpers.hh +0 -58
  779. data/ext/gecode-2.1.1/gecode/gist/shapelist.cc +0 -331
  780. data/ext/gecode-2.1.1/gecode/gist/shapelist.hh +0 -140
  781. data/ext/gecode-2.1.1/gecode/gist/spacenode.cc +0 -531
  782. data/ext/gecode-2.1.1/gecode/gist/spacenode.hh +0 -224
  783. data/ext/gecode-2.1.1/gecode/gist/textoutput.cc +0 -114
  784. data/ext/gecode-2.1.1/gecode/gist/treecanvas.cc +0 -1140
  785. data/ext/gecode-2.1.1/gecode/gist/treecanvas.hh +0 -324
  786. data/ext/gecode-2.1.1/gecode/gist/ui_addvisualisationdialog.hh +0 -163
  787. data/ext/gecode-2.1.1/gecode/gist/visualisation/intvaritem.cc +0 -175
  788. data/ext/gecode-2.1.1/gecode/gist/visualisation/intvaritem.hh +0 -71
  789. data/ext/gecode-2.1.1/gecode/gist/visualisation/setvaritem.cc +0 -219
  790. data/ext/gecode-2.1.1/gecode/gist/visualisation/setvaritem.hh +0 -73
  791. data/ext/gecode-2.1.1/gecode/gist/visualisation/vararrayitem.hh +0 -123
  792. data/ext/gecode-2.1.1/gecode/gist/visualnode.cc +0 -303
  793. data/ext/gecode-2.1.1/gecode/gist/visualnode.hh +0 -166
  794. data/ext/gecode-2.1.1/gecode/int.hh +0 -2035
  795. data/ext/gecode-2.1.1/gecode/int/arithmetic.cc +0 -136
  796. data/ext/gecode-2.1.1/gecode/int/arithmetic.hh +0 -440
  797. data/ext/gecode-2.1.1/gecode/int/arithmetic/abs.icc +0 -279
  798. data/ext/gecode-2.1.1/gecode/int/arithmetic/max.icc +0 -253
  799. data/ext/gecode-2.1.1/gecode/int/arithmetic/mult.icc +0 -522
  800. data/ext/gecode-2.1.1/gecode/int/arithmetic/sqr.icc +0 -218
  801. data/ext/gecode-2.1.1/gecode/int/arithmetic/sqrt.icc +0 -138
  802. data/ext/gecode-2.1.1/gecode/int/bool.cc +0 -642
  803. data/ext/gecode-2.1.1/gecode/int/bool/or.icc +0 -1000
  804. data/ext/gecode-2.1.1/gecode/int/branch.cc +0 -301
  805. data/ext/gecode-2.1.1/gecode/int/branch.hh +0 -576
  806. data/ext/gecode-2.1.1/gecode/int/branch/select-val.icc +0 -338
  807. data/ext/gecode-2.1.1/gecode/int/channel.cc +0 -114
  808. data/ext/gecode-2.1.1/gecode/int/channel.hh +0 -259
  809. data/ext/gecode-2.1.1/gecode/int/channel/dom.icc +0 -347
  810. data/ext/gecode-2.1.1/gecode/int/channel/val.icc +0 -276
  811. data/ext/gecode-2.1.1/gecode/int/circuit.hh +0 -175
  812. data/ext/gecode-2.1.1/gecode/int/circuit/base.icc +0 -271
  813. data/ext/gecode-2.1.1/gecode/int/circuit/val.icc +0 -122
  814. data/ext/gecode-2.1.1/gecode/int/count.hh +0 -487
  815. data/ext/gecode-2.1.1/gecode/int/count/int.icc +0 -619
  816. data/ext/gecode-2.1.1/gecode/int/count/rel.icc +0 -144
  817. data/ext/gecode-2.1.1/gecode/int/count/view.icc +0 -449
  818. data/ext/gecode-2.1.1/gecode/int/cumulatives.hh +0 -141
  819. data/ext/gecode-2.1.1/gecode/int/cumulatives/val.icc +0 -429
  820. data/ext/gecode-2.1.1/gecode/int/distinct.hh +0 -341
  821. data/ext/gecode-2.1.1/gecode/int/distinct/dom.icc +0 -750
  822. data/ext/gecode-2.1.1/gecode/int/distinct/ter-dom.icc +0 -136
  823. data/ext/gecode-2.1.1/gecode/int/element.hh +0 -239
  824. data/ext/gecode-2.1.1/gecode/int/element/int.icc +0 -441
  825. data/ext/gecode-2.1.1/gecode/int/element/view.icc +0 -584
  826. data/ext/gecode-2.1.1/gecode/int/exception.icc +0 -163
  827. data/ext/gecode-2.1.1/gecode/int/extensional.hh +0 -415
  828. data/ext/gecode-2.1.1/gecode/int/extensional/dfa.cc +0 -565
  829. data/ext/gecode-2.1.1/gecode/int/extensional/tuple-set.cc +0 -311
  830. data/ext/gecode-2.1.1/gecode/int/gcc.hh +0 -329
  831. data/ext/gecode-2.1.1/gecode/int/gcc/bnd.icc +0 -660
  832. data/ext/gecode-2.1.1/gecode/int/gcc/dom.icc +0 -531
  833. data/ext/gecode-2.1.1/gecode/int/gcc/val.icc +0 -400
  834. data/ext/gecode-2.1.1/gecode/int/int-set.cc +0 -153
  835. data/ext/gecode-2.1.1/gecode/int/int-set.icc +0 -191
  836. data/ext/gecode-2.1.1/gecode/int/linear-bool.cc +0 -220
  837. data/ext/gecode-2.1.1/gecode/int/linear-int.cc +0 -240
  838. data/ext/gecode-2.1.1/gecode/int/linear.hh +0 -1849
  839. data/ext/gecode-2.1.1/gecode/int/linear/bool-post.cc +0 -433
  840. data/ext/gecode-2.1.1/gecode/int/linear/int-bin.icc +0 -605
  841. data/ext/gecode-2.1.1/gecode/int/linear/int-dom.icc +0 -539
  842. data/ext/gecode-2.1.1/gecode/int/linear/int-post.cc +0 -493
  843. data/ext/gecode-2.1.1/gecode/int/rel.cc +0 -431
  844. data/ext/gecode-2.1.1/gecode/int/rel.hh +0 -657
  845. data/ext/gecode-2.1.1/gecode/int/rel/eq.icc +0 -848
  846. data/ext/gecode-2.1.1/gecode/int/rel/lex.icc +0 -248
  847. data/ext/gecode-2.1.1/gecode/int/rel/nq.icc +0 -269
  848. data/ext/gecode-2.1.1/gecode/int/sorted.cc +0 -91
  849. data/ext/gecode-2.1.1/gecode/int/sorted.hh +0 -117
  850. data/ext/gecode-2.1.1/gecode/int/sorted/matching.icc +0 -182
  851. data/ext/gecode-2.1.1/gecode/int/sorted/narrowing.icc +0 -257
  852. data/ext/gecode-2.1.1/gecode/int/sorted/order.icc +0 -208
  853. data/ext/gecode-2.1.1/gecode/int/sorted/propagate.icc +0 -669
  854. data/ext/gecode-2.1.1/gecode/int/sorted/sortsup.icc +0 -596
  855. data/ext/gecode-2.1.1/gecode/int/var-imp.icc +0 -745
  856. data/ext/gecode-2.1.1/gecode/int/var-imp/bool.cc +0 -104
  857. data/ext/gecode-2.1.1/gecode/int/var-imp/int.cc +0 -407
  858. data/ext/gecode-2.1.1/gecode/int/var/bool.icc +0 -126
  859. data/ext/gecode-2.1.1/gecode/int/var/int.icc +0 -151
  860. data/ext/gecode-2.1.1/gecode/int/view.icc +0 -1894
  861. data/ext/gecode-2.1.1/gecode/iter.hh +0 -90
  862. data/ext/gecode-2.1.1/gecode/iter/values-minus.icc +0 -130
  863. data/ext/gecode-2.1.1/gecode/kernel.hh +0 -182
  864. data/ext/gecode-2.1.1/gecode/kernel/branching.icc +0 -447
  865. data/ext/gecode-2.1.1/gecode/kernel/core.cc +0 -473
  866. data/ext/gecode-2.1.1/gecode/kernel/core.icc +0 -2295
  867. data/ext/gecode-2.1.1/gecode/kernel/memory-manager.icc +0 -458
  868. data/ext/gecode-2.1.1/gecode/kernel/reflection.cc +0 -921
  869. data/ext/gecode-2.1.1/gecode/kernel/reflection.icc +0 -1012
  870. data/ext/gecode-2.1.1/gecode/kernel/var-imp.icc +0 -433
  871. data/ext/gecode-2.1.1/gecode/kernel/var-map.cc +0 -269
  872. data/ext/gecode-2.1.1/gecode/kernel/var-map.icc +0 -227
  873. data/ext/gecode-2.1.1/gecode/kernel/var-traits.icc +0 -72
  874. data/ext/gecode-2.1.1/gecode/kernel/var-type.icc +0 -915
  875. data/ext/gecode-2.1.1/gecode/kernel/var.icc +0 -120
  876. data/ext/gecode-2.1.1/gecode/kernel/view.icc +0 -611
  877. data/ext/gecode-2.1.1/gecode/minimodel.hh +0 -1165
  878. data/ext/gecode-2.1.1/gecode/minimodel/arithmetic.cc +0 -179
  879. data/ext/gecode-2.1.1/gecode/search.hh +0 -752
  880. data/ext/gecode-2.1.1/gecode/search/reco-stack.icc +0 -237
  881. data/ext/gecode-2.1.1/gecode/serialization.hh +0 -149
  882. data/ext/gecode-2.1.1/gecode/serialization/boost.cc +0 -78
  883. data/ext/gecode-2.1.1/gecode/serialization/javascript.cc +0 -340
  884. data/ext/gecode-2.1.1/gecode/serialization/register.cc +0 -8142
  885. data/ext/gecode-2.1.1/gecode/set.hh +0 -970
  886. data/ext/gecode-2.1.1/gecode/set/projectors.hh +0 -438
  887. data/ext/gecode-2.1.1/gecode/set/projectors/formula.cc +0 -312
  888. data/ext/gecode-2.1.1/gecode/set/rel-op/common.icc +0 -557
  889. data/ext/gecode-2.1.1/gecode/set/rel-op/inter.icc +0 -409
  890. data/ext/gecode-2.1.1/gecode/set/rel/re-subset.icc +0 -172
  891. data/ext/gecode-2.1.1/gecode/set/select.cc +0 -135
  892. data/ext/gecode-2.1.1/gecode/set/select.hh +0 -233
  893. data/ext/gecode-2.1.1/gecode/set/select/disjoint.cc +0 -308
  894. data/ext/gecode-2.1.1/gecode/set/select/disjoint.icc +0 -75
  895. data/ext/gecode-2.1.1/gecode/set/select/idxarray.hh +0 -113
  896. data/ext/gecode-2.1.1/gecode/set/select/idxarray.icc +0 -155
  897. data/ext/gecode-2.1.1/gecode/set/select/inter.icc +0 -349
  898. data/ext/gecode-2.1.1/gecode/set/select/union.icc +0 -371
  899. data/ext/gecode-2.1.1/gecode/set/select/unionConst.icc +0 -334
  900. data/ext/gecode-2.1.1/gecode/set/var-imp/set.cc +0 -214
  901. data/ext/gecode-2.1.1/gecode/set/var/set.icc +0 -303
  902. data/ext/gecode-2.1.1/gecode/set/view.icc +0 -1503
  903. data/ext/gecode-2.1.1/gecode/set/view/complement.icc +0 -629
  904. data/ext/gecode-2.1.1/gecode/support/block-allocator.icc +0 -158
  905. data/ext/gecode-2.1.1/gecode/support/config.icc.in +0 -80
  906. data/ext/gecode-2.1.1/gecode/support/sentinel-stack.icc +0 -122
  907. data/ext/gecode-2.1.1/gecode/support/symbol.cc +0 -226
  908. data/ext/gecode-2.1.1/gecode/support/symbol.icc +0 -130
  909. data/ext/gecode-2.1.1/misc/gecode-gist.pc.in +0 -45
  910. data/ext/gecode-2.1.1/misc/gecode-minimodel.pc.in +0 -45
  911. data/ext/gecode-2.1.1/misc/gecode-search.pc.in +0 -45
  912. data/ext/gecode-2.1.1/misc/gecode-serialization.pc.in +0 -45
  913. data/ext/gecode-2.1.1/misc/gecode.pc.in +0 -45
  914. data/ext/gecode-2.1.1/misc/genstatistics.perl +0 -178
  915. data/ext/gecode-2.1.1/misc/genvariables.perl +0 -905
  916. data/lib/gecoder/interface/constraints/set_enum/select.rb +0 -79
  917. data/lib/gecoder/interface/model.rb +0 -453
  918. data/lib/gecoder/interface/model_sugar.rb +0 -84
  919. data/specs/constraints/set_enum/select.rb +0 -73
@@ -0,0 +1,97 @@
1
+ /* -*- mode: C++; c-basic-offset: 2; indent-tabs-mode: nil -*- */
2
+ /*
3
+ * Main authors:
4
+ * Christian Schulte <schulte@gecode.org>
5
+ *
6
+ * Copyright:
7
+ * Christian Schulte, 2007
8
+ *
9
+ * Last modified:
10
+ * $Date: 2007-11-30 13:58:34 +0100 (Fri, 30 Nov 2007) $ by $Author: tack $
11
+ * $Revision: 5524 $
12
+ *
13
+ * This file is part of Gecode, the generic constraint
14
+ * development environment:
15
+ * http://www.gecode.org
16
+ *
17
+ * Permission is hereby granted, free of charge, to any person obtaining
18
+ * a copy of this software and associated documentation files (the
19
+ * "Software"), to deal in the Software without restriction, including
20
+ * without limitation the rights to use, copy, modify, merge, publish,
21
+ * distribute, sublicense, and/or sell copies of the Software, and to
22
+ * permit persons to whom the Software is furnished to do so, subject to
23
+ * the following conditions:
24
+ *
25
+ * The above copyright notice and this permission notice shall be
26
+ * included in all copies or substantial portions of the Software.
27
+ *
28
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
29
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
30
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
31
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
32
+ * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
33
+ * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
34
+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
35
+ *
36
+ */
37
+
38
+ #include "examples/support.hh"
39
+
40
+
41
+ /**
42
+ * \brief %Example: Stress linear Boolean inequality
43
+ *
44
+ * \ingroup ExStress
45
+ */
46
+ class StressLinearBool : public Example {
47
+ protected:
48
+ /// Variables
49
+ BoolVarArray x;
50
+ public:
51
+ /// Constructor for the model
52
+ StressLinearBool(const SizeOptions& opt)
53
+ : x(this,4*opt.size()+1,0,1) {
54
+
55
+ linear(this, x, IRT_GQ, 2*opt.size());
56
+
57
+ for (unsigned int i=0; i<opt.size(); i++) {
58
+ // Assign a variable
59
+ rel(this, x[opt.size()-1-i], IRT_EQ, 0);
60
+ // Propagate
61
+ (void) status();
62
+ // Assign a variable
63
+ rel(this, x[opt.size()+i], IRT_EQ, 0);
64
+ // Propagate
65
+ (void) status();
66
+ }
67
+
68
+ }
69
+ /// Constructor for cloning \a s
70
+ StressLinearBool(bool share, StressLinearBool& s) : Example(share,s) {
71
+ x.update(this, share, s.x);
72
+ }
73
+ /// Perform copying during cloning
74
+ virtual Space*
75
+ copy(bool share) {
76
+ return new StressLinearBool(share,*this);
77
+ }
78
+ /// Print solution
79
+ virtual void
80
+ print(std::ostream& os) {
81
+ os << "\tx[" << x.size() << "] = " << x << std::endl;
82
+ }
83
+ };
84
+
85
+ /** \brief Main-function
86
+ * \relates StressLinearBool
87
+ */
88
+ int
89
+ main(int argc, char* argv[]) {
90
+ SizeOptions opt("StressLinearBool");
91
+ opt.size(1000);
92
+ opt.parse(argc,argv);
93
+ Example::run<StressLinearBool,DFS,SizeOptions>(opt);
94
+ return 0;
95
+ }
96
+
97
+ // STATISTICS: example-any
@@ -0,0 +1,98 @@
1
+ /* -*- mode: C++; c-basic-offset: 2; indent-tabs-mode: nil -*- */
2
+ /*
3
+ * Main authors:
4
+ * Christian Schulte <schulte@gecode.org>
5
+ *
6
+ * Copyright:
7
+ * Christian Schulte, 2004
8
+ *
9
+ * Last modified:
10
+ * $Date: 2007-11-30 13:58:34 +0100 (Fri, 30 Nov 2007) $ by $Author: tack $
11
+ * $Revision: 5524 $
12
+ *
13
+ * This file is part of Gecode, the generic constraint
14
+ * development environment:
15
+ * http://www.gecode.org
16
+ *
17
+ * Permission is hereby granted, free of charge, to any person obtaining
18
+ * a copy of this software and associated documentation files (the
19
+ * "Software"), to deal in the Software without restriction, including
20
+ * without limitation the rights to use, copy, modify, merge, publish,
21
+ * distribute, sublicense, and/or sell copies of the Software, and to
22
+ * permit persons to whom the Software is furnished to do so, subject to
23
+ * the following conditions:
24
+ *
25
+ * The above copyright notice and this permission notice shall be
26
+ * included in all copies or substantial portions of the Software.
27
+ *
28
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
29
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
30
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
31
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
32
+ * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
33
+ * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
34
+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
35
+ *
36
+ */
37
+
38
+ #include "examples/support.hh"
39
+
40
+ /**
41
+ * \brief %Example: Stress test for the minimum constraint
42
+ *
43
+ * \ingroup ExStress
44
+ *
45
+ */
46
+ class StressMin : public Example {
47
+ protected:
48
+ /// Size of problem
49
+ const int n;
50
+ /// Variables
51
+ IntVarArray x;
52
+ public:
53
+ /// The actual problem
54
+ StressMin(const SizeOptions& opt)
55
+ : n(opt.size()), x(this,n,0,2*n-1) {
56
+ for (int i=1; i<n; i++) {
57
+ IntVarArgs y(i);
58
+ for (int j=0; j<i; j++)
59
+ y[j]=x[j];
60
+ IntVar m(this,0,2*n);
61
+ min(this, y, m);
62
+ rel(this, m, IRT_GR, x[i]);
63
+ }
64
+ branch(this, x, INT_VAR_NONE, INT_VAL_SPLIT_MAX);
65
+ }
66
+
67
+ /// Constructor for cloning \a s
68
+ StressMin(bool share, StressMin& s) : Example(share,s), n(s.n) {
69
+ x.update(this, share, s.x);
70
+ }
71
+
72
+ /// Perform copying during cloning
73
+ virtual Space*
74
+ copy(bool share) {
75
+ return new StressMin(share,*this);
76
+ }
77
+
78
+ /// Print solution
79
+ virtual void
80
+ print(std::ostream& os) {
81
+ os << "\tx[" << n << "] = " << x << std::endl;
82
+ }
83
+ };
84
+
85
+
86
+ /** \brief Main-function
87
+ * \relates StressMin
88
+ */
89
+ int
90
+ main(int argc, char* argv[]) {
91
+ SizeOptions opt("StressMin");
92
+ opt.parse(argc,argv);
93
+ opt.size(200);
94
+ Example::run<StressMin,DFS,SizeOptions>(opt);
95
+ return 0;
96
+ }
97
+
98
+ // STATISTICS: example-any
@@ -0,0 +1,88 @@
1
+ /* -*- mode: C++; c-basic-offset: 2; indent-tabs-mode: nil -*- */
2
+ /*
3
+ * Main authors:
4
+ * Christian Schulte <schulte@gecode.org>
5
+ *
6
+ * Copyright:
7
+ * Christian Schulte, 2001
8
+ *
9
+ * Last modified:
10
+ * $Date: 2007-11-30 13:58:34 +0100 (Fri, 30 Nov 2007) $ by $Author: tack $
11
+ * $Revision: 5524 $
12
+ *
13
+ * This file is part of Gecode, the generic constraint
14
+ * development environment:
15
+ * http://www.gecode.org
16
+ *
17
+ * Permission is hereby granted, free of charge, to any person obtaining
18
+ * a copy of this software and associated documentation files (the
19
+ * "Software"), to deal in the Software without restriction, including
20
+ * without limitation the rights to use, copy, modify, merge, publish,
21
+ * distribute, sublicense, and/or sell copies of the Software, and to
22
+ * permit persons to whom the Software is furnished to do so, subject to
23
+ * the following conditions:
24
+ *
25
+ * The above copyright notice and this permission notice shall be
26
+ * included in all copies or substantial portions of the Software.
27
+ *
28
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
29
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
30
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
31
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
32
+ * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
33
+ * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
34
+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
35
+ *
36
+ */
37
+
38
+ #include "examples/support.hh"
39
+
40
+ /**
41
+ * \brief %Example: Search stress test
42
+ *
43
+ * \ingroup ExStress
44
+ *
45
+ */
46
+ class StressSearch : public Example {
47
+ protected:
48
+ /// Variables
49
+ IntVarArray x;
50
+ public:
51
+ /// The actual problem
52
+ StressSearch(const SizeOptions& opt)
53
+ : x(this,opt.size(),0,opt.size()) {
54
+ branch(this, x, INT_VAR_NONE, INT_VAL_MIN);
55
+ }
56
+
57
+ /// Constructor for cloning \a s
58
+ StressSearch(bool share, StressSearch& s) : Example(share,s) {
59
+ x.update(this, share, s.x);
60
+ }
61
+
62
+ /// Perform copying during cloning
63
+ virtual Space*
64
+ copy(bool share) {
65
+ return new StressSearch(share,*this);
66
+ }
67
+
68
+ /// Print solution
69
+ virtual void
70
+ print(std::ostream&) {}
71
+ };
72
+
73
+ /** \brief Main-function
74
+ * \relates StressSearch
75
+ */
76
+ int
77
+ main(int argc, char* argv[]) {
78
+ SizeOptions opt("StressSearch");
79
+ opt.iterations(20);
80
+ opt.size(6);
81
+ opt.solutions(0);
82
+ opt.parse(argc,argv);
83
+ Example::run<StressSearch,DFS,SizeOptions>(opt);
84
+ return 0;
85
+ }
86
+
87
+ // STATISTICS: example-any
88
+
@@ -0,0 +1,2341 @@
1
+ /* -*- mode: C++; c-basic-offset: 2; indent-tabs-mode: nil -*- */
2
+ /*
3
+ * Main authors:
4
+ * Mikael Lagerkvist <lagerkvist@gecode.org>
5
+ * Guido Tack <tack@gecode.org>
6
+ * Christian Schulte <schulte@gecode.org>
7
+ *
8
+ * Copyright:
9
+ * Mikael Lagerkvist, 2005
10
+ * Guido Tack, 2005
11
+ * Christian Schulte, 2005
12
+ *
13
+ * Last modified:
14
+ * $Date: 2008-02-01 12:10:00 +0100 (Fri, 01 Feb 2008) $ by $Author: schulte $
15
+ * $Revision: 6034 $
16
+ *
17
+ * This file is part of Gecode, the generic constraint
18
+ * development environment:
19
+ * http://www.gecode.org
20
+ *
21
+ * Permission is hereby granted, free of charge, to any person obtaining
22
+ * a copy of this software and associated documentation files (the
23
+ * "Software"), to deal in the Software without restriction, including
24
+ * without limitation the rights to use, copy, modify, merge, publish,
25
+ * distribute, sublicense, and/or sell copies of the Software, and to
26
+ * permit persons to whom the Software is furnished to do so, subject to
27
+ * the following conditions:
28
+ *
29
+ * The above copyright notice and this permission notice shall be
30
+ * included in all copies or substantial portions of the Software.
31
+ *
32
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
33
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
34
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
35
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
36
+ * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
37
+ * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
38
+ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
39
+ *
40
+ */
41
+
42
+ #include "examples/support.hh"
43
+
44
+ #ifdef GECODE_HAS_SET_VARS
45
+ #include "gecode/set.hh"
46
+ #endif
47
+ #ifdef GECODE_HAS_CPLTSET_VARS
48
+ #include "gecode/cpltset.hh"
49
+ #endif
50
+
51
+ #include "gecode/minimodel.hh"
52
+
53
+ #include <string>
54
+ #include <cmath>
55
+ #include <cctype>
56
+
57
+ namespace {
58
+ extern const char* examples[];
59
+ extern const unsigned int n_examples;
60
+ int example_size(const char *s);
61
+ int sudokuField(const char *s, int n, int i, int j);
62
+ }
63
+
64
+ /// Base class for %Sudoku puzzles
65
+ class Sudoku : public Example {
66
+ protected:
67
+ /// The size of the problem
68
+ const int n;
69
+ public:
70
+ #ifdef GECODE_HAS_SET_VARS
71
+ /// Model variants
72
+ enum {
73
+ MODEL_INT, ///< Use integer constraints
74
+ MODEL_SET, ///< Use set constraints
75
+ MODEL_MIXED ///< Use both integer and set constraints
76
+ #ifdef GECODE_HAS_CPLTSET_VARS
77
+ ,MODEL_CPLT ///< Use CpltSet constraints
78
+ #endif
79
+ };
80
+ #endif
81
+
82
+ /// Constructor
83
+ Sudoku(const SizeOptions& opt) : n(example_size(examples[opt.size()])) {}
84
+
85
+ /// Constructor for cloning \a s
86
+ Sudoku(bool share, Sudoku& s) : Example(share,s), n(s.n) {}
87
+
88
+ };
89
+
90
+ /**
91
+ * \brief %Example: Solving %Sudoku puzzles using integer constraints
92
+ *
93
+ * \ingroup ExProblem
94
+ */
95
+ class SudokuInt : virtual public Sudoku {
96
+ protected:
97
+ /// Values for the fields
98
+ IntVarArray x;
99
+ public:
100
+ #ifdef GECODE_HAS_SET_VARS
101
+ /// Propagation variants
102
+ enum {
103
+ PROP_NONE, ///< No additional constraints
104
+ PROP_SAME, ///< Use "same" constraint with integer model
105
+ };
106
+ #endif
107
+ /// Constructor
108
+ SudokuInt(const SizeOptions& opt)
109
+ : Sudoku(opt), x(this, n*n*n*n, 1, n*n) {
110
+ const int nn = n*n;
111
+ MiniModel::Matrix<IntVarArray> m(x, nn, nn);
112
+
113
+ // Constraints for rows and columns
114
+ for (int i=0; i<nn; i++) {
115
+ distinct(this, m.row(i), opt.icl());
116
+ distinct(this, m.col(i), opt.icl());
117
+ }
118
+
119
+ // Constraints for squares
120
+ for (int i=0; i<nn; i+=n) {
121
+ for (int j=0; j<nn; j+=n) {
122
+ distinct(this, m.slice(i, i+n, j, j+n), opt.icl());
123
+ }
124
+ }
125
+
126
+ // Fill-in predefined fields
127
+ for (int i=0; i<nn; i++)
128
+ for (int j=0; j<nn; j++)
129
+ if (int v = sudokuField(examples[opt.size()], nn, i, j))
130
+ rel(this, m(i,j), IRT_EQ, v );
131
+
132
+ #ifdef GECODE_HAS_SET_VARS
133
+ if (opt.propagation() == PROP_SAME) {
134
+ // Implied constraints linking squares and rows
135
+ for (int b=0; b<n; b++) {
136
+ int b1c = 0;
137
+ int b2c = 0;
138
+ IntVarArgs bc1(nn-n);
139
+ IntVarArgs bc2(nn-n);
140
+ IntVarArgs br1(nn-n);
141
+ IntVarArgs br2(nn-n);
142
+ for (int i=0; i<n; i++)
143
+ for (int j=0; j<n; j++) {
144
+ b1c = 0; b2c = 0;
145
+ for (int k=0; k<n; k++) {
146
+ if (k != j) {
147
+ IntVarArgs bc1s = block_col(m, b, i, k);
148
+ IntVarArgs br1s = block_row(m, b, i, k);
149
+ for (int count=0; count<n; count++) {
150
+ bc1[b1c] = bc1s[count];
151
+ br1[b1c] = br1s[count];
152
+ ++b1c;
153
+ }
154
+ }
155
+ if (k != i) {
156
+ IntVarArgs bc2s = block_col(m, b, k, j);
157
+ IntVarArgs br2s = block_row(m, b, k, j);
158
+ for (int count=0; count<n; count++) {
159
+ bc2[b2c] = bc2s[count];
160
+ br2[b2c] = br2s[count];
161
+ ++b2c;
162
+ }
163
+ }
164
+ }
165
+ same(this, nn, bc1, bc2);
166
+ same(this, nn, br1, br2);
167
+ }
168
+ }
169
+ }
170
+ #endif
171
+
172
+ branch(this, x, INT_VAR_SIZE_MIN, INT_VAL_SPLIT_MIN);
173
+ }
174
+
175
+ /// Constructor for cloning \a s
176
+ SudokuInt(bool share, SudokuInt& s) : Sudoku(share, s) {
177
+ x.update(this, share, s.x);
178
+ }
179
+
180
+ /// Perform copying during cloning
181
+ virtual Space*
182
+ copy(bool share) {
183
+ return new SudokuInt(share,*this);
184
+ }
185
+
186
+ /// Print solution
187
+ virtual void
188
+ print(std::ostream& os) {
189
+ os << " ";
190
+ for (int i = 0; i<n*n*n*n; i++) {
191
+ if (x[i].assigned()) {
192
+ if (x[i].val()<10)
193
+ os << x[i] << " ";
194
+ else
195
+ os << (char)(x[i].val()+'A'-10) << " ";
196
+ }
197
+ else
198
+ os << ". ";
199
+ if((i+1)%(n*n) == 0)
200
+ os << std::endl << " ";
201
+ }
202
+ os << std::endl;
203
+ }
204
+
205
+ #ifdef GECODE_HAS_SET_VARS
206
+ private:
207
+ /// Post the constraint that \a a and \a b take the same values
208
+ void same(Space* home, int nn, IntVarArgs a, IntVarArgs b) {
209
+ SetVar u(home, IntSet::empty, 1, nn);
210
+ rel(home, SOT_DUNION, a, u);
211
+ rel(home, SOT_DUNION, b, u);
212
+ }
213
+
214
+ /// Extract column \a bc from block starting at (\a i,\a j)
215
+ IntVarArgs
216
+ block_col(MiniModel::Matrix<IntVarArray> m,
217
+ int bc, int i, int j) {
218
+ return m.slice(bc*n+i, bc*n+i+1, j*n, (j+1)*n);
219
+ }
220
+
221
+ /// Extract row \a br from block starting at (\a i,\a j)
222
+ IntVarArgs
223
+ block_row(MiniModel::Matrix<IntVarArray> m,
224
+ int br, int i, int j) {
225
+ return m.slice(j*n, (j+1)*n, br*n+i, br*n+i+1);
226
+ }
227
+ #endif
228
+ };
229
+
230
+ #ifdef GECODE_HAS_SET_VARS
231
+ /**
232
+ * \brief %Example: Solving %Sudoku puzzles using set constraints
233
+ *
234
+ * \ingroup ExProblem
235
+ */
236
+ class SudokuSet : virtual public Sudoku {
237
+ protected:
238
+ /// The fields occupied by a certain number
239
+ SetVarArray y;
240
+ public:
241
+ /// Constructor
242
+ SudokuSet(const SizeOptions& opt)
243
+ : Sudoku(opt),
244
+ y(this,n*n,IntSet::empty,1,n*n*n*n,n*n,n*n) {
245
+
246
+ const int nn = n*n;
247
+
248
+ GECODE_AUTOARRAY(IntSet, row, nn);
249
+ GECODE_AUTOARRAY(IntSet, col, nn);
250
+ GECODE_AUTOARRAY(IntSet, block, nn);
251
+
252
+ // Set up the row and column set constants
253
+ for (int i=0; i<nn; i++) {
254
+ new (&row[i]) IntSet((i*nn)+1, (i+1)*nn);
255
+
256
+ GECODE_AUTOARRAY(int, dsc, nn);
257
+ for (int j=0; j<nn; j++) {
258
+ dsc[j] = (j*nn)+1+i;
259
+ }
260
+ new (&col[i]) IntSet (dsc, nn);
261
+ }
262
+
263
+ // Set up the block set constants
264
+ for (int i=0; i<n; i++) {
265
+ for (int j=0; j<n; j++) {
266
+ GECODE_AUTOARRAY(int, dsb_arr, nn);
267
+
268
+ for (int ii=0; ii<n; ii++) {
269
+ for (int jj=0; jj<n; jj++) {
270
+ dsb_arr[ii*n+jj] = j*nn*n+i*n+jj*nn+ii+1;
271
+ }
272
+ }
273
+ new (&block[i*n+j]) IntSet(dsb_arr, nn);
274
+ }
275
+ }
276
+
277
+ IntSet full(1, nn*nn);
278
+ // All x must be pairwise disjoint and partition the field indices
279
+ rel(this, SOT_DUNION, y, SetVar(this, full, full));
280
+
281
+ // The x must intersect in exactly one element with each
282
+ // row, column, and block
283
+ for (int i=0; i<nn; i++)
284
+ for (int j=0; j<nn; j++) {
285
+ SetVar inter_row(this, IntSet::empty, full, 1, 1);
286
+ rel(this, y[i], SOT_INTER, row[j], SRT_EQ, inter_row);
287
+ SetVar inter_col(this, IntSet::empty, full, 1, 1);
288
+ rel(this, y[i], SOT_INTER, col[j], SRT_EQ, inter_col);
289
+ SetVar inter_block(this, IntSet::empty, full, 1, 1);
290
+ rel(this, y[i], SOT_INTER, block[j], SRT_EQ, inter_block);
291
+ }
292
+
293
+ // Fill-in predefined fields
294
+ for (int i=0; i<nn; i++)
295
+ for (int j=0; j<nn; j++)
296
+ if (int idx = sudokuField(examples[opt.size()], nn, i, j))
297
+ dom(this, y[idx-1], SRT_SUP, (i+1)+(j*nn) );
298
+
299
+ branch(this, y, SET_VAR_NONE, SET_VAL_MIN);
300
+ }
301
+
302
+ /// Constructor for cloning \a s
303
+ SudokuSet(bool share, SudokuSet& s) : Sudoku(share,s) {
304
+ y.update(this, share, s.y);
305
+ }
306
+
307
+ /// Perform copying during cloning
308
+ virtual Space*
309
+ copy(bool share) {
310
+ return new SudokuSet(share,*this);
311
+ }
312
+
313
+ /// Print solution
314
+ virtual void
315
+ print(std::ostream& os) {
316
+ os << '\t';
317
+ for (int i = 0; i<n*n*n*n; i++) {
318
+ for (int j=0; j<n*n; j++) {
319
+ if (y[j].contains(i+1)) {
320
+ if (j+1<10)
321
+ os << j+1 << " ";
322
+ else
323
+ os << (char)(j+1+'A'-10) << " ";
324
+ break;
325
+ }
326
+ }
327
+ if((i+1)%(n*n) == 0)
328
+ os << std::endl << '\t';
329
+ }
330
+ os << std::endl;
331
+ }
332
+ };
333
+
334
+ #ifdef GECODE_HAS_CPLTSET_VARS
335
+ /**
336
+ * \brief %Example: Solving %Sudoku puzzles using CpltSet constraints
337
+ *
338
+ * \ingroup ExProblem
339
+ */
340
+ class SudokuCpltSet : virtual public Sudoku {
341
+ protected:
342
+ /// The fields occupied by a certain number
343
+ CpltSetVarArray y;
344
+ public:
345
+ /// Constructor
346
+ SudokuCpltSet(const SizeOptions& opt)
347
+ : Sudoku(opt),
348
+ y(this,n*n,IntSet::empty,1,n*n*n*n) {
349
+ const int nn = n*n;
350
+
351
+ // Fill-in predefined fields
352
+ for (int i=0; i<nn; i++)
353
+ for (int j=0; j<nn; j++)
354
+ if (int idx = sudokuField(examples[opt.size()], nn, i, j)) {
355
+ dom(this, y[idx-1], SRT_SUP, (i+1)+(j*nn) );
356
+
357
+ for (int z = 0; z < nn; z++) {
358
+ if (z != idx - 1) {
359
+ dom(this, y[z], SRT_DISJ, (i+1)+(j*nn));
360
+ }
361
+ }
362
+ }
363
+
364
+ for (int i=0; i<nn; i++)
365
+ cardinality(this, y[i], nn);
366
+
367
+ GECODE_AUTOARRAY(IntSet, row, nn);
368
+ GECODE_AUTOARRAY(IntSet, col, nn);
369
+ GECODE_AUTOARRAY(IntSet, block, nn);
370
+
371
+ // Set up the row and column set constants
372
+ for (int i=0; i<nn; i++) {
373
+ new (&row[i]) IntSet((i*nn)+1, (i+1)*nn);
374
+
375
+ GECODE_AUTOARRAY(int, dsc, nn);
376
+ for (int j=0; j<nn; j++) {
377
+ dsc[j] = (j*nn)+1+i;
378
+ }
379
+ new (&col[i]) IntSet (dsc, nn);
380
+ }
381
+
382
+ // Set up the block set constants
383
+ for (int i=0; i<n; i++) {
384
+ for (int j=0; j<n; j++) {
385
+ GECODE_AUTOARRAY(int, dsb_arr, nn);
386
+
387
+ for (int ii=0; ii<n; ii++) {
388
+ for (int jj=0; jj<n; jj++) {
389
+ dsb_arr[ii*n+jj] = j*nn*n+i*n+jj*nn+ii+1;
390
+ }
391
+ }
392
+ new (&block[i*n+j]) IntSet(dsb_arr, nn);
393
+ }
394
+ }
395
+
396
+ // All x must be pairwise disjoint and partition the field indices
397
+ if (nn == 9) {
398
+ partition(this, y);
399
+ } else {
400
+ // Use naive implementation instead:
401
+ for (int i = 0; i < nn - 1; i++) {
402
+ for (int j = i + 1; j < nn; j++) {
403
+ rel(this, y[i], SRT_DISJ, y[j]);
404
+ }
405
+ }
406
+ }
407
+
408
+ // The x must intersect in exactly one element with each
409
+ // row, column, and block
410
+ for (int i=0; i<nn; i++)
411
+ for (int j=0; j<nn; j++) {
412
+ exactly(this, y[i], row[j], 1);
413
+ exactly(this, y[i], col[j], 1);
414
+ exactly(this, y[i], block[j], 1);
415
+ }
416
+
417
+ branch(this, y, CPLTSET_VAR_MIN_CARD, CPLTSET_VAL_MIN_UNKNOWN);
418
+ }
419
+
420
+ /// Constructor for cloning \a s
421
+ SudokuCpltSet(bool share, SudokuCpltSet& s) : Sudoku(share,s) {
422
+ y.update(this, share, s.y);
423
+ }
424
+
425
+ /// Perform copying during cloning
426
+ virtual Space*
427
+ copy(bool share) {
428
+ return new SudokuCpltSet(share,*this);
429
+ }
430
+
431
+ /// Print solution
432
+ virtual void
433
+ print(std::ostream& os) {
434
+ os << '\t';
435
+ for (int i = 0; i<n*n*n*n; i++) {
436
+ for (int j=0; j<n*n; j++) {
437
+ if (y[j].contains(i+1)) {
438
+ if (j+1<10)
439
+ os << j+1 << " ";
440
+ else
441
+ os << (char)(j+1+'A'-10) << " ";
442
+ break;
443
+ }
444
+ }
445
+ if((i+1)%(n*n) == 0)
446
+ os << std::endl << '\t';
447
+ }
448
+ os << std::endl;
449
+ }
450
+ };
451
+
452
+ #endif
453
+
454
+ /**
455
+ * \brief %Example: Solving %Sudoku puzzles using both set and integer
456
+ * constraints
457
+ *
458
+ * \ingroup ExProblem
459
+ */
460
+ class SudokuMixed : public SudokuInt, public SudokuSet {
461
+ public:
462
+ /// Constructor
463
+ SudokuMixed(const SizeOptions& opt)
464
+ : Sudoku(opt), SudokuInt(opt), SudokuSet(opt) {
465
+ const int nn = n*n;
466
+
467
+ IntSet is0(0,0);
468
+ SetVar dummySet0(this, is0, is0);
469
+ IntVar dummyInt0(this, 0, 0);
470
+ SetVarArgs ys(nn+1);
471
+ ys[0] = dummySet0;
472
+ for (int i=0; i<nn; i++)
473
+ ys[i+1] = y[i];
474
+ IntVarArgs xs(nn*nn+1);
475
+ xs[0] = dummyInt0;
476
+ for (int i=0; i<nn*nn; i++)
477
+ xs[i+1] = x[i];
478
+
479
+ channel(this, xs, ys);
480
+
481
+ IntArgs values(nn);
482
+ for (int i=nn; i--;)
483
+ values[i] = i+1;
484
+ count(this, x, IntSet(nn,nn), values, ICL_DOM);
485
+ }
486
+
487
+ /// Constructor for cloning \a s
488
+ SudokuMixed(bool share, SudokuMixed& s)
489
+ : Sudoku(share, s), SudokuInt(share, s), SudokuSet(share, s) {}
490
+
491
+ /// Perform copying during cloning
492
+ virtual Space*
493
+ copy(bool share) {
494
+ return new SudokuMixed(share,*this);
495
+ }
496
+
497
+ /// Print solution
498
+ virtual void print(std::ostream& os) { SudokuInt::print(os); }
499
+
500
+ };
501
+
502
+ #endif
503
+
504
+ /** \brief Main-function
505
+ * \relates Sudoku
506
+ */
507
+ int
508
+ main(int argc, char* argv[]) {
509
+ SizeOptions opt("Sudoku");
510
+ opt.size(0);
511
+ opt.icl(ICL_DOM);
512
+ opt.solutions(1);
513
+ #ifdef GECODE_HAS_SET_VARS
514
+ opt.model(Sudoku::MODEL_INT);
515
+ opt.model(Sudoku::MODEL_INT, "int", "use integer constraints");
516
+ opt.model(Sudoku::MODEL_SET, "set", "use set constraints");
517
+ opt.model(Sudoku::MODEL_MIXED, "mixed",
518
+ "use both integer and set constraints");
519
+ #ifdef GECODE_HAS_CPLTSET_VARS
520
+ CpltSet::manager.init(5000000, 2000000);
521
+ opt.model(Sudoku::MODEL_CPLT, "cpltset",
522
+ "use CpltSet constraints");
523
+ #endif
524
+ opt.propagation(SudokuInt::PROP_NONE);
525
+ opt.propagation(SudokuInt::PROP_NONE, "none", "no additional constraints");
526
+ opt.propagation(SudokuInt::PROP_SAME, "same",
527
+ "additional \"same\" constraint for integer model");
528
+ #endif
529
+ opt.parse(argc,argv);
530
+ if (opt.size() >= n_examples) {
531
+ std::cerr << "Error: size must be between 0 and "
532
+ << n_examples-1 << std::endl;
533
+ return 1;
534
+ }
535
+ #ifdef GECODE_HAS_SET_VARS
536
+ switch (opt.model()) {
537
+ case Sudoku::MODEL_INT:
538
+ Example::run<SudokuInt,DFS,SizeOptions>(opt);
539
+ break;
540
+ case Sudoku::MODEL_SET:
541
+ Example::run<SudokuSet,DFS,SizeOptions>(opt);
542
+ break;
543
+ case Sudoku::MODEL_MIXED:
544
+ Example::run<SudokuMixed,DFS,SizeOptions>(opt);
545
+ break;
546
+ #ifdef GECODE_HAS_CPLTSET_VARS
547
+ case Sudoku::MODEL_CPLT:
548
+ Example::run<SudokuCpltSet,DFS,SizeOptions>(opt);
549
+ break;
550
+ #endif
551
+ }
552
+ #else
553
+ Example::run<SudokuInt,DFS,SizeOptions>(opt);
554
+ #endif
555
+ return 0;
556
+ }
557
+
558
+ namespace {
559
+
560
+ /** \name %Sudoku specifications
561
+ *
562
+ * Each specification gives the initial positions that are filled in,
563
+ * with blank squares represented as zeroes.
564
+ *
565
+ * \relates Sudoku
566
+ */
567
+ //@{
568
+
569
+ /// The specifications
570
+ const char* examples[] = {
571
+ // 0
572
+ "...2.5..."
573
+ ".9....73."
574
+ "..2..9.6."
575
+ "2.....4.9"
576
+ "....7...."
577
+ "6.9.....1"
578
+ ".8.4..1.."
579
+ ".63....8."
580
+ "...6.8..."
581
+ ,
582
+ // 1
583
+ "3..9.4..1"
584
+ "..2...4.."
585
+ ".61...79."
586
+ "6..247..5"
587
+ "........."
588
+ "2..836..4"
589
+ ".46...23."
590
+ "..9...6.."
591
+ "5..3.9..8"
592
+ ,
593
+ // 2
594
+ "....1...."
595
+ "3.14..86."
596
+ "9..5..2.."
597
+ "7..16...."
598
+ ".2.8.5.1."
599
+ "....97..4"
600
+ "..3..4..6"
601
+ ".48..69.7"
602
+ "....8...."
603
+ ,
604
+ // 3
605
+ // Fiendish puzzle April 21 2005 Times London
606
+ "..4..3.7."
607
+ ".8..7...."
608
+ ".7...82.5"
609
+ "4.....31."
610
+ "9.......8"
611
+ ".15.....4"
612
+ "1.69...3."
613
+ "....2..6."
614
+ ".2.4..5.."
615
+ ,
616
+ // 4
617
+ // This one requires search
618
+ ".43.8.25."
619
+ "6........"
620
+ ".....1.94"
621
+ "9....4.7."
622
+ "...6.8..."
623
+ ".1.2....3"
624
+ "82.5....."
625
+ "........5"
626
+ ".34.9.71."
627
+ ,
628
+ // 5
629
+ // Hard one from http://www.cs.mu.oz.au/671/proj3/node5.html
630
+ ".....3.6."
631
+ ".......1."
632
+ ".975...8."
633
+
634
+ "....9.2.."
635
+ "..8.7.4.."
636
+ "..3.6...."
637
+
638
+ ".1...289."
639
+ ".4......."
640
+ ".5.1....."
641
+ , // Puzzle 1 from http://www.sudoku.org.uk/bifurcation.htm
642
+ // 6
643
+ "1..9.7..3"
644
+ ".8.....7."
645
+ "..9...6.."
646
+ "..72.94.."
647
+ "41.....95"
648
+ "..85.43.."
649
+ "..3...7.."
650
+ ".5.....4."
651
+ "2..8.6..9"
652
+ , // Puzzle 2 from http://www.sudoku.org.uk/bifurcation.htm
653
+ // 7
654
+ "...3.2..."
655
+ ".5.798.3."
656
+ "..7...8.."
657
+ "..86.73.."
658
+ ".7.....6."
659
+ "..35.41.."
660
+ "..5...6.."
661
+ ".2.419.5."
662
+ "...8.6..."
663
+ , // Puzzle 3 from http://www.sudoku.org.uk/bifurcation.htm
664
+ // 8
665
+ "...8....6"
666
+ "..162.43."
667
+ "4...71..2"
668
+ "..72...8."
669
+ "....1...."
670
+ ".1...62.."
671
+ "1..73...4"
672
+ ".26.481.."
673
+ "3....5..."
674
+ , // Puzzle 4 from http://www.sudoku.org.uk/bifurcation.htm
675
+ // 9
676
+ "3.5..4.7."
677
+ ".7......1"
678
+ ".4.9...3."
679
+ "4...51..6"
680
+ ".9.....4."
681
+ "2..84...7"
682
+ ".2...7.6."
683
+ "8......9."
684
+ ".6.4..2.8"
685
+ , // Puzzle 5 from http://www.sudoku.org.uk/bifurcation.htm
686
+ // 10
687
+ "...7..3.."
688
+ ".6....57."
689
+ ".738..41."
690
+ "..928...."
691
+ "5.......9"
692
+ "....936.."
693
+ ".98..715."
694
+ ".54....6."
695
+ "..1..9..."
696
+ , // Puzzle 6 from http://www.sudoku.org.uk/bifurcation.htm
697
+ // 11
698
+ "...6....4"
699
+ ".3..9..2."
700
+ ".6.8..7.."
701
+ "..5.6...1"
702
+ "67.3.1.58"
703
+ "9...5.4.."
704
+ "..6..3.9."
705
+ ".1..8..6."
706
+ "2....6..."
707
+ , // Puzzle 7 from http://www.sudoku.org.uk/bifurcation.htm
708
+ // 12
709
+ "8....1.4."
710
+ "2.6.9..1."
711
+ "..9..6.8."
712
+ "124.....9"
713
+ "........."
714
+ "9.....824"
715
+ ".5.4..1.."
716
+ ".8..7.2.5"
717
+ ".9.5....7"
718
+ , // Puzzle 8 from http://www.sudoku.org.uk/bifurcation.htm
719
+ // 13
720
+ "652.48..7"
721
+ ".7.2.54.."
722
+ "........."
723
+ ".641...7."
724
+ "....8...."
725
+ ".8...456."
726
+ "........."
727
+ "..86.7.2."
728
+ "2..89.751"
729
+ , // Puzzle 9 from http://www.sudoku.org.uk/bifurcation.htm
730
+ // 14
731
+ "..6..2..9"
732
+ "1..5...2."
733
+ ".473.6..1"
734
+ ".....8.4."
735
+ ".3.....7."
736
+ ".1.6....."
737
+ "4..8.321."
738
+ ".6...1..4"
739
+ "3..4..9.."
740
+ , // Puzzle 10 from http://www.sudoku.org.uk/bifurcation.htm
741
+ // 15
742
+ "..4.5.9.."
743
+ "....7...6"
744
+ "37......2"
745
+ "..95...8."
746
+ "..12.43.."
747
+ ".6...92.."
748
+ "2......93"
749
+ "1...4...."
750
+ "..6.2.7.."
751
+ , // Puzzle 11 from http://www.sudoku.org.uk/bifurcation.htm
752
+ // 16
753
+ "....3.79."
754
+ "3.......5"
755
+ "...4.73.6"
756
+ ".53.94.7."
757
+ "....7...."
758
+ ".1.82.64."
759
+ "7.19.8..."
760
+ "8.......1"
761
+ ".94.1...."
762
+ , // From http://www.sudoku.org.uk/discus/messages/29/51.html?1131034031
763
+ // 17
764
+ "2581.4.37"
765
+ "936827514"
766
+ "47153.28."
767
+ "7152.3.4."
768
+ "849675321"
769
+ "36241..75"
770
+ "1249..753"
771
+ "593742168"
772
+ "687351492"
773
+ ,
774
+ // 18
775
+ // The following minimal 25*25 Sudokus are from Alain Frisch
776
+ // Sudoku website http://www.eleves.ens.fr/home/frisch/sudoku.html
777
+ "...G...9..4.....6F..L8..."
778
+ "CEIN.HDM.OF.1L..A..9PJ.4."
779
+ ".....A...L..JBN.2.D.1...H"
780
+ "P49...JB23.AD..7E..C5F..."
781
+ "A1H....F.N5....I.BL...26."
782
+ "....7..C.6...H4B..1....I5"
783
+ ".F.P...I..B..7.5.L...9..."
784
+ ".L6A...5OF.8P...K.NE..734"
785
+ "B2.E..L...1J.5....O7.K.AP"
786
+ "O.5.CB1.P....3EM....2L.H."
787
+ "2..MJ.A...9.3.7......P.8C"
788
+ ".....CF.DPG62N.E...OH.M.J"
789
+ ".DL..OM..IE.B8..NH...3..K"
790
+ ".CO1F.B.N.AH..P.78.JE...D"
791
+ "E..6.....H......4M.KIB9.."
792
+ "N.J..6......C..1.5.G..H.."
793
+ "...75LG...6..1..CI..4.E.."
794
+ "9K..6.....HGN.O2P.4......"
795
+ ".OA..IP849...2.K3...7GN.."
796
+ "..G....N...P.D9....A...C1"
797
+ "J...M.NAFE.4..23.7....8L."
798
+ ".....J.H9CD1LP..GO....4ME"
799
+ "48NK..5.M......JL.......9"
800
+ ".I.OG....835.A.DH..P....."
801
+ "35......L.J..E....8IG.67B"
802
+ ,
803
+ // 19
804
+ ".N..JG..O7591...8I....L.."
805
+ "FG.M.B8...P.E...CJ..H...."
806
+ "...........G.4.H.D.O.NJA2"
807
+ ".....J.EN4.L6MA.B.2......"
808
+ "HE..2..DC.....F4KMA.B.9O8"
809
+ "M....62...47C19......E5.."
810
+ ".I2.8M.JGL...ADN..K..3.F7"
811
+ "..H3.5..89....I.J.....NL."
812
+ "1B..9.FAP.6.N....537.H..O"
813
+ "......1..N...O...LC.68.PG"
814
+ "KOA.FNBH.....7.C.....M..6"
815
+ "45.ECP.I..N.F.J1...MK.79."
816
+ "I.L..8.O..9.P...A...2.1J."
817
+ "..621.D.M.....B8LG..P..CH"
818
+ ".HP.N7E.L1....3..B..O.G45"
819
+ "....BIO....5.C.P...FN48E."
820
+ "...FL.....2.DH..17..59O.."
821
+ "..I.MF..2G.N...A6O.HC.PB."
822
+ "72.1..L...IM.96E.45G....."
823
+ "..9...7M..A.O...I...L...."
824
+ ".C.JA.........1.....E.48."
825
+ "O.BI.......PHL.6..1....5C"
826
+ "G6M...N4FI8...K..H.E....."
827
+ ".L..4.917....BE.G8F.M.I.."
828
+ "8F......5.O3..4...9.....K"
829
+ ,
830
+ // 20
831
+ "5.PC..7..J..I...3..H.M.2L"
832
+ "H.......F..DA..N.G...9..P"
833
+ "...3LCP2.54.71.B....J.8.."
834
+ "76M8...3A...H..C.D.FO...."
835
+ "...DK..GI..B.L.6.8.14...."
836
+ "A......M....D.6.N.P....O2"
837
+ "...E5BLF..92..3AJC..6I..."
838
+ ".PNJ.6..E7A.8..IM.OL1.G.C"
839
+ ".L3...O.N.5.KI.46.....9E."
840
+ ".I.G.A..28.MBP...E..HJ3.7"
841
+ "J.74.L..D1O96.A3.M...GI.."
842
+ "E...1...K....J...P6.7.C.9"
843
+ "8M..A9JO.F.P..1...4.E3N6."
844
+ "...I.3.7.......EL.CD..H.."
845
+ "....DE2..P...N.........K."
846
+ ".O.7.FKI1..GJ.N.....9.P8."
847
+ ".89..H..BNM73D.KFJ..I.6.A"
848
+ "PDBN...9M..C.....O.6..7.."
849
+ ".F.K...4..LA9B..C.E75..GN"
850
+ "G.A.....7.8.....H....O.3."
851
+ "B...C...4......8K.3.P...."
852
+ "DHE5..FA...J.3..B.2.KC.98"
853
+ "...F...5....N..J9......I."
854
+ ".J...P..O.BK....I.M.3..5."
855
+ "9...8.B.6.D.M.I..H.5G.J4."
856
+ ,
857
+ // 21
858
+ "..6F.....5..3.....H..A.M2"
859
+ ".....3....I8.A.MC.KJ.LNG."
860
+ ".I.7N..K.2..6...3D..B.O85"
861
+ ".3A.PF.D8OBK7.2....L6.9H4"
862
+ ".K..CBML.....O.A8.G4.D..."
863
+ "1.4.AGL..M5..F.O.9....P2."
864
+ "..I.........8......N4E..."
865
+ "J.C8.1.6.3.LO.K7AG2P9.H.."
866
+ ".2.3BH..9.A...G......O..L"
867
+ ".H..M8.J.....NI1.LEF....B"
868
+ "I5..4.....G.27..K..3.M..H"
869
+ "P..E..I.A..3B.8....G.2..."
870
+ "AJ......NFK.I.O9476..G.1."
871
+ ".976...E3H....M5.F......O"
872
+ ".F.M3.5.GKC4.HJ.N.....ID7"
873
+ "..L1K..9.J37.ID..B..E6..."
874
+ ".82OH.1..PNML...E..C...J."
875
+ "....JLFN.B..G..6M..H..D.9"
876
+ "...C.A...I.6.......K.5..."
877
+ "E.G.I.....O....J.8F......"
878
+ "..M4..9.D.7.K.FE.3O......"
879
+ "H.N.....14E..B3L..8I...AG"
880
+ "K.O.62.PM...N..H...18C.9."
881
+ "LC..8.3...2...H.G...J..4E"
882
+ ".B..9NK.E....C6.P.4D.71OI"
883
+ ,
884
+ // 22
885
+ "A..F.N......M28DC.LI7..OJ"
886
+ "..B...D.M.6....9.....2A.."
887
+ ".2..I.56.B...J.MEH......."
888
+ "O7...HE...BA..G2........L"
889
+ ".H6J.2...G.7NDP.A...8..C."
890
+ ".PN35..B..869.2.GA..K.C.."
891
+ "....EM13OD.N...49K...7..."
892
+ "9G..C....IJF5.B..7.3....."
893
+ "HD.....JN....7...EF....9."
894
+ "1.OA..G.KL....H..B.CP...."
895
+ "..CE.......2..9I....3...."
896
+ "FJ..83P.E..K7.NL15H..I2.."
897
+ ".4..GJ...6DIB...P...AHL.C"
898
+ ".1I.2.M....83.F..4.NBE..."
899
+ "L3M.OD.H.AG..4.....69...F"
900
+ ".8...5H.3.....M...D..K..4"
901
+ "3..4..AEDO7J...5..9..G1.."
902
+ "..2N9.8F.P.OIGC.L6..E.H.."
903
+ "C...1.7..K.L6.4EO.8.5...N"
904
+ ".IG.H..M..E...1A2N4..8.F."
905
+ "6..5J..N1...2..H.IGA...P8"
906
+ ".L...O...H...C....M5G..A."
907
+ "..F...3C.7.P..5N..B..DMH9"
908
+ "291D..6..M..H.7.3.J.N..B."
909
+ "....MK..29F.G.DO4...6.E35"
910
+ ,
911
+ // 23
912
+ "....B12O3..D..F..KPL.E4.7"
913
+ "1M..GL..H..K.A.....39.P.."
914
+ ".8.3.4.....7..6.F.....CK."
915
+ "P.O...758.2..MC.....1L.A."
916
+ "...HFK6.A..8...9B...2...J"
917
+ "91.KJE..L.5O..GD.....4..."
918
+ ".I..3..D.2.....C4MLAK..N."
919
+ ".4..6IA.P7.....B9......3."
920
+ "M.F...4.J...8....N.H.1G7."
921
+ "..5P.N.....C.731.I.E.9A.."
922
+ ".....GO.KDL......BA......"
923
+ ".3A..F...9..K.EI5.7..6.DN"
924
+ ".G.54.L.....PH..3F6....2."
925
+ "....P.....G..2D.OH.1B...C"
926
+ "6.EM.7N....3.B4..DC..K1P."
927
+ "B.9.....I..5N...7OGK...46"
928
+ "OF.GD6HP..JM..BA8.I.C...."
929
+ "8.L7...........P.3M5...92"
930
+ ".EM.....45IF7....2.CJ8DL."
931
+ ".6.4.8..NA.2......9....GI"
932
+ "2..A1DCN..3G.F5.L..I..O6H"
933
+ "..BIO..1.H.L...G........."
934
+ "C.P.....M8.9O..5A..N.JK.D"
935
+ "H...N...FOA4..73....5..CM"
936
+ ".D4..3...6BE..N.2JH8..L.."
937
+ ,
938
+ // 24
939
+ "LJ.FH2...K....359.E.B6.N."
940
+ "...EML1FC.PJ.A.8I....2.K4"
941
+ "9........G1..6..K...PAL3C"
942
+ "P...C34..8.N7.........DE."
943
+ "...7....E..IO...124.J5.F."
944
+ ".8.L.PA.2..31FG....N..C.I"
945
+ "F.G......M........2.K..1."
946
+ "....2KH6.JOD..9.L..G...B."
947
+ ".6O3..G...4.NJ.H.PB...5.9"
948
+ "I...K..LBN...E.76.A....8."
949
+ "D.B.L......8.3.C.KM.6...."
950
+ ".C593.I.N4.26MB..1..L.K.."
951
+ "M.F6......DA45.9..N.I3..B"
952
+ ".G..79.H...KJ...4...AN.2."
953
+ ".KH...BC....LON..7..D.8.F"
954
+ "2..B...MP....7OEJ4....6.1"
955
+ ".4....2O.9......N..1....G"
956
+ ".....G.JF.2..L.6.5......."
957
+ "C9A.G...H1...PJ..L.3.8.MN"
958
+ "...1......M.....O.P8.K3J."
959
+ "...N.HP.K25G3..JC8..1M..."
960
+ "..2K.FC34.A....N7..9.LB.."
961
+ "..65DJ..L..C.4.1...BGF..."
962
+ "OF..E..7.B.......634...D."
963
+ "G.3..N.I9D7PM8KF2....4..."
964
+ ,
965
+ // 25
966
+ ".1..I8.P..6.N...BD...3O.."
967
+ ".9.6...E.M43.8..AK.2J.1.."
968
+ "...JKL...FA...P.I4...DB.."
969
+ "E...P.I.B.7.1..J.HC...98."
970
+ "..5M8GJ.KD.O...N3..1AI..."
971
+ "K.2C4.M.N..J..I.......H.5"
972
+ "N..B9O.D...KH6.E...C...7I"
973
+ "DE..JK4.....L.1B7..68PN2."
974
+ ".....P...C..F.7...L.O9..."
975
+ "...35.H......92..M.4.EC.1"
976
+ "P..IL..H.........1..3.D.."
977
+ "....B9..8.3I5.C...K...F1."
978
+ "FH....2O..D.4M.P...A...GC"
979
+ "JA.......KF.......4.EOMIP"
980
+ "3.7GNF...A.2OB9C.E5.HJ..."
981
+ "2.I.1.......AO5.P...K.3.."
982
+ "..H....L..M.CIJ..7...4..."
983
+ "GO.9..KF.I.P3...E.HJ...N7"
984
+ "5.37...B.E...4N..O.8....."
985
+ "4B...7.9O.HL..E2C3.K51.M."
986
+ "L.O42...D..AJ.8...GH.N..E"
987
+ "9M.8.H..LG1..N..5.E..F7B."
988
+ "......FAC..5M..I6J.B4...G"
989
+ "...F..82..P.E......36HK.L"
990
+ "B.J.G5...O.H2..98.7......"
991
+ ,
992
+ // 26
993
+ ".CNPHK.53.O9F..D.78..J..."
994
+ "J.....F.DB...7.G..PAE...L"
995
+ ".6.........5.4A......I..."
996
+ "A..L.6.E.1JG....5.H.2...9"
997
+ "..G4..P...E2N.M...C..FB.1"
998
+ "..PKJ...G41O..C.N..H....."
999
+ ".M..I5L97J.3H...E2.8...D."
1000
+ "1.4..ON.83G.P.D59..C.BH.."
1001
+ "..2.9.......4.F.3.6..O.7."
1002
+ "3F.7.MEC..5...2..4K.LN8.."
1003
+ "...I........MF7.6AOG..LE."
1004
+ "C1.3..JG..D.9...4..N...68"
1005
+ "...M7L9..NHA...FJ.I..3.C."
1006
+ ".A...P...5...E3.8M..K4OFG"
1007
+ ".....C.6KIP...8..3.DJ...."
1008
+ ".2.J...3C..7.D.9A.EF6L..."
1009
+ "4...3.6N.....L9.H..P8...2"
1010
+ ".9.C.4H.......P....1..FJ3"
1011
+ ".LD.K87.1.BM5AJN....4H.G."
1012
+ ".B..MAI........47O.LD...."
1013
+ ".G....3....F..1..9..M..K6"
1014
+ "P7.A..B8.......2....I.3.."
1015
+ "M..O....9K2..6..1.N.FE.L."
1016
+ "....E...A..N.J.IG8...C.9."
1017
+ "6KL.4...FCI.A.....5J.2D.N"
1018
+ ,
1019
+ // 27
1020
+ "E..I...M......L....D...BK"
1021
+ "F..BH9.K.A2.7..E4.P.6..M."
1022
+ ".6.J..PD8FE.IM...K...54.."
1023
+ "L...8E...IA..HC........7J"
1024
+ ".....7H.4.JK..DOFC....9I."
1025
+ "9...7A.5.B.M34E.KDJ8....."
1026
+ "8...BD....O..7....CP.E.6."
1027
+ ".1.3..8....D...2.ML.B..5A"
1028
+ ".E2.A.O.7..1..I.659..8LD."
1029
+ "KF..M2...PL......A.G..N3."
1030
+ "...76N.1..CBG...DPK..O.J2"
1031
+ ".JK...6B.9..P.7.N.EMFDG.5"
1032
+ "N....G.F.8....OH9.2...E.7"
1033
+ "....4.3....F9.....5.NC.A."
1034
+ "M.A.GL.J......5..4.7.91.."
1035
+ "C.8NE.5..6..M.....BJ17..H"
1036
+ "7.6...NL.41.AC.I8...GJ3.."
1037
+ "...53P.GM2.L..F.....K.68."
1038
+ "J.4.D..H..IG..8K..35.N.FL"
1039
+ "P.F...93.D.....A.1......M"
1040
+ "..7.I...1...DF..PJ.4.MA.."
1041
+ ".KN.....5H..O.63.E.2....4"
1042
+ "....1...O..A2..DCH8B..KE."
1043
+ "3.HA.6BP.....J1957O..28.."
1044
+ "42JO.I...K5C......6.P.B.."
1045
+ ,
1046
+ // 28
1047
+ "...G87..O..F.N..CH6..D..2"
1048
+ "C16..N....DL.3.E........."
1049
+ ".LN.EK..D..O.G6.412....5H"
1050
+ "K...2........59M...P..3.."
1051
+ "..A9.M.6....8.E7O3..K..LB"
1052
+ "7..8B.1.EP.....4.L.6.C.9."
1053
+ ".3.6...9.85.A2F.....B.EP."
1054
+ ".D4K.L..NA....C.M.E..7..."
1055
+ "L..P.3H.CG.7....DKF..I6.."
1056
+ "5EH.G.7.6.1....J....D3K.O"
1057
+ ".6.....G.K.E..I2.4J......"
1058
+ "..ICFP.8H7.2.O.B.NM5..G.."
1059
+ ".M..D9..BE..J..F..I7..LAK"
1060
+ ".BE.L...31.M7FK..C9..8.DN"
1061
+ ".2O......D38C...E...F.P.."
1062
+ ".A.....M..NB..3.J.7E8..2."
1063
+ "...O...B..6..C.8KG4..5D7M"
1064
+ "....M8..I..9..AL1.O.3HBNG"
1065
+ ".C..4....L.....D.F......."
1066
+ "J..5NF..G...H..6..C..1..."
1067
+ "D..N..O....G9.J.A..I...8."
1068
+ ".F.H1BN.K.O.4.8.6.3.9.M.."
1069
+ "B...I....9K..6..2...G.H1."
1070
+ "O...7.CJMI25N...HDKBPFAE."
1071
+ ".....28.F..C........O.JK."
1072
+ ,
1073
+ // 29
1074
+ "9.K..6D.I5...........H..."
1075
+ ".I.E..BK...GN...6.L...3.."
1076
+ "7....2..L8E.K.D1.P5I.6..A"
1077
+ "..N.LEH.A32..CM9........."
1078
+ "..2....9N...3.IC...J.KF8."
1079
+ "......GA..C.7JPNI3....6L."
1080
+ "....E.J.8K..I.....97NG2.B"
1081
+ "O7..3HI...M.....DCF5..914"
1082
+ "L.M.4.3.19.D..2......F.K."
1083
+ "B....F...O9.6ANG.2.PH.E.5"
1084
+ "8KDM...5.1....G......P..6"
1085
+ ".4.H.L.C..J2....G..3ION.."
1086
+ "C.A..J..E...1K......92.5."
1087
+ ".9O.NP.2...IA....H..G..7."
1088
+ "...I5..O.N4.H...2DCKJ...E"
1089
+ "56....1.D..AJ.....7.L.O.."
1090
+ "K.8.H.7.9.5....AC..O..G6F"
1091
+ "3..........O..C.F.P6K.5.."
1092
+ "...OC.4J2.3E.9...N.H7..P1"
1093
+ ".B.7.K.....6.MH.LJ..A...."
1094
+ "I..4.........P..E7D9O.B.H"
1095
+ "E.3G.OP...I1CBL..FN4..82."
1096
+ ".A..9N.8.E...73O..H....4."
1097
+ ".M.C.3....DK..EI......JG."
1098
+ ".HP..D..FB...NO.1KJ8.AL.."
1099
+ ,
1100
+ // 30
1101
+ "....L.1.8H.CO..P....FA..."
1102
+ "P1.2.4CO...K..A..3H8...7."
1103
+ "I..H.G.5.B.6.M..A24.K..9."
1104
+ "....6I.KF9..5.P.J1.BDCE.M"
1105
+ ".A....2...F..L..E.M.6.5O3"
1106
+ "7..1.C...8.L9..4P.5.G.K.."
1107
+ "JO.5H.M2.I.7.F.6D..A4..NE"
1108
+ "E.3.NO....K2...LG..7JM..."
1109
+ ".9F.CJ.H....A.NKB.1..2.5."
1110
+ "2LB...5..7.P36H.M..N...1D"
1111
+ ".....P..B....46.HJ......."
1112
+ "B4..7LI.C.GD2...KA.3H...."
1113
+ "K5......6J1.........27O8P"
1114
+ "LP...5K.G..JB3.......1.M."
1115
+ "..EG...4.F.NKC...O..9.B.."
1116
+ "..MI...D32AGP..5O...74.BN"
1117
+ "FC74.....1..LO..8...5.D.J"
1118
+ "..JN....H...E.I...DPA3.6."
1119
+ "AE.......O3F..5.........H"
1120
+ "...8..6......24.9G....I.1"
1121
+ ".M....8.9..O1.F.C.EL3...A"
1122
+ ".N...E.3.....I7M1...ODG.K"
1123
+ "1......P.N9..D..5........"
1124
+ ".I.P..FGOCMA.......J.5..2"
1125
+ ".GK....7...3.....92..B.L4"
1126
+ ,
1127
+ // 31
1128
+ "...H....GKM.43..B.D......"
1129
+ "15I.C....8B.6D.7G....A.H4"
1130
+ ".7...F..B...J.E16.N....3."
1131
+ "...D.1...6L7.H.5K....P98F"
1132
+ "KJ.AF.5CHO...NP2M.....B.."
1133
+ "4..K..I9.M.DNP..A.3..E5O6"
1134
+ "PGC...HE.....I5..M...7..J"
1135
+ ".B.EJ..G.5..L....D.48.2.."
1136
+ ".D....N.4.J.2A..H..5..F1."
1137
+ "8....AJLD.7..OM...1B....P"
1138
+ "CH...N..7.........B3....."
1139
+ "I..O.JL..P5...3......KH.8"
1140
+ "D.259.E......6.......L3.."
1141
+ "...3K6.B.AE..74N25H..G1.."
1142
+ ".L.B..41.HC...G.OIP8..MN7"
1143
+ ".........2.C.4.L....69.I5"
1144
+ "N...7.C...69.5.A......PKL"
1145
+ "....L.G...13.BOMP.82..D7H"
1146
+ "...C.H..5.P.E.K...I7....."
1147
+ "JO..P.96ABI8.....C..N..4G"
1148
+ ".NA8H.32..O4..IB..L9G..J."
1149
+ "..4.GD..M.3..27INJ.O....."
1150
+ ".C9L..A..J.....6.2..I..F."
1151
+ "BK...4..F.A.CL..87.1.O.M."
1152
+ "6..P.I.5...M..N....F....D"
1153
+ ,
1154
+ // 32
1155
+ ".6OL.3GB.I.1F.EP..9..24.."
1156
+ "..1.P.....K....N.2.....ID"
1157
+ "2.8.K7..J...6..1F.......A"
1158
+ "...D.8.4..29..LJ7.HMKPF.."
1159
+ "..I.9N...A..P.M.DK...E5.."
1160
+ "94.N...5..F..E.C182..BG3."
1161
+ "8D..3HC....6G.....P.F.72I"
1162
+ "C..I.E.7D....8BG.F...6..."
1163
+ "......L....N.24..I..1K.DJ"
1164
+ ".27HG.NF......I..L..E.A.."
1165
+ "L...N.I8F6.H.9K.3O..B..5P"
1166
+ ".9...L..25.B14F.N.JE...7K"
1167
+ ".1...9B....GJ.8.A.5C....."
1168
+ "....CPK..J....5.M.7.6.H.3"
1169
+ "..F7..3..O..N..B8....421."
1170
+ "AM.8....P...71..26N...3G."
1171
+ "P....D.2.78.O..5CJ.GA.BH."
1172
+ "6..4.F...3...K9A..1...J.M"
1173
+ ".I2.E......JM.N...B98..P."
1174
+ "FC..7..6.EI.D.G...3H5..KN"
1175
+ "I8NO.4F.9..DB....5......."
1176
+ "5..1...G3.MIH.A.9..N....."
1177
+ "KG.62..1.....L3.....IJE.F"
1178
+ "....D.6.AC4.9.....OL.HP.."
1179
+ "..EA.5O.L.6.......D...9N."
1180
+ ,
1181
+ // 33
1182
+ ".CH3.L..D4F..I.........1."
1183
+ "G..K.....7.O.......L.42N."
1184
+ "A.D...5O8B...39G.4..I...L"
1185
+ "1E2OB....A8N..6FCD9.H...G"
1186
+ "IN..4..3.....J..5OM....9."
1187
+ "...JEMP..9G8..D7......BA."
1188
+ "B.M9..L....6...2.FI.KJ..."
1189
+ ".LN.386A..BH....O.J.2..7."
1190
+ "7A6..2..3N.....4KP..G8HIC"
1191
+ ".1.....J.CK3....HB..5L4.."
1192
+ ".H......P.I.57....G..21B4"
1193
+ "....7.....EP1....3.2..A.."
1194
+ ".59.1FI.L8.MJG.B..AH....E"
1195
+ "NI..D....O3K..A.P9..8F..."
1196
+ ".O....A..E2.8.HN.J7.P...."
1197
+ ".MC..P....H2...A7..ID...1"
1198
+ ".6.....M.J.14.BDG.3.O9F2."
1199
+ ".......CG.........4...M.."
1200
+ "HDL...8N7.......FK2C.E..B"
1201
+ "..KP2I.F.3...N7J.E.6..L85"
1202
+ "D.E...C.4.7B..I....A.1..M"
1203
+ "J..M..7..D.A..4...ONBG..2"
1204
+ "9.7.6..K..P..O....D...8.."
1205
+ ".2IN..GE1.D..8...MK.CPJH."
1206
+ "FG..8B.2.L..KH.....1.5E..",
1207
+
1208
+ // 55 16x16 instances (mostly harmless) from janko.at
1209
+
1210
+ // http://janko.at/Raetsel/Sudoku/301.a.htm
1211
+ // 34
1212
+ "D92.....G...43.."
1213
+ "4CF.....9D.2.6EB"
1214
+ ".E.1....F.8BC..A"
1215
+ "G56.....A3C....1"
1216
+ ".7G5A8....61...."
1217
+ "2...C....B7....."
1218
+ "..AE.964..G....."
1219
+ ".F9.5.7.4......."
1220
+ ".....29....A.C.."
1221
+ "........645D.1.."
1222
+ "....D....1.C.B7F"
1223
+ ".....E.C2G...8A9"
1224
+ "B..9.G52.....EF6"
1225
+ ".256..F.....D.B."
1226
+ "E13.6.D........7"
1227
+ "A...8BC3....954."
1228
+ ,
1229
+
1230
+ // http://janko.at/Raetsel/Sudoku/302.a.htm
1231
+ // 35
1232
+ ".DG1.C.BE..3.4.A"
1233
+ "..7B.62..41...59"
1234
+ ".......D.....G.."
1235
+ "..49.7.3.B6..FD."
1236
+ ".9..G...C......4"
1237
+ "G..46....9F.3.B."
1238
+ ".C5.1...BE.86..G"
1239
+ ".B.....E2G...D.."
1240
+ "..3...596.....1."
1241
+ "F..C2.76...B.E3."
1242
+ ".1.8.4D....7F..5"
1243
+ "E......F...D..9."
1244
+ ".AB..FG.1.3.C8.."
1245
+ "..2.....F......."
1246
+ "8F...BC..62.97.."
1247
+ "1.6.A..59.C.GB2."
1248
+ ,
1249
+
1250
+ // http://janko.at/Raetsel/Sudoku/303.a.htm
1251
+ // 36
1252
+ ".....D.3..7F.A.."
1253
+ "...B1.F8....26.."
1254
+ ".F.3...6D..AC..."
1255
+ "AGC.9.5..8....BD"
1256
+ "E.FG5...7...A.9."
1257
+ "2.7.....89A36.F5"
1258
+ "...1.9...CBE...."
1259
+ ".3....A.....BG2."
1260
+ ".1B2.....7....6."
1261
+ "....B16...3.9..."
1262
+ "5D.4F3EA.....2.B"
1263
+ ".E.A...9...D83.C"
1264
+ "4A....B..E.8.FC9"
1265
+ "...EA..G1...D.4."
1266
+ "..GC....FD.B1..."
1267
+ "..D.47..6.C....."
1268
+ ,
1269
+
1270
+ // http://janko.at/Raetsel/Sudoku/304.a.htm
1271
+ // 37
1272
+ "....9...5...3B.."
1273
+ "...D13.7.4.....F"
1274
+ "637...2..81AC9.."
1275
+ ".2G..5.......18D"
1276
+ "...F4...3...8C.."
1277
+ "E.D.7..6..G...A5"
1278
+ "C5.6..3....F.2.."
1279
+ "4.A...1D72.9..B."
1280
+ ".E..D.9CA6...F.1"
1281
+ "..9.5....E..D.26"
1282
+ "B6...4..D..5.7.A"
1283
+ "..F4...A...C9..."
1284
+ "AB4.......2..G6."
1285
+ "..68FBD..5...A47"
1286
+ "1.....6.9.E4B..."
1287
+ "..32...5...B...."
1288
+ ,
1289
+
1290
+ // http://janko.at/Raetsel/Sudoku/305.a.htm
1291
+ // 38
1292
+ "..16.E.8.BF.4..."
1293
+ ".5...9D......A73"
1294
+ "..3...B.78.D.6.."
1295
+ "......1...9...BE"
1296
+ "C..1D..6B5..7.A4"
1297
+ "...5.F.98..32.DG"
1298
+ "3.....C..D.A5.E."
1299
+ "....3B5.F7...9.."
1300
+ "..5...6C.2AE...."
1301
+ ".3.BE.2..4.....9"
1302
+ "F9.2A..B5.7.G..."
1303
+ "EA.G..756..BD..1"
1304
+ "6C...8...9......"
1305
+ "..9.6.47.E...D.."
1306
+ "2GE......C6...F."
1307
+ "...3.CG.2.D.65.."
1308
+ ,
1309
+
1310
+ // http://janko.at/Raetsel/Sudoku/306.a.htm
1311
+ // 39
1312
+ ".....D5..7.169.."
1313
+ "..4..2BE8.G..A.."
1314
+ "8DA....752..BGF."
1315
+ "G.9EA.86..3F2..."
1316
+ "C..4G1.....7F..."
1317
+ ".G.A...315.6..C8"
1318
+ "E.5..F7.4G..1.A2"
1319
+ ".91..BE...D.54G."
1320
+ ".68D.3...C5..B9."
1321
+ "4E.5..9B.31..F.G"
1322
+ "3B..E.G1A...C.4."
1323
+ "...95.....F83..7"
1324
+ "...C9G..F1.5D8.B"
1325
+ ".468..DFC....3E5"
1326
+ "..2..E.A7DB..C.."
1327
+ "..EFB.3..86....."
1328
+ ,
1329
+
1330
+ // http://janko.at/Raetsel/Sudoku/307.a.htm
1331
+ // 40
1332
+ ".BC..32...9..D.."
1333
+ ".3..CB...52A.9E4"
1334
+ "7E.A...D8.6B2..5"
1335
+ "..9F..A.DC7.B6.."
1336
+ ".15..2.E..3...4."
1337
+ "4GD81.3C...7..6F"
1338
+ ".C.9....E.4.G..1"
1339
+ "..E3..59G.FD.B.."
1340
+ "..A.2E.FC9..84.."
1341
+ "B..E.9.4....F.A."
1342
+ "16..A...57.F3E9B"
1343
+ ".9...6..4.E..7G."
1344
+ "..64.C85.2..DA.."
1345
+ "E..DB1.23...6.59"
1346
+ "C5G.9D4...1E..2."
1347
+ "..2..F...DA..CB."
1348
+ ,
1349
+
1350
+ // http://janko.at/Raetsel/Sudoku/308.a.htm
1351
+ // 41
1352
+ "G.E37..1.....6.."
1353
+ "96..E..3..G5D.F."
1354
+ ".7..64.CF31..29E"
1355
+ "....F...8.9E437."
1356
+ "6AF...D.3..1...."
1357
+ "..1...B5.8F47..3"
1358
+ ".83B2.47.G....61"
1359
+ "..79.6...EC..8.G"
1360
+ "E.C..2A...8.FG.."
1361
+ "25....C.GA.78B4."
1362
+ "7..AD3F.24...E.."
1363
+ "....G..B.1...C52"
1364
+ ".4A2B5.D...8...."
1365
+ "FE8..G2A1.73..C."
1366
+ ".C.78F..4..2..E5"
1367
+ "..9.....E..G34.8"
1368
+ ,
1369
+
1370
+ // http://janko.at/Raetsel/Sudoku/309.a.htm
1371
+ // 42
1372
+ ".G.4..1E6.9...2."
1373
+ ".D..4G.C.....9F7"
1374
+ "..79.D...5C.B.G."
1375
+ ".EFC7...G..D.5.3"
1376
+ "5...C...E6BFD..."
1377
+ "...1...5..D.CB.2"
1378
+ "7.CG29.D3...E8.F"
1379
+ "94...EGB.2.C...."
1380
+ "....E.2.583...CD"
1381
+ "3.D5...89.FB7G.E"
1382
+ "4.1E.F..A...3..."
1383
+ "...F1B3G...E...9"
1384
+ "F.9.8..1...G23D."
1385
+ ".A.B.4D...7.5F.."
1386
+ "8CE.....1.25..7."
1387
+ ".7...5.3F9..G.8."
1388
+ ,
1389
+
1390
+ // http://janko.at/Raetsel/Sudoku/310.a.htm
1391
+ // 43
1392
+ "...4.1.9..7...B5"
1393
+ "6E..2.8....CGA.."
1394
+ ".51....B.D....6."
1395
+ "B.9..E..G..A...7"
1396
+ "..7.5F9G..48...."
1397
+ "..29..3..F..5.7."
1398
+ "G.BD...837.E..94"
1399
+ "......7E.1.6A2G3"
1400
+ "94GA7.2.63......"
1401
+ "5B..A.E18...79.2"
1402
+ ".1.8..6..4..BD.."
1403
+ "....G8..EB92.4.."
1404
+ "D...9..A..1..G.6"
1405
+ ".3....4.C....1E."
1406
+ "..4B6....E.7..2A"
1407
+ "F9...5..A.3.4..."
1408
+ ,
1409
+
1410
+ // http://janko.at/Raetsel/Sudoku/361.a.htm
1411
+ // 44
1412
+ ".G..5.2.E.FA.4C."
1413
+ "AB..G....35.17D9"
1414
+ "53..4AC..DB....."
1415
+ ".6.C3B..2.8.5..."
1416
+ "1...A....E.D9CG3"
1417
+ "GDA9.4..B.1.6E.."
1418
+ ".FB.1..E9....D.8"
1419
+ "C..3.59G48......"
1420
+ "......F38G2.7..4"
1421
+ "6.3....A7..9.8E."
1422
+ "..CE.9.1..4.DG35"
1423
+ "89GD2.4....6...C"
1424
+ "...G.C.4..958.7."
1425
+ ".....1A..F78..42"
1426
+ "4871.3G....2..9A"
1427
+ ".C9.72.8.6.4..1."
1428
+ ,
1429
+
1430
+ // http://janko.at/Raetsel/Sudoku/362.a.htm
1431
+ // 45
1432
+ "A...18..79..C..6"
1433
+ ".37.A2...FD...E9"
1434
+ "G14D..5...8C.A.."
1435
+ ".268.E7.3A....D5"
1436
+ "3...D1...7A2.8.4"
1437
+ "7CF.9..4....D.2."
1438
+ "5..63.A28...1CF."
1439
+ "...1.6...3FD..5."
1440
+ ".A..FC6...9.3..."
1441
+ ".D2F...3A5.1E..8"
1442
+ ".9.G....D..7.F1C"
1443
+ "E.C.G9D...3F...7"
1444
+ "17....9B.2E.43C."
1445
+ "..9.E3...C..5D7F"
1446
+ "FE...AC...G5.29."
1447
+ "D..C..2F..73...E"
1448
+ ,
1449
+
1450
+ // http://janko.at/Raetsel/Sudoku/363.a.htm
1451
+ // 46
1452
+ "3.8.BD..5F72E..6"
1453
+ "..G..4.7E..6F5.."
1454
+ ".AF.2..C....9G73"
1455
+ "59C...FE.AG....."
1456
+ "C5..1..F.4.G.E.7"
1457
+ "F..2.C..B13...GD"
1458
+ "4..B73.D....C..."
1459
+ "GD...A...C.7B48."
1460
+ ".G5FD.3...9...BE"
1461
+ "...C....6.E1G..9"
1462
+ "28...7E1..B.6..4"
1463
+ "1.B.5.C.3..8..AF"
1464
+ ".....ED.16...345"
1465
+ "9C21....7..A.8E."
1466
+ "..EA9..3F.8..7.."
1467
+ "6..5827A..4D.F.C"
1468
+ ,
1469
+
1470
+ // http://janko.at/Raetsel/Sudoku/364.a.htm
1471
+ // 47
1472
+ "1.....6C.4G.9BA."
1473
+ ".G6..F.9A.D1...2"
1474
+ "...D7G.3F...41.."
1475
+ ".3A.2..1.759.E.G"
1476
+ "B8..D.F.C.2.A..."
1477
+ "C....1..DBFA2..5"
1478
+ "..FG.E.....58C9."
1479
+ ".25A3.C.G..E...1"
1480
+ "3...4..B.G.DE78."
1481
+ ".C78A.....3.12.."
1482
+ "5..1FC37..E....9"
1483
+ "...4.2.8.F.B..CA"
1484
+ "A.4.6B7.5..F.9D."
1485
+ "..8C...DB.975..."
1486
+ "9...85.E3.A..46."
1487
+ ".5D7.A9.E2.....8"
1488
+ ,
1489
+
1490
+ // http://janko.at/Raetsel/Sudoku/365.a.htm
1491
+ // 48
1492
+ "..D.2...5A1....F"
1493
+ "E21F..9..6.D...G"
1494
+ "7A.9G1..2E.4D..8"
1495
+ ".B64.3FA...8.E.2"
1496
+ "...3...F...G2A.."
1497
+ ".F7...5.8D4.B.3."
1498
+ "4....C.....F8.D1"
1499
+ ".G....B3A2.....6"
1500
+ "3.....4CF8....6."
1501
+ "94.B1.....D....E"
1502
+ ".C.A.E8D.B...15."
1503
+ "..G8B...1...C..."
1504
+ "B.A.8...6F2.3DE."
1505
+ "2..16.E5..A39.84"
1506
+ "6...9.3..5..1C2B"
1507
+ "8....D12...9.6.."
1508
+ ,
1509
+
1510
+ // http://janko.at/Raetsel/Sudoku/366.a.htm
1511
+ // 49
1512
+ "3....2A.4F.6..G1"
1513
+ "ADF4..3..5....E."
1514
+ "..5G..1E....FAB."
1515
+ "..E.GF75..B..93."
1516
+ "B...17...A629..."
1517
+ "...EFG..7.516..C"
1518
+ "63..D...G...E42F"
1519
+ "2....8639...1G.."
1520
+ "..B8...76G2....E"
1521
+ "5C32...4...E..1G"
1522
+ "G..62E.9..D4B..."
1523
+ "...D5CG...A3...7"
1524
+ ".G7..5..84F9.B.."
1525
+ ".F6B....5E..21.."
1526
+ ".5....B..6..7EF9"
1527
+ "E4..A.9F.BC....5"
1528
+ ,
1529
+
1530
+ // http://janko.at/Raetsel/Sudoku/367.a.htm
1531
+ // 50
1532
+ "B........45DC.6A"
1533
+ "4.F...639.CA.E.."
1534
+ ".9A...CD26.8F1B."
1535
+ "6.C3.7.8.F..9..."
1536
+ "D68.E..B...5...."
1537
+ "73...8A5..9.2..."
1538
+ "A.G1..9..26..D8."
1539
+ ".C9.......81A6E."
1540
+ ".574FA.......G1."
1541
+ ".AD..37..G..4F.E"
1542
+ "...9.G..452...CD"
1543
+ "....B...F..9.725"
1544
+ "...B..G.C.F.12.9"
1545
+ ".16AC.5FG3...8D."
1546
+ "..2.36.759...C.F"
1547
+ "F8.C194........6"
1548
+ ,
1549
+
1550
+ // http://janko.at/Raetsel/Sudoku/368.a.htm
1551
+ // 51
1552
+ "C..B61..G...F.AE"
1553
+ "4E8F...A.....DG."
1554
+ ".D..F3.E1.5A..6."
1555
+ "5.....GBE9FC..82"
1556
+ "..5EB.D8...1.F.6"
1557
+ "..AD.72...6..3.8"
1558
+ "...3..E.9FB85..."
1559
+ "6.B4..1....2CAE."
1560
+ ".3E9C....G..D1.7"
1561
+ "...CEG3D.7..A..."
1562
+ "A.F..B...CD.EG.."
1563
+ "D.7.1...B2.348.."
1564
+ "FG..8EB17A.....3"
1565
+ ".4..D6.G3.CE..5."
1566
+ ".62.....D...74CA"
1567
+ "3B.A...4..9F8..G"
1568
+ ,
1569
+
1570
+ // http://janko.at/Raetsel/Sudoku/369.a.htm
1571
+ // 52
1572
+ "...E.6DB...2.8.."
1573
+ "....5G.3.9F8C1.."
1574
+ "981....FG....7.."
1575
+ ".3.F8....65.2..9"
1576
+ "3G....4A5D..7.F."
1577
+ ".A.D...2......64"
1578
+ ".2.4C.F..A.G...3"
1579
+ "..F.D.....6C.21E"
1580
+ "1F9.B2.....E.D.."
1581
+ "4...E.3..B.DF.2."
1582
+ "5E......9...3.C."
1583
+ ".D.3..8142....5A"
1584
+ "2..5.D6....F1.A."
1585
+ "..4....86....EDG"
1586
+ "..3CGFB.E.DA...."
1587
+ "..G.3...279.6..."
1588
+ ,
1589
+
1590
+ // http://janko.at/Raetsel/Sudoku/370.a.htm
1591
+ // 53
1592
+ "3....1G..5.7.A4."
1593
+ "FE7C.3.9.......G"
1594
+ ".8.....5D9G.C..3"
1595
+ "5G.A6....38.FD7."
1596
+ "...5G.94.8.27C.."
1597
+ ".98.E.5C.G......"
1598
+ "4....7.25.CB.6.A"
1599
+ "2A.F.......6.5G."
1600
+ ".F3.5.......4.DB"
1601
+ "C.B.98.AF.7....6"
1602
+ "......6.2D.C.9E."
1603
+ "..6G4.B.81.9A..."
1604
+ ".D53.C8....E6.97"
1605
+ "A..2.D467.....5."
1606
+ "8.......4.9.32B1"
1607
+ ".4F.2.3..61....C"
1608
+ ,
1609
+
1610
+ // http://janko.at/Raetsel/Sudoku/501.a.htm
1611
+ // 54
1612
+ "..E3.7.1.5.6.B.."
1613
+ "....G85B92.FE..."
1614
+ "C...4.36A......2"
1615
+ ".4.BA......G7..C"
1616
+ "48.2E...5G.9ADB."
1617
+ ".....B...C4...9E"
1618
+ "9A..F42.E1...5C."
1619
+ ".5C.7.9G8....413"
1620
+ "BE8....26A.C.G3."
1621
+ ".FD...7E.931..56"
1622
+ "AC...G6...2....."
1623
+ ".1369.85...BD.A7"
1624
+ "E..A6......5C.7."
1625
+ "3......A7F.E...5"
1626
+ "...51.G7CDA2...."
1627
+ "..G.C.B.3.1.9A.."
1628
+ ,
1629
+
1630
+ // http://janko.at/Raetsel/Sudoku/502.a.htm
1631
+ // 55
1632
+ "G..B..12....73.C"
1633
+ "..8DB.7CG9A....."
1634
+ "6.3...D...4E.8B."
1635
+ "4...38G.21....AD"
1636
+ "..F.........E.6."
1637
+ ".E6..75DFG3.B..."
1638
+ ".7.G.F916EB.4583"
1639
+ ".B.3.E2..89...F1"
1640
+ "74...3E..62.5.1."
1641
+ "9852.CB7DFE.3.G."
1642
+ "...A.56F431..C9."
1643
+ ".F.6.........E.."
1644
+ "C1....F4.B5G...E"
1645
+ ".D4.EG...2...9.8"
1646
+ ".....D8974.1CA.."
1647
+ "B.A7....ED..F..4"
1648
+ ,
1649
+
1650
+ // http://janko.at/Raetsel/Sudoku/503.a.htm
1651
+ // 56
1652
+ "7B..9C.3..6.A.2E"
1653
+ "4.2...67A..53..D"
1654
+ ".....ADE.CB.4.5."
1655
+ "AD8....B7.F....."
1656
+ ".C...1.A.9.....8"
1657
+ "F.E8...C.4.D.6.2"
1658
+ "..D.59.......1A."
1659
+ ".1.2......7FBDC3"
1660
+ "BF6EC4......2.7."
1661
+ ".53.......C2.E.."
1662
+ "D.G.2.A.5...F3.C"
1663
+ "2.....1.B.3...8."
1664
+ ".....F.43....CD7"
1665
+ ".8.G.E7.C25....."
1666
+ "C..DG..1F7...2.A"
1667
+ "E7.A.6..9.18..B5"
1668
+ ,
1669
+
1670
+ // http://janko.at/Raetsel/Sudoku/504.a.htm
1671
+ // 57
1672
+ ".21..BD...EF6G.."
1673
+ "..6.5.F....D.8.E"
1674
+ "G4.....EB.7.1.D3"
1675
+ "C.D..37G..61...."
1676
+ "AB.D8..9.1.E..F."
1677
+ "6.F4..G..D..8..B"
1678
+ "....BD.1F.8.7.C9"
1679
+ "..3...6..G.BED.."
1680
+ "..B91.C..E...A.."
1681
+ "47.2.6.A3.1G...."
1682
+ "8..3..E..B..F1.G"
1683
+ ".1..7.3.D..C9.25"
1684
+ "....GF..28B..4.A"
1685
+ "5A.8.4.B1.....GF"
1686
+ "D.2.C....F.6.7.."
1687
+ "..41DA...7G..C9."
1688
+ ,
1689
+
1690
+ // http://janko.at/Raetsel/Sudoku/505.a.htm
1691
+ // 58
1692
+ ".B...7..4D..E13."
1693
+ "D......6G.E7...F"
1694
+ "8.6F....B....7.."
1695
+ "7...91D..F8C.B.."
1696
+ ".F.G8.1.3..27..."
1697
+ ".1.6.4329.7.F..D"
1698
+ "3..7..5..GBD8..."
1699
+ "48D.CE....A...9."
1700
+ ".3...G....C4.9EB"
1701
+ "...148C..3..A..2"
1702
+ "9..4.6.7FA5.C.G."
1703
+ "...EF..5.1.B6.D."
1704
+ "..5.ABG..7F9...6"
1705
+ "..3....F....18.E"
1706
+ "G...E5.32......9"
1707
+ ".6FB..89..3...C."
1708
+ ,
1709
+
1710
+ // http://janko.at/Raetsel/Sudoku/506.a.htm
1711
+ // 59
1712
+ "...FDAE..6.1.3B."
1713
+ "1..C...9.D34.6.."
1714
+ "8A3.4.....2E7C.."
1715
+ "..DG.3......8.5E"
1716
+ "3F2.C.....8B.5.9"
1717
+ ".DE.8..B2C..A..4"
1718
+ "C8...1.........6"
1719
+ ".....D.31.5...E."
1720
+ ".G...E.84.D....."
1721
+ "A.........1...43"
1722
+ "D..E..17C..2.FG."
1723
+ "2.5.AF.....9.D7B"
1724
+ "73.2......6.B4.."
1725
+ "..483B.....D.A61"
1726
+ "..A.14F.B...5..C"
1727
+ ".1C.6.D..24A9..."
1728
+ ,
1729
+
1730
+ // http://janko.at/Raetsel/Sudoku/507.a.htm
1731
+ // 60
1732
+ "4.8CB9G...D..FA2"
1733
+ "G..18..A96...E.."
1734
+ "F9....ED..8....B"
1735
+ "...D73...2F.G.81"
1736
+ ".......2....C.F9"
1737
+ "3.D7.E6...9.4..A"
1738
+ ".C.4..D9.GA..3.7"
1739
+ ".2.......7.3.65."
1740
+ ".3B.5.2.......D."
1741
+ "6.4..G8.FC..B.2."
1742
+ "E..G.B...D2.18.F"
1743
+ "CD.2....3......."
1744
+ "D1.B.8F...C9E..."
1745
+ "2....D..1B....G5"
1746
+ "..5...17D..G9..C"
1747
+ "7E9..C...468FD.3"
1748
+ ,
1749
+
1750
+ // http://janko.at/Raetsel/Sudoku/508.a.htm
1751
+ // 61
1752
+ "D.B.8.4..5G..2.9"
1753
+ ".C..6.3...D1.7B."
1754
+ "GE4.B..52A..FD.C"
1755
+ "..7.2..E.F9....."
1756
+ ".2..4....3.D9GEF"
1757
+ "43.7..A..8......"
1758
+ "5.ABGD.F..1...37"
1759
+ "..E......7..6B.."
1760
+ "..2E..G......3.."
1761
+ "C5...B..D.F971.8"
1762
+ "......5..2..C.GE"
1763
+ "348GD.C....7..5."
1764
+ ".....91.8..F.6.."
1765
+ "1.G2..F65..E.89B"
1766
+ ".8C.54...1.G..F."
1767
+ "F.5..87..9.A.C.1"
1768
+ ,
1769
+
1770
+ // http://janko.at/Raetsel/Sudoku/509.a.htm
1771
+ // 62 // problems
1772
+ "..EF96...8.5B.C."
1773
+ "D...FE....1.2A.."
1774
+ ".86..2..C...57.1"
1775
+ "C21...BD9..E...3"
1776
+ "5..1.C...6....DA"
1777
+ ".G.....7.E.1.5BC"
1778
+ "B...D1..8...7..."
1779
+ "..9D..A27.3.E..."
1780
+ "...3.A.E5B..6F.."
1781
+ "...5...C..83...B"
1782
+ "FDB.2.9.6.....5."
1783
+ "61....5...E.G..9"
1784
+ "4...8..3B7...EA2"
1785
+ "E.26...A..G..CF."
1786
+ "..58.D....4F...G"
1787
+ ".B.7C.2...5AD9.."
1788
+ ,
1789
+
1790
+ // http://janko.at/Raetsel/Sudoku/510.a.htm
1791
+ // 63
1792
+ "..2..DA6.38.14.."
1793
+ "...5.F..2......."
1794
+ "6.8.2.G.....7A.B"
1795
+ "A.F.....65.G..D."
1796
+ "...6.8E.52...B.."
1797
+ "7....2.F.G39..8E"
1798
+ "8..3679..4.C.1.G"
1799
+ ".B.EG..18.A....7"
1800
+ "1....A.8C..FG.3."
1801
+ "E.A.1.3..D42B..5"
1802
+ "97..CG6.1.B....4"
1803
+ "..3...2D.E6.A..."
1804
+ ".C..B.74.....5.A"
1805
+ "B.68.....C.7.D.F"
1806
+ ".......A..1.2..."
1807
+ "..4A.C8.E6G..7.."
1808
+ ,
1809
+
1810
+ // http://janko.at/Raetsel/Sudoku/511.a.htm
1811
+ // 64
1812
+ "A..95.B.G...8.FD"
1813
+ "G.D...6FB...A5.."
1814
+ ".B...1D83.A9G.7."
1815
+ "F68....G5..1...C"
1816
+ "..28DA9..5FC...G"
1817
+ "..G.87.2.A4D.6.."
1818
+ "....3F.....E.CD9"
1819
+ "9C5D......G.FA8."
1820
+ ".71B.6......5842"
1821
+ "D5F.B.....26...."
1822
+ "..9.127.F.85.D.."
1823
+ "2...E35..CB719.."
1824
+ "6...F..BE....734"
1825
+ ".F.ECD.3479...2."
1826
+ "..AG...9C1...F.8"
1827
+ "39.5...1.D.FB..A"
1828
+ ,
1829
+
1830
+ // http://janko.at/Raetsel/Sudoku/512.a.htm
1831
+ // 65
1832
+ "....G5D.C1...B2."
1833
+ "6...E.BC.G..D8.."
1834
+ "D13C..7..4..5G.."
1835
+ ".72B48..5.6.C9.."
1836
+ "....B9E....F4.12"
1837
+ "...A..FD7B.C8..3"
1838
+ "E6F..1....G3.DB9"
1839
+ "B..4.2.89.1...G."
1840
+ ".5...7.ED.C.G..8"
1841
+ "C9D.14....E..A35"
1842
+ "8..2D.591A..6..."
1843
+ "7G.36....259...."
1844
+ "..6D.E.5..B4A27."
1845
+ "..95..2..8..B3D4"
1846
+ "..7G..4.6E.5...F"
1847
+ ".B8...97.C32...."
1848
+ ,
1849
+
1850
+ // http://janko.at/Raetsel/Sudoku/513.a.htm
1851
+ // 66
1852
+ "D...9A..6.F4.3.C"
1853
+ "....B6..5A.E9D.."
1854
+ "6E5......D..7F.."
1855
+ ".3G9..FDC...4..."
1856
+ "16..AF4..C.7..58"
1857
+ "G....1..A.B8..F9"
1858
+ ".7C.3..8...F6..."
1859
+ "A8.F.G.C43..2..."
1860
+ "...7..9E3.D.8.4F"
1861
+ "...8G...9..5.6C."
1862
+ "59..F3.4..C....G"
1863
+ "4F..6.D..B7A..2E"
1864
+ "...D...BE9..G86."
1865
+ "..2G..3......BE5"
1866
+ "..E48.6A..2C...."
1867
+ "3.8.E5.F..AD...4"
1868
+ ,
1869
+
1870
+ // http://janko.at/Raetsel/Sudoku/514.a.htm
1871
+ // 67
1872
+ "...B562E.1G....."
1873
+ ".D27A...4...56B."
1874
+ ".G6..B.C..2..E7."
1875
+ ".1.C..7.DB..3.42"
1876
+ "....37.2E..G..64"
1877
+ "D.3..5..C.A8.G.1"
1878
+ "C..A...F9...D..3"
1879
+ ".2.FDG8..3.4.5.E"
1880
+ "2.8.F.4..CEBG.5."
1881
+ "E..D...G5...C..B"
1882
+ "1.5.2C.D..9..F.8"
1883
+ "FC..E..5G.81...."
1884
+ "A3.5..G8.9..6.E."
1885
+ ".F4..A..2.1..39."
1886
+ ".E16...3...C42G."
1887
+ ".....E1.763AF..."
1888
+ ,
1889
+
1890
+ // http://janko.at/Raetsel/Sudoku/515.a.htm
1891
+ // 68
1892
+ "A.5.FB.C...7..3."
1893
+ "G38....D.C.EB5.."
1894
+ "..F...3.9G8..D7."
1895
+ "...E.2.4.A.59.FG"
1896
+ "8..A..6.3F7D5..."
1897
+ "B..4....5...DEA."
1898
+ "61..BD75..E....."
1899
+ ".5C.1E.A.8....62"
1900
+ "C8....E.7.62.GD."
1901
+ ".....A..D95F..84"
1902
+ ".D41...6....2..7"
1903
+ "...928D1.E..3..C"
1904
+ "57.3E.A.8.9.C..."
1905
+ ".21..C58.4...F.."
1906
+ "..6C9.1.2....AEB"
1907
+ ".A..D...G.1C.4.5"
1908
+ ,
1909
+
1910
+ // http://janko.at/Raetsel/Sudoku/516.a.htm
1911
+ // 69
1912
+ "...E9.5..6.G...F"
1913
+ ".6.4.3.G...7.1.B"
1914
+ ".37A.E..49.5C..."
1915
+ "9....C76.32E.548"
1916
+ ".E...4..DG9.2..."
1917
+ ".4...562C...G8.."
1918
+ ".G93..1B5F.2.C.7"
1919
+ "C1.639.A.......5"
1920
+ "D.......2.496.8G"
1921
+ "6.3.F.9EG5..B2C."
1922
+ "..AB...86EC...3."
1923
+ "...9.2C1..B...D."
1924
+ "7A1.462.3B5....D"
1925
+ "...D5.89..G.1BA."
1926
+ "E.5.G...9.6.F.2."
1927
+ "4...B.E..D.87..."
1928
+ ,
1929
+
1930
+ // http://janko.at/Raetsel/Sudoku/517.a.htm
1931
+ // 70
1932
+ ".FE6.A.8......1."
1933
+ "145..7.E..F...68"
1934
+ "...C.4..EG82..5F"
1935
+ "....5FD.7B1..C.4"
1936
+ "..4.82A.C..1B..."
1937
+ ".8C7..5....AD24G"
1938
+ "..1F..9.G83BA..."
1939
+ "..A9F.E6D.....71"
1940
+ "F9.....53C.718.."
1941
+ "...321CD.6..74.."
1942
+ "A1726....4..GFC."
1943
+ "...49..F.1A8.E.."
1944
+ "D.F..62B.593...."
1945
+ "4B..D83A..2.5..."
1946
+ "87...5..B.4..936"
1947
+ ".6......8.7.CBD."
1948
+ ,
1949
+
1950
+ // http://janko.at/Raetsel/Sudoku/518.a.htm
1951
+ // 71
1952
+ "...84......D.1F7"
1953
+ ".6.C..A.4G.....9"
1954
+ "..945.G.8.F..3A."
1955
+ "...7CFD2.3...E.G"
1956
+ "..6B..58..G....."
1957
+ "8.7..G.C9.4A1..E"
1958
+ "C..EA3.9...5.GD."
1959
+ ".F...2.....B3.8A"
1960
+ "AB.6F.....C...9."
1961
+ ".7E.B...5.16G..3"
1962
+ "1..G79.3A.D..C.5"
1963
+ ".....1..7E..AB.."
1964
+ "3.4...8.E792B..."
1965
+ ".E8..D.B.A.359.."
1966
+ "5.....1A.D..E.3."
1967
+ "69D.2......C7..."
1968
+ ,
1969
+
1970
+ // http://janko.at/Raetsel/Sudoku/519.a.htm
1971
+ // 72// problems
1972
+ "CD.E9.8......6.."
1973
+ ".62..3...E..85.7"
1974
+ ".G...6...AF5...D"
1975
+ "....D54.39.8...E"
1976
+ "6FB..ED4...G.1.."
1977
+ "4.A.5..2D......G"
1978
+ ".C.1...GF53A2..6"
1979
+ ".2.3.A.1....F..."
1980
+ "...2....4.B.9.6."
1981
+ "3..6G8E95...4.2."
1982
+ "G......D9..3.F.8"
1983
+ "..4.2...68A..GC3"
1984
+ "A...1.3E.D9C...."
1985
+ "E...49C...5...1."
1986
+ "2.9D..A...8..3F."
1987
+ "..8......2.7A.E5"
1988
+ ,
1989
+
1990
+ // http://janko.at/Raetsel/Sudoku/520.a.htm
1991
+ // 73
1992
+ "D..6..1.2C3....8"
1993
+ "..1..386..5..9.."
1994
+ ".8C2......DGBF1."
1995
+ "..5.G......1.A.D"
1996
+ "..A876..4..C5..."
1997
+ "64F...AD.2.5..C."
1998
+ "E....1B9.6A...24"
1999
+ "B...4....8G...7."
2000
+ ".7...BD....6...9"
2001
+ "FG...C9.1D4....A"
2002
+ ".5..E.6.G7...1DC"
2003
+ "...BF..G..2A37.."
2004
+ "5.8.6......D.3.."
2005
+ ".E2D5A......7CF."
2006
+ "..7..9..A51..4.."
2007
+ "9....DC1.4..E..5"
2008
+ ,
2009
+
2010
+ // http://janko.at/Raetsel/Sudoku/586.a.htm
2011
+ // 74
2012
+ "8D...6E...A2...."
2013
+ "E9.6....4..D.537"
2014
+ "..539C.2..7.A4.."
2015
+ "..B2G..5......6D"
2016
+ ".F....G9CB84...."
2017
+ "21.D.F5..7.EB.G6"
2018
+ "983..47.65...A.2"
2019
+ ".7.C6....A..3954"
2020
+ "C698..1....54.7."
2021
+ "F.A...46.82..D9G"
2022
+ "42.5B.C..3G.6.8F"
2023
+ "....5E28F9....A."
2024
+ "7B......G..1C3.."
2025
+ "..F4.5..B.3AG6.."
2026
+ "35E.C..A....7.49"
2027
+ "....D1...FC...25"
2028
+ ,
2029
+
2030
+ // http://janko.at/Raetsel/Sudoku/587.a.htm
2031
+ // 75
2032
+ "6D.5F.B83..7...."
2033
+ ".F.761...854.A.."
2034
+ "39.8.D..B..EF.6."
2035
+ "..E.3.956F...CB1"
2036
+ "F65......GBA...2"
2037
+ "...3.6C7D9...8.B"
2038
+ "..DE..82F.7...5."
2039
+ "B.7.DF....3.619."
2040
+ ".A9B.5....81.F.6"
2041
+ ".3...E.BG5..12.."
2042
+ "C.G...DF7B9.A..."
2043
+ "5...1C6......B84"
2044
+ "7E6...F91A.B.3.."
2045
+ ".5.9A..D..6.B.2E"
2046
+ "..A.BG5...F97.1."
2047
+ "....2..65E.8C.AF"
2048
+ ,
2049
+
2050
+ // http://janko.at/Raetsel/Sudoku/588.a.htm
2051
+ // 76
2052
+ "F.....8.43..BGD6"
2053
+ "6E..G29....C3.7."
2054
+ "2.1..D7.5.E..C.."
2055
+ "89.4...C7.612..."
2056
+ ".1.F..DAEB5...8."
2057
+ "..6AF34...D..E1."
2058
+ "E...B..5..8G.493"
2059
+ "7.892....4.3D..."
2060
+ "...1E.A....F63.C"
2061
+ "D6E.89..G..5...1"
2062
+ ".G3..F...91E78.."
2063
+ ".F...1GB36..E.A."
2064
+ "...87G.6C...4.FA"
2065
+ "..7..8.1.FB..6.2"
2066
+ ".D.GA....134..CE"
2067
+ "C2A6..F3.5.....D"
2068
+ ,
2069
+
2070
+ // http://janko.at/Raetsel/Sudoku/589.a.htm
2071
+ // 77
2072
+ "...439.27..5..G."
2073
+ "5C67...A93...2D."
2074
+ ".3B...1D...2.78."
2075
+ "...2.G7.8EA.3.5F"
2076
+ "E.C.A23....D...7"
2077
+ "...D.B..G7F81..6"
2078
+ ".G.1.68.2A.ECD.."
2079
+ "F8.6.4G......AE5"
2080
+ "643......DB.F.2E"
2081
+ "..586.4C.F2.D.B."
2082
+ "B..F8A2G..3.7..."
2083
+ "7...E....894.C.A"
2084
+ "D7.3.1B4.CE.9..."
2085
+ ".F4.9...B2...6C."
2086
+ ".BG...67D...4E13"
2087
+ ".6..F..31.4AB..."
2088
+ ,
2089
+
2090
+ // http://janko.at/Raetsel/Sudoku/590.a.htm
2091
+ // 78
2092
+ ".1B.....2.59F.6G"
2093
+ "G.2341A...BF...."
2094
+ "C.E8....3..D.24."
2095
+ "F....9E..1...B38"
2096
+ "..1.F45.6.3.2..9"
2097
+ "3..E.8C.5D..1..."
2098
+ "....DB..A8...FE3"
2099
+ ".4.93.1.E..G.8D."
2100
+ ".GF.C..7.5.69.8."
2101
+ "BDC...F1..A8...."
2102
+ "...5..94.21.G..C"
2103
+ "E..1.5.8.FC3.D.."
2104
+ "1B4...8..92....6"
2105
+ ".A8.9..C....45.B"
2106
+ "....12...6853A.F"
2107
+ "5C.27A.B.....91."
2108
+ ,
2109
+
2110
+ // http://janko.at/Raetsel/Sudoku/591.a.htm
2111
+ // 79
2112
+ "A57...8E4......9"
2113
+ ".4C85.6....9.E3B"
2114
+ ".E1...3G657..AC8"
2115
+ "...F.1.9.8EA5.7."
2116
+ ".8.5.7...4F...2."
2117
+ "..9316....BG8..."
2118
+ "..E2A..4.....D97"
2119
+ "F.4....856..G1.3"
2120
+ "6.84..ECB....F.5"
2121
+ "5FA.....C..637.."
2122
+ "...7F4....1528.."
2123
+ ".2...35...8.C.1."
2124
+ ".9.13E2.8.4.A..."
2125
+ "BD2..G4FAC...98."
2126
+ "8G5.C....D.EF3B."
2127
+ "4......57B...2G6"
2128
+ ,
2129
+
2130
+ // http://janko.at/Raetsel/Sudoku/592.a.htm
2131
+ // 80
2132
+ "..8.A.F.B97.1.6."
2133
+ "1B79...6.....8E."
2134
+ "..E3..928...D.5."
2135
+ "26..8.B....17..."
2136
+ "91..6A2..B3..D.."
2137
+ ".F..37.52.GD.4.."
2138
+ "3.679...5.EF...A"
2139
+ "4.B..FC..16...G5"
2140
+ "73...8A..5D..F.1"
2141
+ "5...FC.3...98G.E"
2142
+ "..F.D5.13.A8..B."
2143
+ "..A..B6..2FG..7D"
2144
+ "...6B....E.2..1C"
2145
+ ".4.F...A1D..GE.."
2146
+ ".A2.....G...4638"
2147
+ ".7.G.28F.6.3.A.."
2148
+ ,
2149
+
2150
+ // http://janko.at/Raetsel/Sudoku/593.a.htm
2151
+ // 81
2152
+ ".2ED.4...C...F.."
2153
+ ".8.FE.6.1.....A4"
2154
+ "A..7.8F.29.B...C"
2155
+ "....3GCB...5.87D"
2156
+ "..45DA..B7F3C.6."
2157
+ "....G...4..CA2.5"
2158
+ "2.7.F..CG...34B."
2159
+ ".ED.B54381..G..."
2160
+ "...4..825GBE.3F."
2161
+ ".B5G...63..F.C.1"
2162
+ "1.F27..E...4...."
2163
+ ".D.84FG5..167B.."
2164
+ "3C1.2...DB8G...."
2165
+ "D...6.59.F3.8..2"
2166
+ "4G.....F.A.71.C."
2167
+ "..8...B...9.ED3."
2168
+ ,
2169
+
2170
+ // http://janko.at/Raetsel/Sudoku/594.a.htm
2171
+ // 82
2172
+ "5....E...7B..CF2"
2173
+ "AF.467....3...D."
2174
+ "D.E.C.3....8.7.."
2175
+ "....8..DA6.E..5."
2176
+ "..3B....4.A.EF1."
2177
+ "69..B.D.3.....C7"
2178
+ "1..G...49.C..6.."
2179
+ "...D12G5FE..B..."
2180
+ "...7..93285AF..."
2181
+ "..8..4.76...2..G"
2182
+ "96.....F.3.B..84"
2183
+ ".AB3.G.6....95.."
2184
+ ".1..F.69E..2...."
2185
+ "..9.G....F.3.2.E"
2186
+ ".E...D....95G.BF"
2187
+ "2G7..C5...4....3"
2188
+ ,
2189
+
2190
+ // http://janko.at/Raetsel/Sudoku/595.a.htm
2191
+ // 83
2192
+ ".3.B8..C61...2.."
2193
+ ".E.2...F..4.1A67"
2194
+ "71D...A...C..B.."
2195
+ ".6...92D.B.3..45"
2196
+ "...8A...C.F4...3"
2197
+ ".F9.75E4..B.6..."
2198
+ "5..1...8..6.4F.."
2199
+ "4...C....EA.B.2G"
2200
+ "2D.7.E5....6...1"
2201
+ "..BA.D..9...G..8"
2202
+ "...E.1..G2DF.59."
2203
+ "6...4C.B...73..."
2204
+ "A2..B.C.46E...7."
2205
+ "..1..2...9...8AD"
2206
+ "DC75.A..3...E.B."
2207
+ "..8...GEA..C2.5."
2208
+ ,
2209
+
2210
+ // http://janko.at/Raetsel/Sudoku/596.a.htm
2211
+ // 84
2212
+ "B62...9...1...G7"
2213
+ "C.....7.6..A.1.9"
2214
+ ".1....A8..7.2..3"
2215
+ "..A831.CG2..E..."
2216
+ ".8..92.A..GD4..."
2217
+ "G.C.D8..F.529..."
2218
+ "...4.........D6A"
2219
+ ".5.B.C.17..3G8.."
2220
+ "..E12..9D.B.6.8."
2221
+ "9C7.........5..."
2222
+ "...A54.7..2C.F.G"
2223
+ "...FCD..4.A5..9."
2224
+ "...9..1E2.F83C.."
2225
+ "1..7.9..A3....D."
2226
+ "2.3.8..B.5.....6"
2227
+ "EB...3...7...G12"
2228
+ ,
2229
+
2230
+ // http://janko.at/Raetsel/Sudoku/597.a.htm
2231
+ // 85
2232
+ "..6..1..4..F3.A."
2233
+ "7E..6G.3....FC.."
2234
+ "BC3..FD.6.9.G..2"
2235
+ ".....4E.CG3.B..."
2236
+ "1.E..C.....2.A.."
2237
+ "...AE6...4F..9.3"
2238
+ ".8.2..3F.C.1...."
2239
+ "34..8...B57..EC."
2240
+ ".B9..3CD...8..E5"
2241
+ "....9.F.GA..4.1."
2242
+ "A.4..E2...6BC..."
2243
+ "..8.A.....E..7.B"
2244
+ "...C.2A6.EB....."
2245
+ "E..8.9.5.3C..62G"
2246
+ "..B9....2.GD..5C"
2247
+ ".3.5C..E..1..4.."
2248
+ ,
2249
+
2250
+ // http://janko.at/Raetsel/Sudoku/598.a.htm
2251
+ // 86
2252
+ ".FA..5...B7..E.6"
2253
+ "18....4B...C..G."
2254
+ "..G.7..CF....8.5"
2255
+ ".B9CG8.........."
2256
+ ".D..A.G..85....E"
2257
+ "69..3...1...C5.."
2258
+ "7.4B....G.A.2..F"
2259
+ "..8.5B6D..27...."
2260
+ "....8G..EC61.D.."
2261
+ "3..6.C.7....91.8"
2262
+ "..DF...5...9..73"
2263
+ "8....6B..2.5..E."
2264
+ "..........14EFD."
2265
+ "9.6....AD..F.7.."
2266
+ ".E..6...29....1C"
2267
+ "G.2..EF...C..4B."
2268
+ ,
2269
+
2270
+ // http://janko.at/Raetsel/Sudoku/599.a.htm
2271
+ // 87
2272
+ ".3..6GF..C8....."
2273
+ "G..9.B.8...5.A74"
2274
+ "7..8.2..B..D...."
2275
+ ".EA.....3.6..9B."
2276
+ "..F.2....3AG...."
2277
+ "E7...........39G"
2278
+ ".9.A..31E6..FC.."
2279
+ "4.3..D.9C.B....E"
2280
+ "6....8.4A.2..G.C"
2281
+ "..G3..CFD9..4.A."
2282
+ "A85...........FB"
2283
+ "....5A7....6.2.."
2284
+ ".24..7.D.....16."
2285
+ "....1..3..C.2..8"
2286
+ "1A7.C...6.3.E..9"
2287
+ ".....6E..1F2..3."
2288
+ ,
2289
+
2290
+ // http://janko.at/Raetsel/Sudoku/600.a.htm
2291
+ // 88
2292
+ "....47.....9B.1."
2293
+ "..5..9F2.6....43"
2294
+ "B..3.....E24..9."
2295
+ "..9.....A57..2.."
2296
+ ".DA4E..7...C.F.."
2297
+ ".1.6..4.E....8.B"
2298
+ "....81BF..4.5..7"
2299
+ "...F9A....D..E.4"
2300
+ "5.2..3....A71..."
2301
+ "6..C.B..G9FE...."
2302
+ "7.8....9.D..C.3."
2303
+ "..G.6...1..3E45."
2304
+ "..F..E8D.....A.."
2305
+ ".2..741.....3..8"
2306
+ "D6....5.92B..1.."
2307
+ ".A.EB.....C6...."
2308
+ };
2309
+
2310
+ /// The number of instances
2311
+ const unsigned int n_examples = sizeof(examples)/sizeof(char*);
2312
+
2313
+ /// The size of an instance
2314
+ int example_size(const char *s) {
2315
+ int l = std::strlen(s);
2316
+ int res = static_cast<int>(std::sqrt(std::sqrt(static_cast<float>(l))));
2317
+ assert(res*res*res*res == l);
2318
+ return res;
2319
+ }
2320
+
2321
+ /// Return value at position (\a i,\a j) in the example \a s of size \a n
2322
+ int sudokuField(const char *s, int n, int i, int j) {
2323
+ assert(example_size(s) == std::sqrt(static_cast<float>(n)));
2324
+ assert(i >= 0 && i < n);
2325
+ assert(j >= 0 && j < n);
2326
+ char c = s[j*n + i];
2327
+ if (!std::isalnum(c))
2328
+ return 0;
2329
+ if (std::isdigit(c))
2330
+ return c - '0';
2331
+ if (std::islower(c))
2332
+ c = static_cast<char>(std::toupper(c));
2333
+ // std::alpha(c) == true && std::isupper(c)
2334
+ int res = (c - 'A') + 10;
2335
+ if (res > n) return 0;
2336
+ else return res;
2337
+ }
2338
+ //@}
2339
+ }
2340
+
2341
+ // STATISTICS: example-any