gecoder-with-gecode 0.7.1
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES +81 -0
- data/COPYING +17 -0
- data/LGPL-LICENSE +458 -0
- data/README +45 -0
- data/Rakefile +13 -0
- data/example/example_helper.rb +1 -0
- data/example/magic_sequence.rb +43 -0
- data/example/queens.rb +43 -0
- data/example/raw_bindings.rb +42 -0
- data/example/send_more_money.rb +43 -0
- data/example/send_most_money.rb +58 -0
- data/example/square_tiling.rb +84 -0
- data/example/sudoku-set.rb +110 -0
- data/example/sudoku.rb +61 -0
- data/ext/extconf.rb +29 -0
- data/ext/gecode-1.3.1/LICENSE +34 -0
- data/ext/gecode-1.3.1/Makefile.contribs +71 -0
- data/ext/gecode-1.3.1/Makefile.dep +3928 -0
- data/ext/gecode-1.3.1/Makefile.in +966 -0
- data/ext/gecode-1.3.1/changelog.in +1065 -0
- data/ext/gecode-1.3.1/configure +8590 -0
- data/ext/gecode-1.3.1/configure.ac +179 -0
- data/ext/gecode-1.3.1/configure.ac.in +175 -0
- data/ext/gecode-1.3.1/contribs/README +26 -0
- data/ext/gecode-1.3.1/contribs/graph/INSTALL +53 -0
- data/ext/gecode-1.3.1/contribs/graph/LICENSE +11 -0
- data/ext/gecode-1.3.1/contribs/graph/Makefile +167 -0
- data/ext/gecode-1.3.1/contribs/graph/Makefile.in.in +169 -0
- data/ext/gecode-1.3.1/contribs/graph/TODO +28 -0
- data/ext/gecode-1.3.1/contribs/graph/binarysimple.hh +82 -0
- data/ext/gecode-1.3.1/contribs/graph/binarysimple.icc +186 -0
- data/ext/gecode-1.3.1/contribs/graph/branch/branch.icc +257 -0
- data/ext/gecode-1.3.1/contribs/graph/configure +2160 -0
- data/ext/gecode-1.3.1/contribs/graph/configure.ac +33 -0
- data/ext/gecode-1.3.1/contribs/graph/doxygen.conf +1226 -0
- data/ext/gecode-1.3.1/contribs/graph/doxygen.hh +132 -0
- data/ext/gecode-1.3.1/contribs/graph/examples/cpgraph-basic.cc +94 -0
- data/ext/gecode-1.3.1/contribs/graph/examples/cpgraph-complement.cc +104 -0
- data/ext/gecode-1.3.1/contribs/graph/examples/cpgraph-instUB.cc +105 -0
- data/ext/gecode-1.3.1/contribs/graph/examples/cpgraph-path.cc +92 -0
- data/ext/gecode-1.3.1/contribs/graph/examples/cpgraph-path2.cc +273 -0
- data/ext/gecode-1.3.1/contribs/graph/examples/cpgraph-pathcost.cc +311 -0
- data/ext/gecode-1.3.1/contribs/graph/examples/g1.txt +1 -0
- data/ext/gecode-1.3.1/contribs/graph/examples/g2.txt +1 -0
- data/ext/gecode-1.3.1/contribs/graph/graph.hh +51 -0
- data/ext/gecode-1.3.1/contribs/graph/graphutils.h +46 -0
- data/ext/gecode-1.3.1/contribs/graph/graphutils.icc +140 -0
- data/ext/gecode-1.3.1/contribs/graph/misc/doxygen/footer.html +1 -0
- data/ext/gecode-1.3.1/contribs/graph/path.hh +116 -0
- data/ext/gecode-1.3.1/contribs/graph/path.icc +64 -0
- data/ext/gecode-1.3.1/contribs/graph/path/path.icc +139 -0
- data/ext/gecode-1.3.1/contribs/graph/path/pathdegree.icc +133 -0
- data/ext/gecode-1.3.1/contribs/graph/path/pathgraphs.icc +341 -0
- data/ext/gecode-1.3.1/contribs/graph/shortdesc.ac +1 -0
- data/ext/gecode-1.3.1/contribs/graph/stlutility.icc +105 -0
- data/ext/gecode-1.3.1/contribs/graph/var.icc +106 -0
- data/ext/gecode-1.3.1/contribs/graph/view.icc +373 -0
- data/ext/gecode-1.3.1/contribs/graph/view/arcnode.cc +162 -0
- data/ext/gecode-1.3.1/contribs/graph/view/arcnode.hh +78 -0
- data/ext/gecode-1.3.1/contribs/graph/view/boundsgraphs.icc +349 -0
- data/ext/gecode-1.3.1/contribs/graph/view/constant.icc +148 -0
- data/ext/gecode-1.3.1/contribs/graph/view/iter.icc +337 -0
- data/ext/gecode-1.3.1/contribs/graph/view/nodearcsets.icc +493 -0
- data/ext/gecode-1.3.1/contribs/graph/view/nodeset.icc +60 -0
- data/ext/gecode-1.3.1/contribs/graph/view/outadjsets.icc +600 -0
- data/ext/gecode-1.3.1/contribs/graph/view/prop.icc +135 -0
- data/ext/gecode-1.3.1/contribs/map/COMPILING +68 -0
- data/ext/gecode-1.3.1/contribs/map/LICENSE +11 -0
- data/ext/gecode-1.3.1/contribs/map/Makefile.in.in +173 -0
- data/ext/gecode-1.3.1/contribs/map/configure +2285 -0
- data/ext/gecode-1.3.1/contribs/map/configure.ac +32 -0
- data/ext/gecode-1.3.1/contribs/map/constraints.hh +46 -0
- data/ext/gecode-1.3.1/contribs/map/constraints.icc +84 -0
- data/ext/gecode-1.3.1/contribs/map/doxygen.conf +1229 -0
- data/ext/gecode-1.3.1/contribs/map/doxygen.hh +33 -0
- data/ext/gecode-1.3.1/contribs/map/examples/approximateMatching.cc +199 -0
- data/ext/gecode-1.3.1/contribs/map/examples/g1.txt +1 -0
- data/ext/gecode-1.3.1/contribs/map/examples/g2.txt +1 -0
- data/ext/gecode-1.3.1/contribs/map/examples/graph-examples.tgz +0 -0
- data/ext/gecode-1.3.1/contribs/map/examples/isomorphism.cc +148 -0
- data/ext/gecode-1.3.1/contribs/map/examples/map +0 -0
- data/ext/gecode-1.3.1/contribs/map/examples/map.cc +80 -0
- data/ext/gecode-1.3.1/contribs/map/examples/subgraphmonomorphism.cc +155 -0
- data/ext/gecode-1.3.1/contribs/map/map.hh +65 -0
- data/ext/gecode-1.3.1/contribs/map/matching/mono.hh +235 -0
- data/ext/gecode-1.3.1/contribs/map/matching/mono.icc +771 -0
- data/ext/gecode-1.3.1/contribs/map/shortdesc.ac +2 -0
- data/ext/gecode-1.3.1/contribs/map/var.icc +346 -0
- data/ext/gecode-1.3.1/contribs/map/var/imp.cc +42 -0
- data/ext/gecode-1.3.1/contribs/map/var/imp.icc +436 -0
- data/ext/gecode-1.3.1/doxygen.conf.in +1225 -0
- data/ext/gecode-1.3.1/doxygen.hh.in +877 -0
- data/ext/gecode-1.3.1/examples/all-interval-sort.cc +201 -0
- data/ext/gecode-1.3.1/examples/all-interval.cc +114 -0
- data/ext/gecode-1.3.1/examples/alpha.cc +112 -0
- data/ext/gecode-1.3.1/examples/baseline.cc +71 -0
- data/ext/gecode-1.3.1/examples/bibd.cc +173 -0
- data/ext/gecode-1.3.1/examples/black-hole.cc +281 -0
- data/ext/gecode-1.3.1/examples/cars.cc +165 -0
- data/ext/gecode-1.3.1/examples/crew.cc +220 -0
- data/ext/gecode-1.3.1/examples/crowded-chess.cc +312 -0
- data/ext/gecode-1.3.1/examples/donald.cc +93 -0
- data/ext/gecode-1.3.1/examples/eq20.cc +111 -0
- data/ext/gecode-1.3.1/examples/golf.cc +242 -0
- data/ext/gecode-1.3.1/examples/golomb.cc +141 -0
- data/ext/gecode-1.3.1/examples/graph-color.cc +371 -0
- data/ext/gecode-1.3.1/examples/grocery.cc +107 -0
- data/ext/gecode-1.3.1/examples/hamming.cc +107 -0
- data/ext/gecode-1.3.1/examples/ind-set.cc +130 -0
- data/ext/gecode-1.3.1/examples/knights.cc +146 -0
- data/ext/gecode-1.3.1/examples/langfordnum.cc +244 -0
- data/ext/gecode-1.3.1/examples/magic-sequence-gcc.cc +93 -0
- data/ext/gecode-1.3.1/examples/magic-sequence.cc +108 -0
- data/ext/gecode-1.3.1/examples/magic-square.cc +120 -0
- data/ext/gecode-1.3.1/examples/money.cc +92 -0
- data/ext/gecode-1.3.1/examples/ortho-latin.cc +156 -0
- data/ext/gecode-1.3.1/examples/packing.cc +211 -0
- data/ext/gecode-1.3.1/examples/partition.cc +126 -0
- data/ext/gecode-1.3.1/examples/photo.cc +155 -0
- data/ext/gecode-1.3.1/examples/picture-puzzle.cc +481 -0
- data/ext/gecode-1.3.1/examples/queen-armies.cc +240 -0
- data/ext/gecode-1.3.1/examples/queens.cc +99 -0
- data/ext/gecode-1.3.1/examples/sports-league.cc +454 -0
- data/ext/gecode-1.3.1/examples/steiner.cc +148 -0
- data/ext/gecode-1.3.1/examples/stress-domain.cc +86 -0
- data/ext/gecode-1.3.1/examples/stress-element.cc +95 -0
- data/ext/gecode-1.3.1/examples/stress-exec.cc +74 -0
- data/ext/gecode-1.3.1/examples/stress-min.cc +84 -0
- data/ext/gecode-1.3.1/examples/stress-search.cc +72 -0
- data/ext/gecode-1.3.1/examples/sudoku-mixed.cc +282 -0
- data/ext/gecode-1.3.1/examples/sudoku-set.cc +162 -0
- data/ext/gecode-1.3.1/examples/sudoku.cc +188 -0
- data/ext/gecode-1.3.1/examples/sudoku.icc +703 -0
- data/ext/gecode-1.3.1/examples/support.cc +160 -0
- data/ext/gecode-1.3.1/examples/support.hh +98 -0
- data/ext/gecode-1.3.1/examples/support.icc +187 -0
- data/ext/gecode-1.3.1/examples/timer.cc +47 -0
- data/ext/gecode-1.3.1/examples/timer.hh +72 -0
- data/ext/gecode-1.3.1/examples/warehouses.cc +176 -0
- data/ext/gecode-1.3.1/extconf.rb +8 -0
- data/ext/gecode-1.3.1/gecode.m4 +736 -0
- data/ext/gecode-1.3.1/gecode/config.icc.in +50 -0
- data/ext/gecode-1.3.1/gecode/int.hh +1426 -0
- data/ext/gecode-1.3.1/gecode/int/arithmetic.cc +87 -0
- data/ext/gecode-1.3.1/gecode/int/arithmetic.hh +292 -0
- data/ext/gecode-1.3.1/gecode/int/arithmetic/abs.icc +213 -0
- data/ext/gecode-1.3.1/gecode/int/arithmetic/max.icc +196 -0
- data/ext/gecode-1.3.1/gecode/int/arithmetic/mult.icc +478 -0
- data/ext/gecode-1.3.1/gecode/int/array.cc +61 -0
- data/ext/gecode-1.3.1/gecode/int/array.icc +264 -0
- data/ext/gecode-1.3.1/gecode/int/bool.cc +187 -0
- data/ext/gecode-1.3.1/gecode/int/bool.hh +255 -0
- data/ext/gecode-1.3.1/gecode/int/bool/base.icc +123 -0
- data/ext/gecode-1.3.1/gecode/int/bool/eq.icc +89 -0
- data/ext/gecode-1.3.1/gecode/int/bool/eqv.icc +132 -0
- data/ext/gecode-1.3.1/gecode/int/bool/or.icc +380 -0
- data/ext/gecode-1.3.1/gecode/int/branch.cc +81 -0
- data/ext/gecode-1.3.1/gecode/int/branch.hh +444 -0
- data/ext/gecode-1.3.1/gecode/int/branch/assign.cc +83 -0
- data/ext/gecode-1.3.1/gecode/int/branch/assign.icc +76 -0
- data/ext/gecode-1.3.1/gecode/int/branch/select-val.icc +104 -0
- data/ext/gecode-1.3.1/gecode/int/branch/select-view.icc +219 -0
- data/ext/gecode-1.3.1/gecode/int/channel.cc +62 -0
- data/ext/gecode-1.3.1/gecode/int/channel.hh +144 -0
- data/ext/gecode-1.3.1/gecode/int/channel/base.icc +60 -0
- data/ext/gecode-1.3.1/gecode/int/channel/dom.icc +313 -0
- data/ext/gecode-1.3.1/gecode/int/channel/stack.icc +59 -0
- data/ext/gecode-1.3.1/gecode/int/channel/val.icc +239 -0
- data/ext/gecode-1.3.1/gecode/int/count.cc +174 -0
- data/ext/gecode-1.3.1/gecode/int/count.hh +401 -0
- data/ext/gecode-1.3.1/gecode/int/count/int.icc +495 -0
- data/ext/gecode-1.3.1/gecode/int/count/rel.icc +100 -0
- data/ext/gecode-1.3.1/gecode/int/count/view.icc +332 -0
- data/ext/gecode-1.3.1/gecode/int/cumulatives.cc +210 -0
- data/ext/gecode-1.3.1/gecode/int/cumulatives.hh +118 -0
- data/ext/gecode-1.3.1/gecode/int/cumulatives/val.icc +377 -0
- data/ext/gecode-1.3.1/gecode/int/distinct.cc +77 -0
- data/ext/gecode-1.3.1/gecode/int/distinct.hh +272 -0
- data/ext/gecode-1.3.1/gecode/int/distinct/bilink.icc +73 -0
- data/ext/gecode-1.3.1/gecode/int/distinct/bnd.icc +335 -0
- data/ext/gecode-1.3.1/gecode/int/distinct/combptr.icc +62 -0
- data/ext/gecode-1.3.1/gecode/int/distinct/dom.icc +740 -0
- data/ext/gecode-1.3.1/gecode/int/distinct/edge.icc +96 -0
- data/ext/gecode-1.3.1/gecode/int/distinct/node.icc +107 -0
- data/ext/gecode-1.3.1/gecode/int/distinct/ter-dom.icc +97 -0
- data/ext/gecode-1.3.1/gecode/int/distinct/val.icc +171 -0
- data/ext/gecode-1.3.1/gecode/int/dom.cc +81 -0
- data/ext/gecode-1.3.1/gecode/int/dom.hh +101 -0
- data/ext/gecode-1.3.1/gecode/int/dom/range.icc +85 -0
- data/ext/gecode-1.3.1/gecode/int/dom/spec.icc +85 -0
- data/ext/gecode-1.3.1/gecode/int/element.cc +58 -0
- data/ext/gecode-1.3.1/gecode/int/element.hh +203 -0
- data/ext/gecode-1.3.1/gecode/int/element/int.icc +396 -0
- data/ext/gecode-1.3.1/gecode/int/element/view.icc +443 -0
- data/ext/gecode-1.3.1/gecode/int/exception.icc +137 -0
- data/ext/gecode-1.3.1/gecode/int/gcc.cc +708 -0
- data/ext/gecode-1.3.1/gecode/int/gcc.hh +338 -0
- data/ext/gecode-1.3.1/gecode/int/gcc/bnd.icc +629 -0
- data/ext/gecode-1.3.1/gecode/int/gcc/dom.icc +504 -0
- data/ext/gecode-1.3.1/gecode/int/gcc/gccbndsup.icc +760 -0
- data/ext/gecode-1.3.1/gecode/int/gcc/graphsup.icc +2375 -0
- data/ext/gecode-1.3.1/gecode/int/gcc/lbc.icc +375 -0
- data/ext/gecode-1.3.1/gecode/int/gcc/occur.icc +687 -0
- data/ext/gecode-1.3.1/gecode/int/gcc/ubc.icc +236 -0
- data/ext/gecode-1.3.1/gecode/int/gcc/val.icc +373 -0
- data/ext/gecode-1.3.1/gecode/int/int-set.cc +115 -0
- data/ext/gecode-1.3.1/gecode/int/int-set.icc +151 -0
- data/ext/gecode-1.3.1/gecode/int/linear.cc +247 -0
- data/ext/gecode-1.3.1/gecode/int/linear.hh +1056 -0
- data/ext/gecode-1.3.1/gecode/int/linear/binary.icc +439 -0
- data/ext/gecode-1.3.1/gecode/int/linear/bool-int.icc +422 -0
- data/ext/gecode-1.3.1/gecode/int/linear/bool-view.icc +311 -0
- data/ext/gecode-1.3.1/gecode/int/linear/dom.icc +503 -0
- data/ext/gecode-1.3.1/gecode/int/linear/nary.icc +857 -0
- data/ext/gecode-1.3.1/gecode/int/linear/noview.icc +264 -0
- data/ext/gecode-1.3.1/gecode/int/linear/post.cc +542 -0
- data/ext/gecode-1.3.1/gecode/int/linear/ternary.icc +255 -0
- data/ext/gecode-1.3.1/gecode/int/propagator.icc +194 -0
- data/ext/gecode-1.3.1/gecode/int/regular.cc +40 -0
- data/ext/gecode-1.3.1/gecode/int/regular.hh +83 -0
- data/ext/gecode-1.3.1/gecode/int/regular/dfa.cc +466 -0
- data/ext/gecode-1.3.1/gecode/int/regular/dfa.icc +172 -0
- data/ext/gecode-1.3.1/gecode/int/regular/dom.icc +480 -0
- data/ext/gecode-1.3.1/gecode/int/regular/reg.cc +738 -0
- data/ext/gecode-1.3.1/gecode/int/rel.cc +293 -0
- data/ext/gecode-1.3.1/gecode/int/rel.hh +526 -0
- data/ext/gecode-1.3.1/gecode/int/rel/eq.icc +640 -0
- data/ext/gecode-1.3.1/gecode/int/rel/lex.icc +212 -0
- data/ext/gecode-1.3.1/gecode/int/rel/lq-le.icc +246 -0
- data/ext/gecode-1.3.1/gecode/int/rel/nq.icc +188 -0
- data/ext/gecode-1.3.1/gecode/int/sortedness.cc +124 -0
- data/ext/gecode-1.3.1/gecode/int/sortedness.hh +108 -0
- data/ext/gecode-1.3.1/gecode/int/sortedness/matching.icc +177 -0
- data/ext/gecode-1.3.1/gecode/int/sortedness/narrowing.icc +243 -0
- data/ext/gecode-1.3.1/gecode/int/sortedness/order.icc +232 -0
- data/ext/gecode-1.3.1/gecode/int/sortedness/sortedness.icc +727 -0
- data/ext/gecode-1.3.1/gecode/int/sortedness/sortsup.icc +666 -0
- data/ext/gecode-1.3.1/gecode/int/var-imp.vis +198 -0
- data/ext/gecode-1.3.1/gecode/int/var.icc +590 -0
- data/ext/gecode-1.3.1/gecode/int/var/bool.icc +52 -0
- data/ext/gecode-1.3.1/gecode/int/var/imp-body.icc +65 -0
- data/ext/gecode-1.3.1/gecode/int/var/imp-hdr.icc +191 -0
- data/ext/gecode-1.3.1/gecode/int/var/imp.cc +361 -0
- data/ext/gecode-1.3.1/gecode/int/var/imp.icc +579 -0
- data/ext/gecode-1.3.1/gecode/int/var/int.cc +63 -0
- data/ext/gecode-1.3.1/gecode/int/var/int.icc +135 -0
- data/ext/gecode-1.3.1/gecode/int/view.icc +1219 -0
- data/ext/gecode-1.3.1/gecode/int/view/bool.icc +270 -0
- data/ext/gecode-1.3.1/gecode/int/view/constint.icc +306 -0
- data/ext/gecode-1.3.1/gecode/int/view/int.icc +221 -0
- data/ext/gecode-1.3.1/gecode/int/view/iter.icc +49 -0
- data/ext/gecode-1.3.1/gecode/int/view/minus.icc +285 -0
- data/ext/gecode-1.3.1/gecode/int/view/offset.icc +274 -0
- data/ext/gecode-1.3.1/gecode/int/view/print.cc +109 -0
- data/ext/gecode-1.3.1/gecode/int/view/rtest.icc +215 -0
- data/ext/gecode-1.3.1/gecode/int/view/scale.icc +373 -0
- data/ext/gecode-1.3.1/gecode/iter.hh +65 -0
- data/ext/gecode-1.3.1/gecode/iter/ranges-add.icc +130 -0
- data/ext/gecode-1.3.1/gecode/iter/ranges-append.icc +208 -0
- data/ext/gecode-1.3.1/gecode/iter/ranges-array.icc +123 -0
- data/ext/gecode-1.3.1/gecode/iter/ranges-cache.icc +143 -0
- data/ext/gecode-1.3.1/gecode/iter/ranges-compl.icc +206 -0
- data/ext/gecode-1.3.1/gecode/iter/ranges-diff.icc +127 -0
- data/ext/gecode-1.3.1/gecode/iter/ranges-empty.icc +96 -0
- data/ext/gecode-1.3.1/gecode/iter/ranges-inter.icc +202 -0
- data/ext/gecode-1.3.1/gecode/iter/ranges-minmax.icc +103 -0
- data/ext/gecode-1.3.1/gecode/iter/ranges-minus.icc +138 -0
- data/ext/gecode-1.3.1/gecode/iter/ranges-offset.icc +112 -0
- data/ext/gecode-1.3.1/gecode/iter/ranges-operations.icc +142 -0
- data/ext/gecode-1.3.1/gecode/iter/ranges-scale.icc +224 -0
- data/ext/gecode-1.3.1/gecode/iter/ranges-singleton.icc +71 -0
- data/ext/gecode-1.3.1/gecode/iter/ranges-size.icc +131 -0
- data/ext/gecode-1.3.1/gecode/iter/ranges-union.icc +211 -0
- data/ext/gecode-1.3.1/gecode/iter/ranges-values.icc +125 -0
- data/ext/gecode-1.3.1/gecode/iter/values-ranges.icc +91 -0
- data/ext/gecode-1.3.1/gecode/iter/virtual-ranges-compl.icc +247 -0
- data/ext/gecode-1.3.1/gecode/iter/virtual-ranges-inter.icc +227 -0
- data/ext/gecode-1.3.1/gecode/iter/virtual-ranges-union.icc +236 -0
- data/ext/gecode-1.3.1/gecode/iter/virtual-ranges.icc +126 -0
- data/ext/gecode-1.3.1/gecode/kernel.hh +141 -0
- data/ext/gecode-1.3.1/gecode/kernel/array.icc +954 -0
- data/ext/gecode-1.3.1/gecode/kernel/branching.icc +233 -0
- data/ext/gecode-1.3.1/gecode/kernel/core.cc +417 -0
- data/ext/gecode-1.3.1/gecode/kernel/core.icc +1681 -0
- data/ext/gecode-1.3.1/gecode/kernel/exception.cc +49 -0
- data/ext/gecode-1.3.1/gecode/kernel/exception.icc +104 -0
- data/ext/gecode-1.3.1/gecode/kernel/macros.icc +98 -0
- data/ext/gecode-1.3.1/gecode/kernel/memory-manager.cc +41 -0
- data/ext/gecode-1.3.1/gecode/kernel/memory-manager.icc +438 -0
- data/ext/gecode-1.3.1/gecode/kernel/memory.icc +205 -0
- data/ext/gecode-1.3.1/gecode/kernel/modevent.icc +53 -0
- data/ext/gecode-1.3.1/gecode/kernel/propagator.icc +680 -0
- data/ext/gecode-1.3.1/gecode/kernel/view.icc +583 -0
- data/ext/gecode-1.3.1/gecode/limits.hh +87 -0
- data/ext/gecode-1.3.1/gecode/minimodel.hh +942 -0
- data/ext/gecode-1.3.1/gecode/minimodel/arithmetic.cc +137 -0
- data/ext/gecode-1.3.1/gecode/minimodel/bool-expr.cc +207 -0
- data/ext/gecode-1.3.1/gecode/minimodel/bool-expr.icc +191 -0
- data/ext/gecode-1.3.1/gecode/minimodel/bool-rel.icc +66 -0
- data/ext/gecode-1.3.1/gecode/minimodel/exception.icc +59 -0
- data/ext/gecode-1.3.1/gecode/minimodel/lin-expr.cc +103 -0
- data/ext/gecode-1.3.1/gecode/minimodel/lin-expr.icc +192 -0
- data/ext/gecode-1.3.1/gecode/minimodel/lin-rel.icc +200 -0
- data/ext/gecode-1.3.1/gecode/minimodel/matrix.icc +118 -0
- data/ext/gecode-1.3.1/gecode/minimodel/scheduling.cc +241 -0
- data/ext/gecode-1.3.1/gecode/search.hh +745 -0
- data/ext/gecode-1.3.1/gecode/search/bab.cc +153 -0
- data/ext/gecode-1.3.1/gecode/search/bab.icc +101 -0
- data/ext/gecode-1.3.1/gecode/search/dfs.cc +63 -0
- data/ext/gecode-1.3.1/gecode/search/dfs.icc +144 -0
- data/ext/gecode-1.3.1/gecode/search/engine-ctrl.icc +109 -0
- data/ext/gecode-1.3.1/gecode/search/lds.cc +237 -0
- data/ext/gecode-1.3.1/gecode/search/lds.icc +57 -0
- data/ext/gecode-1.3.1/gecode/search/reco-stack.icc +219 -0
- data/ext/gecode-1.3.1/gecode/search/restart.icc +76 -0
- data/ext/gecode-1.3.1/gecode/search/statistics.icc +30 -0
- data/ext/gecode-1.3.1/gecode/search/stop.cc +58 -0
- data/ext/gecode-1.3.1/gecode/search/stop.icc +100 -0
- data/ext/gecode-1.3.1/gecode/set.hh +419 -0
- data/ext/gecode-1.3.1/gecode/set/array.cc +114 -0
- data/ext/gecode-1.3.1/gecode/set/array.icc +134 -0
- data/ext/gecode-1.3.1/gecode/set/branch.cc +57 -0
- data/ext/gecode-1.3.1/gecode/set/branch.hh +176 -0
- data/ext/gecode-1.3.1/gecode/set/branch/select-val.icc +72 -0
- data/ext/gecode-1.3.1/gecode/set/branch/select-view.icc +112 -0
- data/ext/gecode-1.3.1/gecode/set/cardinality.cc +49 -0
- data/ext/gecode-1.3.1/gecode/set/convex.cc +43 -0
- data/ext/gecode-1.3.1/gecode/set/convex.hh +92 -0
- data/ext/gecode-1.3.1/gecode/set/convex/conv.cc +81 -0
- data/ext/gecode-1.3.1/gecode/set/convex/conv.icc +51 -0
- data/ext/gecode-1.3.1/gecode/set/convex/hull.cc +100 -0
- data/ext/gecode-1.3.1/gecode/set/convex/hull.icc +52 -0
- data/ext/gecode-1.3.1/gecode/set/distinct.cc +48 -0
- data/ext/gecode-1.3.1/gecode/set/distinct.hh +97 -0
- data/ext/gecode-1.3.1/gecode/set/distinct/atmostOne.cc +151 -0
- data/ext/gecode-1.3.1/gecode/set/distinct/atmostOne.icc +50 -0
- data/ext/gecode-1.3.1/gecode/set/distinct/binomial.cc +46 -0
- data/ext/gecode-1.3.1/gecode/set/distinct/binomial.icc +157 -0
- data/ext/gecode-1.3.1/gecode/set/distinct/distinct.cc +124 -0
- data/ext/gecode-1.3.1/gecode/set/distinct/distinct.icc +58 -0
- data/ext/gecode-1.3.1/gecode/set/dom.cc +224 -0
- data/ext/gecode-1.3.1/gecode/set/exception.icc +132 -0
- data/ext/gecode-1.3.1/gecode/set/int.cc +139 -0
- data/ext/gecode-1.3.1/gecode/set/int.hh +226 -0
- data/ext/gecode-1.3.1/gecode/set/int/card.cc +61 -0
- data/ext/gecode-1.3.1/gecode/set/int/card.icc +54 -0
- data/ext/gecode-1.3.1/gecode/set/int/channel.cc +100 -0
- data/ext/gecode-1.3.1/gecode/set/int/channel.icc +75 -0
- data/ext/gecode-1.3.1/gecode/set/int/match.cc +148 -0
- data/ext/gecode-1.3.1/gecode/set/int/match.icc +67 -0
- data/ext/gecode-1.3.1/gecode/set/int/minmax.cc +109 -0
- data/ext/gecode-1.3.1/gecode/set/int/minmax.icc +63 -0
- data/ext/gecode-1.3.1/gecode/set/int/weights.cc +182 -0
- data/ext/gecode-1.3.1/gecode/set/int/weights.icc +174 -0
- data/ext/gecode-1.3.1/gecode/set/projectors-compiler.hh +148 -0
- data/ext/gecode-1.3.1/gecode/set/projectors.cc +109 -0
- data/ext/gecode-1.3.1/gecode/set/projectors.hh +319 -0
- data/ext/gecode-1.3.1/gecode/set/projectors/compiler.cc +841 -0
- data/ext/gecode-1.3.1/gecode/set/projectors/projector-set.cc +69 -0
- data/ext/gecode-1.3.1/gecode/set/projectors/projector-set.icc +66 -0
- data/ext/gecode-1.3.1/gecode/set/projectors/projector.cc +125 -0
- data/ext/gecode-1.3.1/gecode/set/projectors/projector.icc +79 -0
- data/ext/gecode-1.3.1/gecode/set/projectors/propagator.hh +127 -0
- data/ext/gecode-1.3.1/gecode/set/projectors/propagator/card.icc +96 -0
- data/ext/gecode-1.3.1/gecode/set/projectors/propagator/nary.icc +106 -0
- data/ext/gecode-1.3.1/gecode/set/projectors/propagator/re-nary.cc +76 -0
- data/ext/gecode-1.3.1/gecode/set/projectors/propagator/re-nary.icc +53 -0
- data/ext/gecode-1.3.1/gecode/set/projectors/set-expr.cc +306 -0
- data/ext/gecode-1.3.1/gecode/set/projectors/set-expr.icc +192 -0
- data/ext/gecode-1.3.1/gecode/set/propagator.icc +96 -0
- data/ext/gecode-1.3.1/gecode/set/rel-op-const.cc +233 -0
- data/ext/gecode-1.3.1/gecode/set/rel-op.cc +96 -0
- data/ext/gecode-1.3.1/gecode/set/rel-op.hh +267 -0
- data/ext/gecode-1.3.1/gecode/set/rel-op/common.icc +528 -0
- data/ext/gecode-1.3.1/gecode/set/rel-op/inter.icc +312 -0
- data/ext/gecode-1.3.1/gecode/set/rel-op/partition.icc +131 -0
- data/ext/gecode-1.3.1/gecode/set/rel-op/post.icc +198 -0
- data/ext/gecode-1.3.1/gecode/set/rel-op/subofunion.icc +150 -0
- data/ext/gecode-1.3.1/gecode/set/rel-op/superofinter.icc +151 -0
- data/ext/gecode-1.3.1/gecode/set/rel-op/union.icc +292 -0
- data/ext/gecode-1.3.1/gecode/set/rel.cc +201 -0
- data/ext/gecode-1.3.1/gecode/set/rel.hh +250 -0
- data/ext/gecode-1.3.1/gecode/set/rel/common.icc +109 -0
- data/ext/gecode-1.3.1/gecode/set/rel/eq.icc +101 -0
- data/ext/gecode-1.3.1/gecode/set/rel/nosubset.icc +88 -0
- data/ext/gecode-1.3.1/gecode/set/rel/nq.icc +132 -0
- data/ext/gecode-1.3.1/gecode/set/rel/re-eq.icc +142 -0
- data/ext/gecode-1.3.1/gecode/set/rel/re-subset.icc +121 -0
- data/ext/gecode-1.3.1/gecode/set/rel/subset.icc +80 -0
- data/ext/gecode-1.3.1/gecode/set/select.cc +88 -0
- data/ext/gecode-1.3.1/gecode/set/select.hh +113 -0
- data/ext/gecode-1.3.1/gecode/set/select/disjoint.cc +267 -0
- data/ext/gecode-1.3.1/gecode/set/select/disjoint.icc +59 -0
- data/ext/gecode-1.3.1/gecode/set/select/idxarray.hh +91 -0
- data/ext/gecode-1.3.1/gecode/set/select/idxarray.icc +112 -0
- data/ext/gecode-1.3.1/gecode/set/select/inter.icc +300 -0
- data/ext/gecode-1.3.1/gecode/set/sequence.cc +48 -0
- data/ext/gecode-1.3.1/gecode/set/sequence.hh +97 -0
- data/ext/gecode-1.3.1/gecode/set/sequence/common.icc +79 -0
- data/ext/gecode-1.3.1/gecode/set/sequence/seq-u.cc +83 -0
- data/ext/gecode-1.3.1/gecode/set/sequence/seq-u.icc +63 -0
- data/ext/gecode-1.3.1/gecode/set/sequence/seq.cc +61 -0
- data/ext/gecode-1.3.1/gecode/set/sequence/seq.icc +53 -0
- data/ext/gecode-1.3.1/gecode/set/var-imp.vis +205 -0
- data/ext/gecode-1.3.1/gecode/set/var.icc +1090 -0
- data/ext/gecode-1.3.1/gecode/set/var/imp-body.icc +192 -0
- data/ext/gecode-1.3.1/gecode/set/var/imp-hdr.icc +235 -0
- data/ext/gecode-1.3.1/gecode/set/var/imp.cc +127 -0
- data/ext/gecode-1.3.1/gecode/set/var/imp.icc +356 -0
- data/ext/gecode-1.3.1/gecode/set/var/integerset.cc +256 -0
- data/ext/gecode-1.3.1/gecode/set/var/integerset.icc +512 -0
- data/ext/gecode-1.3.1/gecode/set/var/iter.icc +47 -0
- data/ext/gecode-1.3.1/gecode/set/var/set.cc +99 -0
- data/ext/gecode-1.3.1/gecode/set/var/set.icc +282 -0
- data/ext/gecode-1.3.1/gecode/set/view.icc +1075 -0
- data/ext/gecode-1.3.1/gecode/set/view/complement.icc +525 -0
- data/ext/gecode-1.3.1/gecode/set/view/const.icc +651 -0
- data/ext/gecode-1.3.1/gecode/set/view/print.cc +120 -0
- data/ext/gecode-1.3.1/gecode/set/view/set.icc +217 -0
- data/ext/gecode-1.3.1/gecode/set/view/singleton.icc +348 -0
- data/ext/gecode-1.3.1/gecode/support/block-allocator.hh +152 -0
- data/ext/gecode-1.3.1/gecode/support/dynamic-array.hh +131 -0
- data/ext/gecode-1.3.1/gecode/support/dynamic-stack.hh +157 -0
- data/ext/gecode-1.3.1/gecode/support/random.hh +100 -0
- data/ext/gecode-1.3.1/gecode/support/shared-array.hh +255 -0
- data/ext/gecode-1.3.1/gecode/support/sort.hh +193 -0
- data/ext/gecode-1.3.1/gecode/support/static-pqueue.hh +240 -0
- data/ext/gecode-1.3.1/gecode/support/static-stack.hh +117 -0
- data/ext/gecode-1.3.1/install-sh +323 -0
- data/ext/gecode-1.3.1/misc/debian/Makefile.am +8 -0
- data/ext/gecode-1.3.1/misc/debian/changelog +6 -0
- data/ext/gecode-1.3.1/misc/debian/control +11 -0
- data/ext/gecode-1.3.1/misc/debian/copyright +44 -0
- data/ext/gecode-1.3.1/misc/debian/gecode.info +9 -0
- data/ext/gecode-1.3.1/misc/debian/gecode.install +2 -0
- data/ext/gecode-1.3.1/misc/debian/gecode.spec +58 -0
- data/ext/gecode-1.3.1/misc/debian/rules +81 -0
- data/ext/gecode-1.3.1/misc/doxygen/back.png +0 -0
- data/ext/gecode-1.3.1/misc/doxygen/footer.html +3 -0
- data/ext/gecode-1.3.1/misc/doxygen/gecode-logo-100.png +0 -0
- data/ext/gecode-1.3.1/misc/doxygen/header.html +46 -0
- data/ext/gecode-1.3.1/misc/doxygen/stylesheet.css +460 -0
- data/ext/gecode-1.3.1/misc/fixproperties.sh +32 -0
- data/ext/gecode-1.3.1/misc/gecode-minimodel.pc.in +12 -0
- data/ext/gecode-1.3.1/misc/gecode-search.pc.in +12 -0
- data/ext/gecode-1.3.1/misc/gecode.pc.in +12 -0
- data/ext/gecode-1.3.1/misc/genchangelog.perl +190 -0
- data/ext/gecode-1.3.1/misc/genlicense.perl +113 -0
- data/ext/gecode-1.3.1/misc/genstatistics.perl +155 -0
- data/ext/gecode-1.3.1/misc/gentxtchangelog.perl +170 -0
- data/ext/gecode-1.3.1/misc/genvarimp.perl +666 -0
- data/ext/gecode-1.3.1/misc/getrevision.perl +32 -0
- data/ext/gecode-1.3.1/misc/makedepend.perl +66 -0
- data/ext/gecode-1.3.1/test/int.cc +497 -0
- data/ext/gecode-1.3.1/test/int.hh +119 -0
- data/ext/gecode-1.3.1/test/int/arithmetic.cc +262 -0
- data/ext/gecode-1.3.1/test/int/basic.cc +42 -0
- data/ext/gecode-1.3.1/test/int/bool.cc +189 -0
- data/ext/gecode-1.3.1/test/int/channel.cc +79 -0
- data/ext/gecode-1.3.1/test/int/count.cc +264 -0
- data/ext/gecode-1.3.1/test/int/distinct.cc +121 -0
- data/ext/gecode-1.3.1/test/int/dom.cc +69 -0
- data/ext/gecode-1.3.1/test/int/element.cc +132 -0
- data/ext/gecode-1.3.1/test/int/gcc.cc +592 -0
- data/ext/gecode-1.3.1/test/int/linear.cc +315 -0
- data/ext/gecode-1.3.1/test/int/minimodel.cc +451 -0
- data/ext/gecode-1.3.1/test/int/regular.cc +105 -0
- data/ext/gecode-1.3.1/test/int/rel.cc +283 -0
- data/ext/gecode-1.3.1/test/int/scheduling.cc +259 -0
- data/ext/gecode-1.3.1/test/int/sortedness.cc +272 -0
- data/ext/gecode-1.3.1/test/intset.cc +40 -0
- data/ext/gecode-1.3.1/test/log.cc +515 -0
- data/ext/gecode-1.3.1/test/log.hh +68 -0
- data/ext/gecode-1.3.1/test/set.cc +542 -0
- data/ext/gecode-1.3.1/test/set.hh +152 -0
- data/ext/gecode-1.3.1/test/set/convex.cc +94 -0
- data/ext/gecode-1.3.1/test/set/distinct.cc +148 -0
- data/ext/gecode-1.3.1/test/set/dom.cc +67 -0
- data/ext/gecode-1.3.1/test/set/int.cc +249 -0
- data/ext/gecode-1.3.1/test/set/projection.cc +333 -0
- data/ext/gecode-1.3.1/test/set/rel-op.cc +662 -0
- data/ext/gecode-1.3.1/test/set/rel.cc +198 -0
- data/ext/gecode-1.3.1/test/set/select.cc +108 -0
- data/ext/gecode-1.3.1/test/set/sequence.cc +83 -0
- data/ext/gecode-1.3.1/test/stress.cc +93 -0
- data/ext/gecode-1.3.1/test/stress.hh +74 -0
- data/ext/gecode-1.3.1/test/stress/distinct.cc +70 -0
- data/ext/gecode-1.3.1/test/stress/domain.cc +69 -0
- data/ext/gecode-1.3.1/test/stress/exec.cc +60 -0
- data/ext/gecode-1.3.1/test/stress/minsort.cc +63 -0
- data/ext/gecode-1.3.1/test/stress/regular.cc +112 -0
- data/ext/gecode-1.3.1/test/test.cc +215 -0
- data/ext/gecode-1.3.1/test/test.hh +107 -0
- data/ext/missing.cpp +328 -0
- data/ext/missing.h +120 -0
- data/ext/vararray.cpp +330 -0
- data/ext/vararray.h +149 -0
- data/lib/gecoder.rb +5 -0
- data/lib/gecoder/bindings.rb +34 -0
- data/lib/gecoder/bindings/bindings.rb +2209 -0
- data/lib/gecoder/interface.rb +8 -0
- data/lib/gecoder/interface/binding_changes.rb +313 -0
- data/lib/gecoder/interface/branch.rb +152 -0
- data/lib/gecoder/interface/constraints.rb +397 -0
- data/lib/gecoder/interface/constraints/bool/boolean.rb +246 -0
- data/lib/gecoder/interface/constraints/bool/linear.rb +29 -0
- data/lib/gecoder/interface/constraints/bool_enum/boolean.rb +84 -0
- data/lib/gecoder/interface/constraints/bool_enum_constraints.rb +8 -0
- data/lib/gecoder/interface/constraints/bool_var_constraints.rb +75 -0
- data/lib/gecoder/interface/constraints/int/arithmetic.rb +71 -0
- data/lib/gecoder/interface/constraints/int/domain.rb +78 -0
- data/lib/gecoder/interface/constraints/int/linear.rb +295 -0
- data/lib/gecoder/interface/constraints/int_enum/arithmetic.rb +72 -0
- data/lib/gecoder/interface/constraints/int_enum/channel.rb +100 -0
- data/lib/gecoder/interface/constraints/int_enum/count.rb +92 -0
- data/lib/gecoder/interface/constraints/int_enum/distinct.rb +69 -0
- data/lib/gecoder/interface/constraints/int_enum/element.rb +82 -0
- data/lib/gecoder/interface/constraints/int_enum/equality.rb +38 -0
- data/lib/gecoder/interface/constraints/int_enum/sort.rb +126 -0
- data/lib/gecoder/interface/constraints/int_enum_constraints.rb +37 -0
- data/lib/gecoder/interface/constraints/int_var_constraints.rb +58 -0
- data/lib/gecoder/interface/constraints/reifiable_constraints.rb +78 -0
- data/lib/gecoder/interface/constraints/set/cardinality.rb +75 -0
- data/lib/gecoder/interface/constraints/set/connection.rb +193 -0
- data/lib/gecoder/interface/constraints/set/domain.rb +109 -0
- data/lib/gecoder/interface/constraints/set/operation.rb +132 -0
- data/lib/gecoder/interface/constraints/set/relation.rb +178 -0
- data/lib/gecoder/interface/constraints/set_enum/channel.rb +18 -0
- data/lib/gecoder/interface/constraints/set_enum/distinct.rb +80 -0
- data/lib/gecoder/interface/constraints/set_enum/operation.rb +60 -0
- data/lib/gecoder/interface/constraints/set_enum/selection.rb +217 -0
- data/lib/gecoder/interface/constraints/set_enum_constraints.rb +34 -0
- data/lib/gecoder/interface/constraints/set_var_constraints.rb +72 -0
- data/lib/gecoder/interface/enum_matrix.rb +64 -0
- data/lib/gecoder/interface/enum_wrapper.rb +153 -0
- data/lib/gecoder/interface/model.rb +251 -0
- data/lib/gecoder/interface/search.rb +123 -0
- data/lib/gecoder/interface/variables.rb +254 -0
- data/lib/gecoder/version.rb +4 -0
- data/specs/binding_changes.rb +76 -0
- data/specs/bool_var.rb +74 -0
- data/specs/branch.rb +170 -0
- data/specs/constraints/arithmetic.rb +266 -0
- data/specs/constraints/bool_enum.rb +140 -0
- data/specs/constraints/boolean.rb +232 -0
- data/specs/constraints/cardinality.rb +154 -0
- data/specs/constraints/channel.rb +126 -0
- data/specs/constraints/connection.rb +373 -0
- data/specs/constraints/constraint_helper.rb +180 -0
- data/specs/constraints/constraints.rb +74 -0
- data/specs/constraints/count.rb +139 -0
- data/specs/constraints/distinct.rb +218 -0
- data/specs/constraints/element.rb +106 -0
- data/specs/constraints/equality.rb +31 -0
- data/specs/constraints/int_domain.rb +69 -0
- data/specs/constraints/int_relation.rb +78 -0
- data/specs/constraints/linear.rb +332 -0
- data/specs/constraints/reification_sugar.rb +96 -0
- data/specs/constraints/selection.rb +292 -0
- data/specs/constraints/set_domain.rb +181 -0
- data/specs/constraints/set_operation.rb +285 -0
- data/specs/constraints/set_relation.rb +201 -0
- data/specs/constraints/sort.rb +175 -0
- data/specs/enum_matrix.rb +43 -0
- data/specs/enum_wrapper.rb +122 -0
- data/specs/int_var.rb +144 -0
- data/specs/logging.rb +24 -0
- data/specs/model.rb +190 -0
- data/specs/search.rb +246 -0
- data/specs/set_var.rb +68 -0
- data/specs/spec_helper.rb +93 -0
- data/tasks/all_tasks.rb +1 -0
- data/tasks/distribution.rake +129 -0
- data/tasks/rcov.rake +17 -0
- data/tasks/specs.rake +15 -0
- data/tasks/svn.rake +11 -0
- data/tasks/website.rake +51 -0
- data/vendor/rust/README +28 -0
- data/vendor/rust/bin/cxxgenerator.rb +93 -0
- data/vendor/rust/include/rust_checks.hh +115 -0
- data/vendor/rust/include/rust_conversions.hh +102 -0
- data/vendor/rust/rust.rb +67 -0
- data/vendor/rust/rust/attribute.rb +51 -0
- data/vendor/rust/rust/bindings.rb +172 -0
- data/vendor/rust/rust/class.rb +339 -0
- data/vendor/rust/rust/constants.rb +48 -0
- data/vendor/rust/rust/container.rb +110 -0
- data/vendor/rust/rust/cppifaceparser.rb +129 -0
- data/vendor/rust/rust/cwrapper.rb +72 -0
- data/vendor/rust/rust/cxxclass.rb +98 -0
- data/vendor/rust/rust/element.rb +81 -0
- data/vendor/rust/rust/enum.rb +63 -0
- data/vendor/rust/rust/function.rb +407 -0
- data/vendor/rust/rust/namespace.rb +61 -0
- data/vendor/rust/rust/templates/AttributeDefinition.rusttpl +17 -0
- data/vendor/rust/rust/templates/AttributeInitBinding.rusttpl +9 -0
- data/vendor/rust/rust/templates/BindingsHeader.rusttpl +24 -0
- data/vendor/rust/rust/templates/BindingsUnit.rusttpl +46 -0
- data/vendor/rust/rust/templates/CWrapperClassDefinitions.rusttpl +64 -0
- data/vendor/rust/rust/templates/ClassDeclarations.rusttpl +7 -0
- data/vendor/rust/rust/templates/ClassInitialize.rusttpl +6 -0
- data/vendor/rust/rust/templates/ConstructorStub.rusttpl +21 -0
- data/vendor/rust/rust/templates/CxxClassDefinitions.rusttpl +91 -0
- data/vendor/rust/rust/templates/CxxMethodStub.rusttpl +12 -0
- data/vendor/rust/rust/templates/CxxStandaloneClassDefinitions.rusttpl +26 -0
- data/vendor/rust/rust/templates/EnumDeclarations.rusttpl +3 -0
- data/vendor/rust/rust/templates/EnumDefinitions.rusttpl +29 -0
- data/vendor/rust/rust/templates/FunctionDefinition.rusttpl +9 -0
- data/vendor/rust/rust/templates/FunctionInitAlias.rusttpl +5 -0
- data/vendor/rust/rust/templates/FunctionInitBinding.rusttpl +9 -0
- data/vendor/rust/rust/templates/MethodInitBinding.rusttpl +9 -0
- data/vendor/rust/rust/templates/ModuleDeclarations.rusttpl +3 -0
- data/vendor/rust/rust/templates/ModuleDefinitions.rusttpl +3 -0
- data/vendor/rust/rust/templates/StandaloneClassDeclarations.rusttpl +7 -0
- data/vendor/rust/rust/templates/VariableFunctionCall.rusttpl +14 -0
- data/vendor/rust/rust/type.rb +98 -0
- data/vendor/rust/test/Makefile +4 -0
- data/vendor/rust/test/constants.rb +36 -0
- data/vendor/rust/test/cppclass.cc +45 -0
- data/vendor/rust/test/cppclass.hh +67 -0
- data/vendor/rust/test/cppclass.rb +59 -0
- data/vendor/rust/test/cwrapper.c +74 -0
- data/vendor/rust/test/cwrapper.h +41 -0
- data/vendor/rust/test/cwrapper.rb +56 -0
- data/vendor/rust/test/dummyclass.hh +31 -0
- data/vendor/rust/test/lib/extension-test.rb +98 -0
- data/vendor/rust/test/operators.cc +41 -0
- data/vendor/rust/test/operators.hh +39 -0
- data/vendor/rust/test/operators.rb +39 -0
- data/vendor/rust/test/test-constants.rb +43 -0
- data/vendor/rust/test/test-cppclass.rb +82 -0
- data/vendor/rust/test/test-cwrapper.rb +80 -0
- data/vendor/rust/test/test-operators.rb +42 -0
- metadata +826 -0
data/README
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
== Gecode/R
|
2
|
+
|
3
|
+
Gecode/R is a Ruby interface to the Gecode constraint programming library.
|
4
|
+
Gecode/R is intended for people with no previous experience of constraint
|
5
|
+
programming, aiming to be easy to pick up and use.
|
6
|
+
|
7
|
+
== Warning
|
8
|
+
|
9
|
+
Gecode/R is still in a development stage, the syntax is by no means final
|
10
|
+
and backwards compatibility will be broken time and time again. Don't use
|
11
|
+
Gecode/R in production-code yet, it's merely available at this point to allow
|
12
|
+
people to play with it and give feedback.
|
13
|
+
|
14
|
+
== Installation
|
15
|
+
|
16
|
+
Gecode/R requires Gecode 1.3.1, which can be downloaded from
|
17
|
+
http://www.gecode.org/download.html . See
|
18
|
+
http://www.gecode.org/gecode-doc-latest/PageComp.html for the installation
|
19
|
+
instructions.
|
20
|
+
|
21
|
+
=== Installing from gem
|
22
|
+
|
23
|
+
gem install gecoder
|
24
|
+
|
25
|
+
=== Installing from source using gem
|
26
|
+
|
27
|
+
rake gem
|
28
|
+
gem install pkg/gecoder-0.x.x.gem
|
29
|
+
|
30
|
+
=== Installing from source without using gem
|
31
|
+
|
32
|
+
"gecode.so" might have another extension depending on which platform it's
|
33
|
+
generated on (replace the extension in the following commands with whatever
|
34
|
+
extension it's given).
|
35
|
+
|
36
|
+
cd ext
|
37
|
+
ruby extconf.rb
|
38
|
+
make
|
39
|
+
mv gecode.so ../lib/
|
40
|
+
|
41
|
+
== Running the tests
|
42
|
+
|
43
|
+
rake specs
|
44
|
+
|
45
|
+
Requires RSpec (1.0.5, but other version should hopefully work).
|
data/Rakefile
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'rake'
|
2
|
+
require 'rake/testtask'
|
3
|
+
require 'rake/rdoctask'
|
4
|
+
require 'rake/gempackagetask'
|
5
|
+
|
6
|
+
require 'tasks/all_tasks'
|
7
|
+
task :default => [:verify_rcov]
|
8
|
+
|
9
|
+
desc 'Performs the tasks necessary when releasing'
|
10
|
+
task :release => [:publish_website, :publish_packages, :tag]
|
11
|
+
|
12
|
+
desc 'Runs all the tests'
|
13
|
+
task :test => :specs
|
@@ -0,0 +1 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../lib/gecoder'
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/example_helper'
|
2
|
+
|
3
|
+
# Solves the magic sequence problem.
|
4
|
+
class MagicSequence < Gecode::Model
|
5
|
+
# n is the length of the sequence.
|
6
|
+
def initialize(n)
|
7
|
+
# The i:th variable represents the value of the i:th element in the
|
8
|
+
# sequence.
|
9
|
+
@sequence = int_var_array(n, 0...n)
|
10
|
+
|
11
|
+
# The basic requirement to qualify as a magic sequence.
|
12
|
+
n.times{ |i| @sequence.count(i).must == @sequence[i] }
|
13
|
+
|
14
|
+
# The following are implied constraints. They do not affect which
|
15
|
+
# assignments are solutions, but they do help prune the search space
|
16
|
+
# quicker.
|
17
|
+
|
18
|
+
# The sum must be n. This follows from that there are exactly n elements and
|
19
|
+
# that the sum of all elements are the number of occurrences in total, i.e.
|
20
|
+
# the number of elements.
|
21
|
+
@sequence.sum.must == n
|
22
|
+
|
23
|
+
# sum(seq[i] * (i-1)) must equal 0 because sum(seq[i]) = n as seen above
|
24
|
+
# and sum(i*seq[i]) is just another way to compute sum(seq[i]). So we get
|
25
|
+
# sum(seq[i] * (i-1)) = sum(seq[i]) - sum(i*seq[i]) = n - n = 0
|
26
|
+
@sequence.zip((-1...n).to_a).map{ |element, c| element*c }.sum.must == 0
|
27
|
+
|
28
|
+
branch_on @sequence, :variable => :smallest_degree, :value => :split_max
|
29
|
+
end
|
30
|
+
|
31
|
+
def to_s
|
32
|
+
@sequence.values.join(', ')
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
class Array
|
37
|
+
# Sums all the elements in the array using #+ .
|
38
|
+
def sum
|
39
|
+
inject{ |sum, element| sum + element }
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
puts((MagicSequence.new(500).solve! || 'Failed').to_s)
|
data/example/queens.rb
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/example_helper'
|
2
|
+
|
3
|
+
# Solves the n-queens problem: http://en.wikipedia.org/wiki/Nqueens . No attempt
|
4
|
+
# to break the involved symmetries is made.
|
5
|
+
class NQueens < Gecode::Model
|
6
|
+
def initialize(n)
|
7
|
+
@size = n
|
8
|
+
|
9
|
+
# The row number that the queen in the i:th column has. By using this as
|
10
|
+
# our variables we already make sure that no two queens are in the same
|
11
|
+
# column.
|
12
|
+
@queen_rows = int_var_array(n, 0...n)
|
13
|
+
|
14
|
+
# Set up the constraints
|
15
|
+
# Queens must not be in the same diagonal (negative slope).
|
16
|
+
@queen_rows.with_offsets((0...n).to_a).must_be.distinct
|
17
|
+
# Queens must not be in the same diagonal (positive slope).
|
18
|
+
@queen_rows.with_offsets((0...n).to_a.reverse).must_be.distinct
|
19
|
+
# Queens must not be in the same row.
|
20
|
+
@queen_rows.must_be.distinct
|
21
|
+
|
22
|
+
# Branching, we use first-fail heuristic.
|
23
|
+
branch_on @queen_rows, :variable => :smallest_size, :value => :min
|
24
|
+
end
|
25
|
+
|
26
|
+
# Displays the assignment as a chessboard with queens denoted by 'x'.
|
27
|
+
def to_s
|
28
|
+
rows = @queen_rows.values
|
29
|
+
|
30
|
+
separator = '+' << '-' * (3 * @size + (@size - 1)) << "+\n"
|
31
|
+
res = (0...@size).inject(separator) do |s, i|
|
32
|
+
(0...@size).inject(s + '|') do |s, j|
|
33
|
+
s << " #{rows[j] == i ? 'x' : ' '} |"
|
34
|
+
end << "\n" << separator
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
# Print the first solution. Note that there are 92 solutions, but only 12
|
40
|
+
# are rotationally distinct. For any serious use one should place additional
|
41
|
+
# constraints to eliminate those symmetries.
|
42
|
+
NQueens.new( (ARGV[0] || 8).to_i ).solution{ |sol| puts sol.to_s }
|
43
|
+
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/example_helper'
|
2
|
+
|
3
|
+
# An example of using the raw bindings. Solves the send+more=money problem.
|
4
|
+
|
5
|
+
# Variables
|
6
|
+
space = Gecode::Raw::Space.new
|
7
|
+
letters = Gecode::Raw::IntVarArray.new(space, 8, 0, 9)
|
8
|
+
space.own(letters, 'letters')
|
9
|
+
s, e, n, d, m, o, r, y = (0..7).to_a.map{ |i| letters.at(i) }
|
10
|
+
|
11
|
+
# Constraints
|
12
|
+
Gecode::Raw::post(space, (s * 1000 + e * 100 + n * 10 + d +
|
13
|
+
m * 1000 + o * 100 + r * 10 + e).
|
14
|
+
equal(m * 10000 + o * 1000 + n * 100 + e * 10 + y ),
|
15
|
+
Gecode::Raw::ICL_DEF)
|
16
|
+
Gecode::Raw::rel(space, s, Gecode::Raw::IRT_NQ, 0, Gecode::Raw::ICL_DEF)
|
17
|
+
Gecode::Raw::rel(space, m, Gecode::Raw::IRT_NQ, 0, Gecode::Raw::ICL_DEF)
|
18
|
+
Gecode::Raw::distinct(space, letters, Gecode::Raw::ICL_DEF)
|
19
|
+
|
20
|
+
# Branching.
|
21
|
+
Gecode::Raw::branch(space, letters,
|
22
|
+
Gecode::Raw::BVAR_SIZE_MIN, Gecode::Raw::BVAL_MIN)
|
23
|
+
|
24
|
+
# Search
|
25
|
+
COPY_DIST = 16
|
26
|
+
ADAPTATION_DIST = 4
|
27
|
+
dfs = Gecode::Raw::DFS.new(space, COPY_DIST, ADAPTATION_DIST,
|
28
|
+
Gecode::Raw::Search::Stop.new)
|
29
|
+
|
30
|
+
space = dfs.next
|
31
|
+
if space.nil?
|
32
|
+
puts 'Failed'
|
33
|
+
else
|
34
|
+
puts 'Solution:'
|
35
|
+
correct_letters = space.intVarArray('letters')
|
36
|
+
arr = []
|
37
|
+
correct_letters.size.times do |i|
|
38
|
+
arr << correct_letters.at(i).val
|
39
|
+
end
|
40
|
+
puts arr.join(' ')
|
41
|
+
end
|
42
|
+
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/example_helper'
|
2
|
+
|
3
|
+
# Solves the send+more=money problem:
|
4
|
+
# http://en.wikipedia.org/wiki/Send%2Bmore%3Dmoney
|
5
|
+
class SendMoreMoney < Gecode::Model
|
6
|
+
def initialize
|
7
|
+
# Set up the variables, 8 letters with domain 0..9.
|
8
|
+
s,e,n,d,m,o,r,y = @letters = int_var_array(8, 0..9)
|
9
|
+
|
10
|
+
# Set up the constraints.
|
11
|
+
# The equation must hold.
|
12
|
+
(equation_row(s, e, n, d) + equation_row(m, o, r, e)).must ==
|
13
|
+
equation_row(m, o, n, e, y)
|
14
|
+
|
15
|
+
# The initial letters may not be 0.
|
16
|
+
s.must_not == 0
|
17
|
+
m.must_not == 0
|
18
|
+
|
19
|
+
# All letters must be assigned different digits.
|
20
|
+
@letters.must_be.distinct
|
21
|
+
|
22
|
+
# Set the branching.
|
23
|
+
branch_on @letters, :variable => :smallest_size, :value => :min
|
24
|
+
end
|
25
|
+
|
26
|
+
def to_s
|
27
|
+
%w{s e n d m o r y}.zip(@letters).map do |text, letter|
|
28
|
+
"#{text}: #{letter.value}"
|
29
|
+
end.join(', ')
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
# A helper to make the linear equation a bit tidier. Takes a number of
|
35
|
+
# variables and computes the linear combination as if the variable
|
36
|
+
# were digits in a base 10 number. E.g. x,y,z becomes
|
37
|
+
# 100*x + 10*y + z .
|
38
|
+
def equation_row(*variables)
|
39
|
+
variables.inject{ |result, variable| variable + result*10 }
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
puts SendMoreMoney.new.solve!.to_s
|
@@ -0,0 +1,58 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/example_helper'
|
2
|
+
|
3
|
+
# Solves the cryptarithmetic send+most=money problem while maximizing the value
|
4
|
+
# of "money".
|
5
|
+
class SendMoreMoney < Gecode::Model
|
6
|
+
attr :money
|
7
|
+
|
8
|
+
def initialize
|
9
|
+
# Set up the variables, 9 letters with domain 0..9.
|
10
|
+
s,e,n,d,m,o,s,t,y = @letters = int_var_array(9, 0..9)
|
11
|
+
@money = wrap_enum([m,o,n,e,y])
|
12
|
+
|
13
|
+
# Set up the constraints.
|
14
|
+
# The equation must hold.
|
15
|
+
(equation_row(s, e, n, d) + equation_row(m, o, s, t)).must ==
|
16
|
+
equation_row(m,o,n,e,y)
|
17
|
+
|
18
|
+
# The initial letters may not be 0.
|
19
|
+
s.must_not == 0
|
20
|
+
m.must_not == 0
|
21
|
+
|
22
|
+
# All letters must be assigned different digits.
|
23
|
+
@letters.must_be.distinct
|
24
|
+
|
25
|
+
# Set the branching.
|
26
|
+
branch_on @letters, :variable => :smallest_size, :value => :min
|
27
|
+
end
|
28
|
+
|
29
|
+
def to_s
|
30
|
+
%w{s e n d m o s t y}.zip(@letters).map do |text, letter|
|
31
|
+
"#{text}: #{letter.value}"
|
32
|
+
end.join(', ')
|
33
|
+
end
|
34
|
+
|
35
|
+
private
|
36
|
+
|
37
|
+
# A helper to make the linear equation a bit tidier. Takes a number of
|
38
|
+
# variables and computes the linear combination as if the variable
|
39
|
+
# were digits in a base 10 number. E.g. x,y,z becomes
|
40
|
+
# 100*x + 10*y + z .
|
41
|
+
def equation_row(*variables)
|
42
|
+
variables.to_number
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
class Array
|
47
|
+
# Computes a number of the specified base using the array's elements as
|
48
|
+
# digits.
|
49
|
+
def to_number(base = 10)
|
50
|
+
inject{ |result, variable| variable + result * base }
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
solution = SendMoreMoney.new.optimize! do |model, best_so_far|
|
55
|
+
model.money.to_number.must > best_so_far.money.values.to_number
|
56
|
+
end
|
57
|
+
puts solution.to_s
|
58
|
+
puts "money: #{solution.money.values.to_number}"
|
@@ -0,0 +1,84 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/example_helper'
|
2
|
+
|
3
|
+
# Solves the square tiling problem. The objective is to pack supplied squares
|
4
|
+
# into a bigger rectangle so that there is no overlap.
|
5
|
+
class SquareTiling < Gecode::Model
|
6
|
+
# Takes the width and height of the rectangle to pack the squares into. Then
|
7
|
+
# the sizes of the squares that should be packed into the rectangle. The sizes
|
8
|
+
# must be sorted.
|
9
|
+
def initialize(width, height, square_sizes)
|
10
|
+
@sizes = square_sizes
|
11
|
+
@square_count = @sizes.size
|
12
|
+
|
13
|
+
# The coordinates of the placed squares.
|
14
|
+
@xs = int_var_array(@square_count, 0..(width - @sizes.min))
|
15
|
+
@ys = int_var_array(@square_count, 0..(height - @sizes.min))
|
16
|
+
|
17
|
+
# The essential constraints of the problem.
|
18
|
+
@square_count.times do |i|
|
19
|
+
# Each square must be placed within the bounds
|
20
|
+
@xs[i].must <= width - @sizes[i]
|
21
|
+
@ys[i].must <= height - @sizes[i]
|
22
|
+
|
23
|
+
# Pairwise conditions, no pair of squares may overlap.
|
24
|
+
0.upto(i - 1) do |j|
|
25
|
+
# That the two squares don't overlap means that i is left of j,
|
26
|
+
# or j is left of i, or i is above j, or j is above i.
|
27
|
+
((@xs[j] - @xs[i]).must >= @sizes[i]) |
|
28
|
+
((@xs[i] - @xs[j]).must >= @sizes[j]) |
|
29
|
+
((@ys[j] - @ys[i]).must >= @sizes[i]) |
|
30
|
+
((@ys[i] - @ys[j]).must >= @sizes[j])
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
# A couple of implied constraints that only serve to make the solving
|
35
|
+
# faster:
|
36
|
+
|
37
|
+
# The combined size of all squares occupying a column must be equal to the
|
38
|
+
# total height.
|
39
|
+
occupied_length_must_equal_total_length(height, width, @xs)
|
40
|
+
# The combined size of all squares occupying a row must be equal to the
|
41
|
+
# total width.
|
42
|
+
occupied_length_must_equal_total_length(width, height, @ys)
|
43
|
+
|
44
|
+
# Symmetry-breaking constraint: Order squares of the same size.
|
45
|
+
@square_count.times do |i|
|
46
|
+
@xs[i].must <= @xs[i+1] if @sizes[i] == @sizes[i+1]
|
47
|
+
end
|
48
|
+
|
49
|
+
# Place the squares left to right on the x-axis first, then the y-axis.
|
50
|
+
branch_on @xs, :variable => :smallest_min, :value => :min
|
51
|
+
branch_on @ys, :variable => :smallest_min, :value => :min
|
52
|
+
end
|
53
|
+
|
54
|
+
# Constrains the combined length of the squares in the same row or column to
|
55
|
+
# equal +total_length+ in the axis of the specified coordinates +coords+,
|
56
|
+
# which is +axist_length+ long.
|
57
|
+
def occupied_length_must_equal_total_length(total_length, axis_length, coords)
|
58
|
+
axis_length.times do |i|
|
59
|
+
# We create an array of boolean variables and constrain it so that element
|
60
|
+
# +j+ is true iff square +j+ occupies +i+ (+i+ being a row or column).
|
61
|
+
occupied = bool_var_array(@square_count)
|
62
|
+
occupied.each_with_index do |is_occupying, j|
|
63
|
+
coords[j].must_be.in((i - @sizes[j] + 1)..i, :reify => is_occupying)
|
64
|
+
end
|
65
|
+
|
66
|
+
# Constrain the combined length of squares that are occupying +i+ to equal
|
67
|
+
# the total length. We multiply the sizes with the boolean variables
|
68
|
+
# since a boolean in linear equation is 0 if assigned false and 1 if
|
69
|
+
# assigned true. Hence we will mask out the sizes of any squares not in
|
70
|
+
# +i+.
|
71
|
+
occupied_sizes = occupied.zip(@sizes).map{ |bool, size| bool*size }
|
72
|
+
occupied_sizes.inject(0){ |sum, x| x + sum }.must.equal(total_length,
|
73
|
+
:strength => :domain)
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
# Displays the corrdinates of the squares.
|
78
|
+
# TODO: Something more impressive.
|
79
|
+
def to_s
|
80
|
+
@xs.values.zip(@ys.values).map{ |x,y| "(#{x}, #{y})"}.join(', ')
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
puts(SquareTiling.new(65, 47, [25, 24, 23, 22, 19, 17, 11, 6, 5, 3]).solve! || 'Failed').to_s
|
@@ -0,0 +1,110 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/example_helper'
|
2
|
+
require 'enumerator'
|
3
|
+
|
4
|
+
# Solves the sudoku problem using sets. The model used is a fairly direct
|
5
|
+
# translation of the corresponding Gecode example:
|
6
|
+
# http://www.gecode.org/gecode-doc-latest/sudoku-set_8cc-source.html .
|
7
|
+
class SudokuSet < Gecode::Model
|
8
|
+
# Takes a 9x9 matrix of values in the initial sudoku, 0 if the square is
|
9
|
+
# empty.
|
10
|
+
def initialize(predefined_values)
|
11
|
+
# Verify that the input is of a valid size.
|
12
|
+
@size = n = predefined_values.row_size
|
13
|
+
block_size = Math.sqrt(n).round
|
14
|
+
unless predefined_values.square? and block_size**2 == n
|
15
|
+
raise ArgumentError, 'Incorrect value matrix size.'
|
16
|
+
end
|
17
|
+
sub_count = block_size
|
18
|
+
|
19
|
+
# Create one set per assignable number (i.e. 1..9). Each set contains the
|
20
|
+
# position of all squares that the number is located in. The squares are
|
21
|
+
# given numbers from 1 to 81. Each set therefore has an empty lower bound
|
22
|
+
# (since we have no guarantees where a number will end up) and 1..81 as
|
23
|
+
# upper bound (as it may potentially occurr in any square). We know that
|
24
|
+
# each assignable number must occurr 9 times in a solved sudoku, so we
|
25
|
+
# set the cardinality to 9..9 .
|
26
|
+
@sets = set_var_array(n, [], 1..n*n, n..n)
|
27
|
+
predefined_values.row_size.times do |i|
|
28
|
+
predefined_values.column_size.times do |j|
|
29
|
+
unless predefined_values[i,j].zero?
|
30
|
+
# We add the constraint that the square position must occurr in the
|
31
|
+
# set corresponding to the predefined value.
|
32
|
+
@sets[predefined_values[i,j] - 1].must_be.superset_of [i*n + j+1]
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
# Build arrays containing the square positions of each row and column.
|
38
|
+
rows = []
|
39
|
+
columns = []
|
40
|
+
n.times do |i|
|
41
|
+
rows << ((i*n + 1)..(i*n + n))
|
42
|
+
columns << (0...n).map{ |e| e*n + 1 + i }
|
43
|
+
end
|
44
|
+
|
45
|
+
# Build arrays containing the square positions of each block.
|
46
|
+
blocks = []
|
47
|
+
# The square numbers of the first block.
|
48
|
+
first_block = (0...block_size).map do |e|
|
49
|
+
((n*e+1)..(n*e+block_size)).to_a
|
50
|
+
end.flatten
|
51
|
+
block_size.times do |i|
|
52
|
+
block_size.times do |j|
|
53
|
+
blocks << first_block.map{ |e| e + (j*n*block_size)+(i*block_size) }
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
# All sets must be pairwise disjoint since two numbers can't be assigned to
|
58
|
+
# the same square.
|
59
|
+
n.times do |i|
|
60
|
+
(i + 1).upto(n - 1) do |j|
|
61
|
+
@sets[i].must_be.disjoint_with @sets[j]
|
62
|
+
end
|
63
|
+
end
|
64
|
+
# The above implies that the sets must be distinct (since cardinality 0 is
|
65
|
+
# not allowed), but we also explicitly add the distinctness constraint.
|
66
|
+
@sets.must_be.distinct(:size => n)
|
67
|
+
|
68
|
+
# The sets must intersect in exactly one element with each row column and
|
69
|
+
# block. I.e. an assignable number must be assigned exactly once in each
|
70
|
+
# row, column and block. We specify the constraint by expressing that the
|
71
|
+
# intersection must be equal with a set variable with cardinality 1.
|
72
|
+
@sets.each do |set|
|
73
|
+
rows.each do |row|
|
74
|
+
set.intersection(row).must == set_var([], 1..n*n, 1..1)
|
75
|
+
end
|
76
|
+
columns.each do |column|
|
77
|
+
set.intersection(column).must == set_var([], 1..n*n, 1..1)
|
78
|
+
end
|
79
|
+
blocks.each do |block|
|
80
|
+
set.intersection(block).must == set_var([], 1..n*n, 1..1)
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
# Branching.
|
85
|
+
branch_on @sets, :variable => :none, :value => :min
|
86
|
+
end
|
87
|
+
|
88
|
+
# Outputs the assigned numbers in a grid.
|
89
|
+
def to_s
|
90
|
+
squares = []
|
91
|
+
@sets.values.each_with_index do |positions, i|
|
92
|
+
positions.each{ |square_position| squares[square_position - 1] = i + 1 }
|
93
|
+
end
|
94
|
+
squares.enum_slice(@size).map{ |slice| slice.join(' ') }.join("\n")
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
predefined_squares = Matrix[
|
99
|
+
[0,0,0, 2,0,5, 0,0,0],
|
100
|
+
[0,9,0, 0,0,0, 7,3,0],
|
101
|
+
[0,0,2, 0,0,9, 0,6,0],
|
102
|
+
|
103
|
+
[2,0,0, 0,0,0, 4,0,9],
|
104
|
+
[0,0,0, 0,7,0, 0,0,0],
|
105
|
+
[6,0,9, 0,0,0, 0,0,1],
|
106
|
+
|
107
|
+
[0,8,0, 4,0,0, 1,0,0],
|
108
|
+
[0,6,3, 0,0,0, 0,8,0],
|
109
|
+
[0,0,0, 6,0,8, 0,0,0]]
|
110
|
+
puts(SudokuSet.new(predefined_squares).solve! || 'Failed').to_s
|