44 extern const int* specs[];
46 extern const unsigned int n_examples;
88 int hints = spec[spos++];
91 r += r1(spec[spos],spec[spos]);
93 for (
int i=hints-1;
i--; spos++)
94 r += between + r1(spec[spos],spec[spos]);
108 :
Script(opt), spec(specs[opt.
size()]), b(*this,width()*height(),0,1) {
114 for (
int w=0; w<width(); w++)
117 for (
int h=0; h<height(); h++)
140 for (
int w=0; w<width(); w++) {
141 int hint = spec[spos++];
142 cols += hint; spos += hint;
144 for (
int h=0; h<height(); h++) {
145 int hint = spec[spos++];
146 rows += hint; spos += hint;
149 if (rows*width() > cols*height()) {
150 for (
int w=0; w<width(); w++)
153 for (
int h=0; h<height(); h++)
184 for (
int h = 0; h < height(); ++h) {
186 for (
int w = 0; w < width(); ++w)
187 os << ((m(w,h).val() == 1) ?
'#' :
' ');
204 "Branch on rows/columns in order");
206 "Use AFC for branching");
207 opt.
parse(argc,argv);
208 if (opt.
size() >= n_examples) {
209 std::cerr <<
"Error: size must be between 0 and " 210 << n_examples-1 << std::endl;
213 Script::run<Nonogram,DFS,SizeOptions>(
opt);
284 const int crocodile[] =
315 const int unknown[] =
342 const int pinwheel[] =
361 const int difficult[] =
398 const int non_unique[] =
435 const int dragonfly[] =
482 const int castle[] = {
488 10, 2,4,2,1,1,1,4,1,1,2,
491 9, 3,3,3,1,1,6,1,1,1,
492 9, 3,2,2,2,2,8,1,1,3,
530 10, 1,1,4,2,1,1,1,1,1,4,
540 9, 1,2,2,2,2,4,1,1,3,
551 13, 2,2,4,9,1,5,1,1,1,1,1,1,1,
555 12, 4,5,3,14,1,1,1,1,4,1,1,3,
556 19, 3,3,2,2,2,4,1,1,1,1,1,1,1,1,3,1,1,3,2,
557 11, 8,2,7,2,1,1,2,1,1,3,3,
558 13, 1,5,9,12,2,1,1,3,1,1,2,2,1,
559 17, 3,2,2,1,1,1,1,4,1,1,1,3,3,1,1,2,2,
560 12, 5,2,2,2,2,1,5,2,1,1,2,5,
561 12, 3,5,9,2,1,1,6,3,1,3,2,3,
562 12, 1,4,1,1,1,4,1,5,5,3,3,3,
563 10, 4,1,1,1,1,3,4,6,6,3,
564 12, 3,1,3,1,1,3,3,1,1,4,6,1,
565 11, 3,1,5,1,1,3,1,1,9,4,1,
566 14, 2,1,1,7,1,4,1,1,1,1,1,1,3,5,
567 11, 9,2,1,3,1,1,1,1,4,2,1,
568 10, 1,14,1,1,2,2,2,10,1,2,
569 10, 1,9,2,1,2,6,1,5,3,2,
570 12, 1,9,9,1,2,2,3,1,1,4,3,1,
571 10, 10,1,3,4,1,3,2,1,2,8,
572 9, 9,1,3,5,1,1,1,2,7,
573 12, 4,5,1,2,5,1,3,1,1,2,1,3,
574 14, 1,1,1,1,2,6,2,3,2,1,1,2,3,1,
575 11, 1,6,1,5,7,1,3,3,2,4,3,
576 10, 1,2,1,2,9,1,5,2,6,2,
577 8, 10,2,2,13,1,3,3,1,
578 11, 2,2,1,6,2,3,3,2,2,2,1,
579 12, 2,2,1,1,12,2,2,9,2,2,2,2,
580 9, 5,1,2,4,1,5,11,2,2,
650 const int webpbn436[]=
666 6, 12, 2, 3, 2, 3, 2,
676 7, 6, 2, 2, 2, 2, 2, 2,
701 7, 4, 2, 2, 2, 2, 3, 1,
702 7, 3, 1, 2, 2, 2, 3, 3,
703 7, 3, 2, 2, 2, 2, 2, 4,
711 7, 10, 2, 2, 2, 2, 2, 10,
712 9, 4, 2, 3, 3, 2, 2, 3, 2, 5,
732 const int webpbn21[]=
778 const int webpbn27[]=
813 7, 2, 1, 3, 1, 3, 1, 4,
815 7, 5, 1, 3, 1, 3, 1, 3,
827 7, 1, 1, 1, 1, 1, 1, 3,
828 8, 1, 1, 1, 1, 1, 1, 1, 1,
829 7, 1, 1, 1, 1, 1, 1, 1,
904 const int webpbn23[]=
932 const int webpbn16[]=
947 8, 2, 1, 1, 1, 1, 1, 1, 2,
948 8, 2, 1, 1, 2, 2, 1, 1, 2,
949 8, 2, 1, 1, 2, 2, 1, 1, 2,
954 8, 2, 1, 1, 2, 2, 1, 1, 2,
955 8, 2, 1, 1, 2, 2, 1, 1, 2,
956 8, 2, 1, 1, 1, 1, 1, 1, 2,
982 8, 2, 1, 1, 1, 1, 1, 1, 2,
983 8, 2, 1, 1, 2, 2, 1, 1, 2,
984 8, 2, 1, 1, 2, 2, 1, 1, 2,
989 8, 2, 1, 1, 2, 2, 1, 1, 2,
990 8, 2, 1, 1, 2, 2, 1, 1, 2,
991 8, 2, 1, 1, 1, 1, 1, 1, 2,
1007 const int webpbn529[]=
1010 6, 7, 1, 1, 1, 1, 1,
1011 13, 2, 2, 4, 1, 4, 1, 5, 1, 4, 1, 4, 1, 2,
1012 10, 3, 1, 4, 1, 4, 1, 14, 4, 1, 2,
1013 8, 1, 1, 5, 1, 2, 3, 4, 1,
1018 6, 2, 8, 3, 2, 5, 3,
1020 6, 8, 6, 2, 8, 1, 2,
1021 7, 1, 1, 2, 2, 8, 1, 1,
1022 11, 2, 1, 1, 1, 2, 1, 3, 1, 3, 3, 1,
1023 8, 2, 1, 1, 1, 5, 4, 2, 1,
1024 8, 2, 1, 1, 1, 1, 7, 2, 1,
1025 8, 2, 1, 1, 2, 9, 1, 2, 1,
1032 6, 2, 13, 7, 2, 8, 2,
1034 9, 5, 1, 1, 1, 2, 8, 1, 5, 2,
1035 8, 2, 1, 1, 1, 9, 1, 1, 4,
1036 8, 2, 1, 1, 1, 6, 1, 3, 5,
1037 6, 2, 2, 1, 5, 6, 2,
1038 8, 2, 1, 3, 1, 3, 7, 3, 2,
1039 9, 2, 3, 2, 1, 1, 2, 4, 4, 2,
1040 9, 2, 2, 1, 1, 2, 3, 1, 8, 2,
1051 6, 6, 1, 3, 3, 1, 1,
1052 14, 5, 1, 3, 1, 3, 1, 1, 2, 1, 4, 1, 3, 1, 3,
1053 13, 5, 1, 3, 1, 3, 1, 4, 1, 4, 1, 3, 1, 3,
1054 6, 1, 1, 1, 1, 1, 1,
1056 6, 7, 1, 1, 1, 1, 1,
1057 13, 3, 1, 3, 1, 4, 1, 4, 1, 5, 1, 5, 1, 2,
1058 14, 1, 1, 1, 3, 1, 4, 1, 4, 1, 5, 1, 5, 1, 2,
1059 9, 2, 1, 2, 1, 1, 1, 1, 6, 2,
1061 9, 1, 5, 8, 1, 1, 7, 1, 1, 3,
1062 7, 3, 4, 8, 1, 5, 1, 2,
1064 6, 3, 3, 7, 2, 5, 1,
1065 9, 3, 3, 1, 1, 9, 1, 1, 5, 6,
1066 7, 2, 3, 8, 1, 3, 4, 2,
1067 7, 5, 3, 1, 10, 4, 5, 2,
1068 6, 1, 2, 3, 8, 4, 6,
1071 6, 2, 3, 1, 7, 12, 2,
1072 6, 2, 3, 1, 4, 11, 2,
1073 6, 4, 1, 2, 1, 11, 2,
1076 6, 2, 5, 1, 2, 6, 6,
1085 6, 2, 2, 8, 3, 8, 2,
1086 6, 2, 3, 6, 3, 8, 2,
1087 6, 2, 4, 5, 4, 7, 2,
1091 6, 4, 3, 6, 4, 3, 2,
1092 7, 2, 1, 2, 7, 4, 4, 2,
1093 7, 2, 2, 2, 9, 5, 5, 2,
1094 6, 2, 2, 2, 10, 6, 6,
1097 9, 1, 2, 1, 2, 2, 1, 1, 1, 2,
1098 12, 2, 1, 4, 2, 1, 4, 1, 5, 1, 3, 1, 2,
1099 11, 2, 1, 5, 4, 4, 1, 5, 1, 3, 1, 2,
1105 const int webpbn65[]=
1112 6, 3, 2, 2, 2, 2, 3,
1113 7, 1, 2, 2, 2, 2, 2, 16,
1114 9, 1, 2, 2, 2, 2, 2, 2, 1, 2,
1115 9, 1, 2, 2, 2, 2, 2, 2, 13, 1,
1116 10, 3, 2, 2, 2, 2, 2, 2, 4, 1, 1,
1117 9, 6, 5, 2, 2, 2, 2, 6, 1, 1,
1118 11, 1, 7, 3, 2, 2, 2, 2, 2, 1, 1, 1,
1119 12, 3, 4, 1, 2, 2, 2, 2, 2, 2, 1, 1, 1,
1120 11, 6, 1, 2, 3, 2, 2, 2, 2, 1, 1, 1,
1121 6, 1, 7, 2, 16, 1, 1,
1122 11, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1123 11, 1, 2, 1, 3, 1, 1, 6, 1, 1, 1, 1,
1124 9, 2, 7, 1, 1, 11, 1, 1, 1, 1,
1125 9, 2, 7, 1, 1, 11, 1, 1, 1, 1,
1126 11, 1, 2, 1, 3, 1, 1, 6, 1, 1, 1, 1,
1127 11, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1128 6, 1, 7, 2, 16, 1, 1,
1129 11, 6, 1, 2, 3, 2, 2, 2, 2, 1, 1, 1,
1130 12, 3, 4, 1, 2, 2, 2, 2, 2, 2, 1, 1, 1,
1131 11, 1, 7, 3, 2, 2, 2, 2, 2, 1, 1, 1,
1132 9, 6, 5, 2, 2, 2, 2, 6, 1, 1,
1133 10, 3, 2, 2, 2, 2, 2, 2, 4, 1, 1,
1134 9, 1, 2, 2, 2, 2, 2, 2, 13, 1,
1135 9, 1, 2, 2, 2, 2, 2, 2, 1, 2,
1136 7, 1, 2, 2, 2, 2, 2, 16,
1137 6, 3, 2, 2, 2, 2, 3,
1146 7, 1, 2, 2, 2, 2, 2, 1,
1147 7, 4, 2, 2, 4, 2, 2, 4,
1148 7, 4, 2, 2, 4, 2, 2, 4,
1149 7, 1, 2, 2, 2, 2, 2, 1,
1150 7, 6, 2, 2, 2, 2, 2, 6,
1151 7, 6, 2, 2, 2, 2, 2, 6,
1155 8, 1, 1, 2, 1, 1, 2, 1, 1,
1156 6, 9, 2, 2, 2, 2, 9,
1158 6, 1, 1, 1, 1, 1, 1,
1167 7, 1, 1, 1, 4, 1, 1, 1,
1170 7, 1, 2, 1, 2, 1, 2, 1,
1172 7, 1, 1, 6, 2, 6, 1, 1,
1173 9, 1, 1, 1, 1, 2, 1, 1, 1, 1,
1174 7, 1, 1, 6, 2, 6, 1, 1,
1175 6, 1, 1, 5, 5, 1, 1,
1176 7, 1, 1, 1, 8, 1, 1, 1,
1177 6, 1, 1, 4, 4, 1, 1,
1186 const int *specs[] = {heart, bear, crocodile, unknown,
1187 pinwheel, difficult, non_unique, dragonfly,
1200 const unsigned n_examples =
sizeof(specs)/
sizeof(
int*);
void size(unsigned int s)
Set default size.
Options for scripts with additional size parameter
int width(void) const
Return width of board.
BoolVarBranch BOOL_VAR_NONE(void)
Select first unassigned variable.
Slice< A > col(int c) const
Access column c.
void branch(Home home, const FloatVarArgs &x, FloatVarBranch vars, FloatValBranch vals, FloatBranchFilter bf, FloatVarValPrint vvp)
Branch over x with variable selection vars and value selection vals.
int height(void) const
Return height of board.
virtual Space * copy(void)
Copy space during cloning.
void update(Space &home, VarArray< Var > &a)
Update array to be a clone of array a.
Regular expressions over integer values.
const int * spec
Specification to be used.
void parse(int &argc, char *argv[])
Parse options from arguments argv (number is argc)
Parametric base-class for scripts.
void decay(double d)
Set default decay factor.
Deterministic finite automaton (DFA)
Gecode::IntArgs i(4, 1, 2, 3, 4)
BoolValBranch BOOL_VAL_MAX(void)
Select largest value.
Branch on rows/columns in order.
void extensional(Home home, const IntVarArgs &x, DFA dfa, IntPropLevel)
Post domain consistent propagator for extensional constraint described by a DFA.
unsigned int size(I &i)
Size of all ranges of range iterator i.
void branching(int v)
Set default branching value.
int main(int argc, char *argv[])
Main-function.
Post propagator for SetVar SetOpType SetVar SetRelType r
DFA line(int &spos)
Returns next regular expression for line starting from spos.
BoolVarBranch BOOL_VAR_AFC_MAX(double d, BranchTbl tbl)
Select variable with largest accumulated failure count with decay factor d.
Slice< A > row(int r) const
Access row r.
virtual void print(std::ostream &os) const
Print solution.
Nonogram(const SizeOptions &opt)
Construction of the model.
Matrix-interface for arrays.
BoolVarArray b
Fields of board.
Gecode toplevel namespace
Nonogram(Nonogram &s)
Constructor for cloning s.