46 #ifdef GECODE_HAS_SET_VARS
57 extern const char* examples[];
58 extern const unsigned int n_examples;
59 int example_size(
const char *s);
60 int sudokuField(
const char *s,
int n,
int i,
int j);
69 #ifdef GECODE_HAS_SET_VARS
104 #ifdef GECODE_HAS_SET_VARS
118 for (
int i=0;
i<nn;
i++) {
124 for (
int i=0;
i<nn;
i+=
n) {
125 for (
int j=0; j<nn; j+=
n) {
131 for (
int i=0;
i<nn;
i++)
132 for (
int j=0; j<nn; j++)
133 if (
int v = sudokuField(examples[opt.
size()], nn,
i, j))
136 #ifdef GECODE_HAS_SET_VARS
139 for (
int b=0;
b<
n;
b++) {
146 for (
int i=0; i<
n; i++)
147 for (
int j=0; j<
n; j++) {
149 for (
int k=0; k<
n; k++) {
154 bc1[b1c] = bc1s[
count];
155 br1[b1c] = br1s[
count];
163 bc2[b2c] = bc2s[
count];
164 br2[b2c] = br2s[
count];
169 same(*
this, nn, bc1, bc2);
170 same(*
this, nn, br1, br2);
177 }
else if (opt.
branching() == BRANCH_SIZE) {
179 }
else if (opt.
branching() == BRANCH_SIZE_DEGREE) {
181 }
else if (opt.
branching() == BRANCH_SIZE_AFC) {
183 }
else if (opt.
branching() == BRANCH_AFC) {
203 for (
int i = 0; i<n*n*n*
n; i++) {
208 os << (char)(x[i].val()+
'A'-10) <<
" ";
213 os << std::endl <<
" ";
218 #ifdef GECODE_HAS_SET_VARS
230 return m.
slice(bc*n+i, bc*n+i+1, j*n, (j+1)*n);
236 return m.
slice(j*n, (j+1)*n, br*n+i, br*n+i+1);
241 #ifdef GECODE_HAS_SET_VARS
255 y(*this,n*n,
IntSet::empty,1,n*n*n*n,n*n,n*n) {
265 int* dsc = r.
alloc<
int>(nn);
266 for (
int i=0; i<nn; i++) {
267 row[
i] =
IntSet((i*nn)+1, (i+1)*nn);
269 for (
int j=0; j<nn; j++) {
276 int* dsb_arr = r.
alloc<
int>(nn);
277 for (
int i=0; i<
n; i++) {
278 for (
int j=0; j<
n; j++) {
280 for (
int ii=0; ii<
n; ii++) {
281 for (
int jj=0; jj<
n; jj++) {
282 dsb_arr[ii*n+jj] = j*nn*n+i*n+jj*nn+ii+1;
285 block[i*n+j] =
IntSet(dsb_arr, nn);
295 for (
int i=0; i<nn; i++)
296 for (
int j=0; j<nn; j++) {
306 for (
int i=0; i<nn; i++)
307 for (
int j=0; j<nn; j++)
308 if (
int idx = sudokuField(examples[opt.
size()], nn,
i, j))
313 }
else if (opt.
branching() == BRANCH_SIZE) {
315 }
else if (opt.
branching() == BRANCH_SIZE_DEGREE) {
317 }
else if (opt.
branching() == BRANCH_SIZE_AFC) {
319 }
else if (opt.
branching() == BRANCH_AFC) {
339 for (
int i = 0; i<n*n*n*
n; i++) {
340 for (
int j=0; j<n*
n; j++) {
341 if (y[j].contains(i+1)) {
345 os << (char)(j+1+
'A'-10) <<
" ";
350 os << std::endl <<
'\t';
371 SetVar dummySet0(*
this, is0, is0);
372 IntVar dummyInt0(*
this, 0, 0);
375 for (
int i=0; i<nn; i++)
379 for (
int i=0; i<nn*nn; i++)
416 #ifdef GECODE_HAS_SET_VARS
421 "use both integer and set constraints");
425 "additional \"same\" constraint for integer model");
433 opt.
parse(argc,argv);
434 if (opt.
size() >= n_examples) {
435 std::cerr <<
"Error: size must be between 0 and "
436 << n_examples-1 << std::endl;
439 #ifdef GECODE_HAS_SET_VARS
440 switch (opt.
model()) {
442 Script::run<SudokuInt,DFS,SizeOptions>(
opt);
445 Script::run<SudokuSet,DFS,SizeOptions>(
opt);
448 Script::run<SudokuMixed,DFS,SizeOptions>(
opt);
452 Script::run<SudokuInt,DFS,SizeOptions>(
opt);
469 const char* examples[] = {
676 "...G...9..4.....6F..L8..."
677 "CEIN.HDM.OF.1L..A..9PJ.4."
678 ".....A...L..JBN.2.D.1...H"
679 "P49...JB23.AD..7E..C5F..."
680 "A1H....F.N5....I.BL...26."
681 "....7..C.6...H4B..1....I5"
682 ".F.P...I..B..7.5.L...9..."
683 ".L6A...5OF.8P...K.NE..734"
684 "B2.E..L...1J.5....O7.K.AP"
685 "O.5.CB1.P....3EM....2L.H."
686 "2..MJ.A...9.3.7......P.8C"
687 ".....CF.DPG62N.E...OH.M.J"
688 ".DL..OM..IE.B8..NH...3..K"
689 ".CO1F.B.N.AH..P.78.JE...D"
690 "E..6.....H......4M.KIB9.."
691 "N.J..6......C..1.5.G..H.."
692 "...75LG...6..1..CI..4.E.."
693 "9K..6.....HGN.O2P.4......"
694 ".OA..IP849...2.K3...7GN.."
695 "..G....N...P.D9....A...C1"
696 "J...M.NAFE.4..23.7....8L."
697 ".....J.H9CD1LP..GO....4ME"
698 "48NK..5.M......JL.......9"
699 ".I.OG....835.A.DH..P....."
700 "35......L.J..E....8IG.67B"
703 ".N..JG..O7591...8I....L.."
704 "FG.M.B8...P.E...CJ..H...."
705 "...........G.4.H.D.O.NJA2"
706 ".....J.EN4.L6MA.B.2......"
707 "HE..2..DC.....F4KMA.B.9O8"
708 "M....62...47C19......E5.."
709 ".I2.8M.JGL...ADN..K..3.F7"
710 "..H3.5..89....I.J.....NL."
711 "1B..9.FAP.6.N....537.H..O"
712 "......1..N...O...LC.68.PG"
713 "KOA.FNBH.....7.C.....M..6"
714 "45.ECP.I..N.F.J1...MK.79."
715 "I.L..8.O..9.P...A...2.1J."
716 "..621.D.M.....B8LG..P..CH"
717 ".HP.N7E.L1....3..B..O.G45"
718 "....BIO....5.C.P...FN48E."
719 "...FL.....2.DH..17..59O.."
720 "..I.MF..2G.N...A6O.HC.PB."
721 "72.1..L...IM.96E.45G....."
722 "..9...7M..A.O...I...L...."
723 ".C.JA.........1.....E.48."
724 "O.BI.......PHL.6..1....5C"
725 "G6M...N4FI8...K..H.E....."
726 ".L..4.917....BE.G8F.M.I.."
727 "8F......5.O3..4...9.....K"
730 "5.PC..7..J..I...3..H.M.2L"
731 "H.......F..DA..N.G...9..P"
732 "...3LCP2.54.71.B....J.8.."
733 "76M8...3A...H..C.D.FO...."
734 "...DK..GI..B.L.6.8.14...."
735 "A......M....D.6.N.P....O2"
736 "...E5BLF..92..3AJC..6I..."
737 ".PNJ.6..E7A.8..IM.OL1.G.C"
738 ".L3...O.N.5.KI.46.....9E."
739 ".I.G.A..28.MBP...E..HJ3.7"
740 "J.74.L..D1O96.A3.M...GI.."
741 "E...1...K....J...P6.7.C.9"
742 "8M..A9JO.F.P..1...4.E3N6."
743 "...I.3.7.......EL.CD..H.."
744 "....DE2..P...N.........K."
745 ".O.7.FKI1..GJ.N.....9.P8."
746 ".89..H..BNM73D.KFJ..I.6.A"
747 "PDBN...9M..C.....O.6..7.."
748 ".F.K...4..LA9B..C.E75..GN"
749 "G.A.....7.8.....H....O.3."
750 "B...C...4......8K.3.P...."
751 "DHE5..FA...J.3..B.2.KC.98"
752 "...F...5....N..J9......I."
753 ".J...P..O.BK....I.M.3..5."
754 "9...8.B.6.D.M.I..H.5G.J4."
757 "..6F.....5..3.....H..A.M2"
758 ".....3....I8.A.MC.KJ.LNG."
759 ".I.7N..K.2..6...3D..B.O85"
760 ".3A.PF.D8OBK7.2....L6.9H4"
761 ".K..CBML.....O.A8.G4.D..."
762 "1.4.AGL..M5..F.O.9....P2."
763 "..I.........8......N4E..."
764 "J.C8.1.6.3.LO.K7AG2P9.H.."
765 ".2.3BH..9.A...G......O..L"
766 ".H..M8.J.....NI1.LEF....B"
767 "I5..4.....G.27..K..3.M..H"
768 "P..E..I.A..3B.8....G.2..."
769 "AJ......NFK.I.O9476..G.1."
770 ".976...E3H....M5.F......O"
771 ".F.M3.5.GKC4.HJ.N.....ID7"
772 "..L1K..9.J37.ID..B..E6..."
773 ".82OH.1..PNML...E..C...J."
774 "....JLFN.B..G..6M..H..D.9"
775 "...C.A...I.6.......K.5..."
776 "E.G.I.....O....J.8F......"
777 "..M4..9.D.7.K.FE.3O......"
778 "H.N.....14E..B3L..8I...AG"
779 "K.O.62.PM...N..H...18C.9."
780 "LC..8.3...2...H.G...J..4E"
781 ".B..9NK.E....C6.P.4D.71OI"
784 "A..F.N......M28DC.LI7..OJ"
785 "..B...D.M.6....9.....2A.."
786 ".2..I.56.B...J.MEH......."
787 "O7...HE...BA..G2........L"
788 ".H6J.2...G.7NDP.A...8..C."
789 ".PN35..B..869.2.GA..K.C.."
790 "....EM13OD.N...49K...7..."
791 "9G..C....IJF5.B..7.3....."
792 "HD.....JN....7...EF....9."
793 "1.OA..G.KL....H..B.CP...."
794 "..CE.......2..9I....3...."
795 "FJ..83P.E..K7.NL15H..I2.."
796 ".4..GJ...6DIB...P...AHL.C"
797 ".1I.2.M....83.F..4.NBE..."
798 "L3M.OD.H.AG..4.....69...F"
799 ".8...5H.3.....M...D..K..4"
800 "3..4..AEDO7J...5..9..G1.."
801 "..2N9.8F.P.OIGC.L6..E.H.."
802 "C...1.7..K.L6.4EO.8.5...N"
803 ".IG.H..M..E...1A2N4..8.F."
804 "6..5J..N1...2..H.IGA...P8"
805 ".L...O...H...C....M5G..A."
806 "..F...3C.7.P..5N..B..DMH9"
807 "291D..6..M..H.7.3.J.N..B."
808 "....MK..29F.G.DO4...6.E35"
811 "....B12O3..D..F..KPL.E4.7"
812 "1M..GL..H..K.A.....39.P.."
813 ".8.3.4.....7..6.F.....CK."
814 "P.O...758.2..MC.....1L.A."
815 "...HFK6.A..8...9B...2...J"
816 "91.KJE..L.5O..GD.....4..."
817 ".I..3..D.2.....C4MLAK..N."
818 ".4..6IA.P7.....B9......3."
819 "M.F...4.J...8....N.H.1G7."
820 "..5P.N.....C.731.I.E.9A.."
821 ".....GO.KDL......BA......"
822 ".3A..F...9..K.EI5.7..6.DN"
823 ".G.54.L.....PH..3F6....2."
824 "....P.....G..2D.OH.1B...C"
825 "6.EM.7N....3.B4..DC..K1P."
826 "B.9.....I..5N...7OGK...46"
827 "OF.GD6HP..JM..BA8.I.C...."
828 "8.L7...........P.3M5...92"
829 ".EM.....45IF7....2.CJ8DL."
830 ".6.4.8..NA.2......9....GI"
831 "2..A1DCN..3G.F5.L..I..O6H"
832 "..BIO..1.H.L...G........."
833 "C.P.....M8.9O..5A..N.JK.D"
834 "H...N...FOA4..73....5..CM"
835 ".D4..3...6BE..N.2JH8..L.."
838 "LJ.FH2...K....359.E.B6.N."
839 "...EML1FC.PJ.A.8I....2.K4"
840 "9........G1..6..K...PAL3C"
841 "P...C34..8.N7.........DE."
842 "...7....E..IO...124.J5.F."
843 ".8.L.PA.2..31FG....N..C.I"
844 "F.G......M........2.K..1."
845 "....2KH6.JOD..9.L..G...B."
846 ".6O3..G...4.NJ.H.PB...5.9"
847 "I...K..LBN...E.76.A....8."
848 "D.B.L......8.3.C.KM.6...."
849 ".C593.I.N4.26MB..1..L.K.."
850 "M.F6......DA45.9..N.I3..B"
851 ".G..79.H...KJ...4...AN.2."
852 ".KH...BC....LON..7..D.8.F"
853 "2..B...MP....7OEJ4....6.1"
854 ".4....2O.9......N..1....G"
855 ".....G.JF.2..L.6.5......."
856 "C9A.G...H1...PJ..L.3.8.MN"
857 "...1......M.....O.P8.K3J."
858 "...N.HP.K25G3..JC8..1M..."
859 "..2K.FC34.A....N7..9.LB.."
860 "..65DJ..L..C.4.1...BGF..."
861 "OF..E..7.B.......634...D."
862 "G.3..N.I9D7PM8KF2....4..."
865 ".1..I8.P..6.N...BD...3O.."
866 ".9.6...E.M43.8..AK.2J.1.."
867 "...JKL...FA...P.I4...DB.."
868 "E...P.I.B.7.1..J.HC...98."
869 "..5M8GJ.KD.O...N3..1AI..."
870 "K.2C4.M.N..J..I.......H.5"
871 "N..B9O.D...KH6.E...C...7I"
872 "DE..JK4.....L.1B7..68PN2."
873 ".....P...C..F.7...L.O9..."
874 "...35.H......92..M.4.EC.1"
875 "P..IL..H.........1..3.D.."
876 "....B9..8.3I5.C...K...F1."
877 "FH....2O..D.4M.P...A...GC"
878 "JA.......KF.......4.EOMIP"
879 "3.7GNF...A.2OB9C.E5.HJ..."
880 "2.I.1.......AO5.P...K.3.."
881 "..H....L..M.CIJ..7...4..."
882 "GO.9..KF.I.P3...E.HJ...N7"
883 "5.37...B.E...4N..O.8....."
884 "4B...7.9O.HL..E2C3.K51.M."
885 "L.O42...D..AJ.8...GH.N..E"
886 "9M.8.H..LG1..N..5.E..F7B."
887 "......FAC..5M..I6J.B4...G"
888 "...F..82..P.E......36HK.L"
889 "B.J.G5...O.H2..98.7......"
892 ".CNPHK.53.O9F..D.78..J..."
893 "J.....F.DB...7.G..PAE...L"
894 ".6.........5.4A......I..."
895 "A..L.6.E.1JG....5.H.2...9"
896 "..G4..P...E2N.M...C..FB.1"
897 "..PKJ...G41O..C.N..H....."
898 ".M..I5L97J.3H...E2.8...D."
899 "1.4..ON.83G.P.D59..C.BH.."
900 "..2.9.......4.F.3.6..O.7."
901 "3F.7.MEC..5...2..4K.LN8.."
902 "...I........MF7.6AOG..LE."
903 "C1.3..JG..D.9...4..N...68"
904 "...M7L9..NHA...FJ.I..3.C."
905 ".A...P...5...E3.8M..K4OFG"
906 ".....C.6KIP...8..3.DJ...."
907 ".2.J...3C..7.D.9A.EF6L..."
908 "4...3.6N.....L9.H..P8...2"
909 ".9.C.4H.......P....1..FJ3"
910 ".LD.K87.1.BM5AJN....4H.G."
911 ".B..MAI........47O.LD...."
912 ".G....3....F..1..9..M..K6"
913 "P7.A..B8.......2....I.3.."
914 "M..O....9K2..6..1.N.FE.L."
915 "....E...A..N.J.IG8...C.9."
916 "6KL.4...FCI.A.....5J.2D.N"
919 "E..I...M......L....D...BK"
920 "F..BH9.K.A2.7..E4.P.6..M."
921 ".6.J..PD8FE.IM...K...54.."
922 "L...8E...IA..HC........7J"
923 ".....7H.4.JK..DOFC....9I."
924 "9...7A.5.B.M34E.KDJ8....."
925 "8...BD....O..7....CP.E.6."
926 ".1.3..8....D...2.ML.B..5A"
927 ".E2.A.O.7..1..I.659..8LD."
928 "KF..M2...PL......A.G..N3."
929 "...76N.1..CBG...DPK..O.J2"
930 ".JK...6B.9..P.7.N.EMFDG.5"
931 "N....G.F.8....OH9.2...E.7"
932 "....4.3....F9.....5.NC.A."
933 "M.A.GL.J......5..4.7.91.."
934 "C.8NE.5..6..M.....BJ17..H"
935 "7.6...NL.41.AC.I8...GJ3.."
936 "...53P.GM2.L..F.....K.68."
937 "J.4.D..H..IG..8K..35.N.FL"
938 "P.F...93.D.....A.1......M"
939 "..7.I...1...DF..PJ.4.MA.."
940 ".KN.....5H..O.63.E.2....4"
941 "....1...O..A2..DCH8B..KE."
942 "3.HA.6BP.....J1957O..28.."
943 "42JO.I...K5C......6.P.B.."
946 "...G87..O..F.N..CH6..D..2"
947 "C16..N....DL.3.E........."
948 ".LN.EK..D..O.G6.412....5H"
949 "K...2........59M...P..3.."
950 "..A9.M.6....8.E7O3..K..LB"
951 "7..8B.1.EP.....4.L.6.C.9."
952 ".3.6...9.85.A2F.....B.EP."
953 ".D4K.L..NA....C.M.E..7..."
954 "L..P.3H.CG.7....DKF..I6.."
955 "5EH.G.7.6.1....J....D3K.O"
956 ".6.....G.K.E..I2.4J......"
957 "..ICFP.8H7.2.O.B.NM5..G.."
958 ".M..D9..BE..J..F..I7..LAK"
959 ".BE.L...31.M7FK..C9..8.DN"
960 ".2O......D38C...E...F.P.."
961 ".A.....M..NB..3.J.7E8..2."
962 "...O...B..6..C.8KG4..5D7M"
963 "....M8..I..9..AL1.O.3HBNG"
964 ".C..4....L.....D.F......."
965 "J..5NF..G...H..6..C..1..."
966 "D..N..O....G9.J.A..I...8."
967 ".F.H1BN.K.O.4.8.6.3.9.M.."
968 "B...I....9K..6..2...G.H1."
969 "O...7.CJMI25N...HDKBPFAE."
970 ".....28.F..C........O.JK."
973 "9.K..6D.I5...........H..."
974 ".I.E..BK...GN...6.L...3.."
975 "7....2..L8E.K.D1.P5I.6..A"
976 "..N.LEH.A32..CM9........."
977 "..2....9N...3.IC...J.KF8."
978 "......GA..C.7JPNI3....6L."
979 "....E.J.8K..I.....97NG2.B"
980 "O7..3HI...M.....DCF5..914"
981 "L.M.4.3.19.D..2......F.K."
982 "B....F...O9.6ANG.2.PH.E.5"
983 "8KDM...5.1....G......P..6"
984 ".4.H.L.C..J2....G..3ION.."
985 "C.A..J..E...1K......92.5."
986 ".9O.NP.2...IA....H..G..7."
987 "...I5..O.N4.H...2DCKJ...E"
988 "56....1.D..AJ.....7.L.O.."
989 "K.8.H.7.9.5....AC..O..G6F"
990 "3..........O..C.F.P6K.5.."
991 "...OC.4J2.3E.9...N.H7..P1"
992 ".B.7.K.....6.MH.LJ..A...."
993 "I..4.........P..E7D9O.B.H"
994 "E.3G.OP...I1CBL..FN4..82."
995 ".A..9N.8.E...73O..H....4."
996 ".M.C.3....DK..EI......JG."
997 ".HP..D..FB...NO.1KJ8.AL.."
1000 "....L.1.8H.CO..P....FA..."
1001 "P1.2.4CO...K..A..3H8...7."
1002 "I..H.G.5.B.6.M..A24.K..9."
1003 "....6I.KF9..5.P.J1.BDCE.M"
1004 ".A....2...F..L..E.M.6.5O3"
1005 "7..1.C...8.L9..4P.5.G.K.."
1006 "JO.5H.M2.I.7.F.6D..A4..NE"
1007 "E.3.NO....K2...LG..7JM..."
1008 ".9F.CJ.H....A.NKB.1..2.5."
1009 "2LB...5..7.P36H.M..N...1D"
1010 ".....P..B....46.HJ......."
1011 "B4..7LI.C.GD2...KA.3H...."
1012 "K5......6J1.........27O8P"
1013 "LP...5K.G..JB3.......1.M."
1014 "..EG...4.F.NKC...O..9.B.."
1015 "..MI...D32AGP..5O...74.BN"
1016 "FC74.....1..LO..8...5.D.J"
1017 "..JN....H...E.I...DPA3.6."
1018 "AE.......O3F..5.........H"
1019 "...8..6......24.9G....I.1"
1020 ".M....8.9..O1.F.C.EL3...A"
1021 ".N...E.3.....I7M1...ODG.K"
1022 "1......P.N9..D..5........"
1023 ".I.P..FGOCMA.......J.5..2"
1024 ".GK....7...3.....92..B.L4"
1027 "...H....GKM.43..B.D......"
1028 "15I.C....8B.6D.7G....A.H4"
1029 ".7...F..B...J.E16.N....3."
1030 "...D.1...6L7.H.5K....P98F"
1031 "KJ.AF.5CHO...NP2M.....B.."
1032 "4..K..I9.M.DNP..A.3..E5O6"
1033 "PGC...HE.....I5..M...7..J"
1034 ".B.EJ..G.5..L....D.48.2.."
1035 ".D....N.4.J.2A..H..5..F1."
1036 "8....AJLD.7..OM...1B....P"
1037 "CH...N..7.........B3....."
1038 "I..O.JL..P5...3......KH.8"
1039 "D.259.E......6.......L3.."
1040 "...3K6.B.AE..74N25H..G1.."
1041 ".L.B..41.HC...G.OIP8..MN7"
1042 ".........2.C.4.L....69.I5"
1043 "N...7.C...69.5.A......PKL"
1044 "....L.G...13.BOMP.82..D7H"
1045 "...C.H..5.P.E.K...I7....."
1046 "JO..P.96ABI8.....C..N..4G"
1047 ".NA8H.32..O4..IB..L9G..J."
1048 "..4.GD..M.3..27INJ.O....."
1049 ".C9L..A..J.....6.2..I..F."
1050 "BK...4..F.A.CL..87.1.O.M."
1051 "6..P.I.5...M..N....F....D"
1054 ".6OL.3GB.I.1F.EP..9..24.."
1055 "..1.P.....K....N.2.....ID"
1056 "2.8.K7..J...6..1F.......A"
1057 "...D.8.4..29..LJ7.HMKPF.."
1058 "..I.9N...A..P.M.DK...E5.."
1059 "94.N...5..F..E.C182..BG3."
1060 "8D..3HC....6G.....P.F.72I"
1061 "C..I.E.7D....8BG.F...6..."
1062 "......L....N.24..I..1K.DJ"
1063 ".27HG.NF......I..L..E.A.."
1064 "L...N.I8F6.H.9K.3O..B..5P"
1065 ".9...L..25.B14F.N.JE...7K"
1066 ".1...9B....GJ.8.A.5C....."
1067 "....CPK..J....5.M.7.6.H.3"
1068 "..F7..3..O..N..B8....421."
1069 "AM.8....P...71..26N...3G."
1070 "P....D.2.78.O..5CJ.GA.BH."
1071 "6..4.F...3...K9A..1...J.M"
1072 ".I2.E......JM.N...B98..P."
1073 "FC..7..6.EI.D.G...3H5..KN"
1074 "I8NO.4F.9..DB....5......."
1075 "5..1...G3.MIH.A.9..N....."
1076 "KG.62..1.....L3.....IJE.F"
1077 "....D.6.AC4.9.....OL.HP.."
1078 "..EA.5O.L.6.......D...9N."
1081 ".CH3.L..D4F..I.........1."
1082 "G..K.....7.O.......L.42N."
1083 "A.D...5O8B...39G.4..I...L"
1084 "1E2OB....A8N..6FCD9.H...G"
1085 "IN..4..3.....J..5OM....9."
1086 "...JEMP..9G8..D7......BA."
1087 "B.M9..L....6...2.FI.KJ..."
1088 ".LN.386A..BH....O.J.2..7."
1089 "7A6..2..3N.....4KP..G8HIC"
1090 ".1.....J.CK3....HB..5L4.."
1091 ".H......P.I.57....G..21B4"
1092 "....7.....EP1....3.2..A.."
1093 ".59.1FI.L8.MJG.B..AH....E"
1094 "NI..D....O3K..A.P9..8F..."
1095 ".O....A..E2.8.HN.J7.P...."
1096 ".MC..P....H2...A7..ID...1"
1097 ".6.....M.J.14.BDG.3.O9F2."
1098 ".......CG.........4...M.."
1099 "HDL...8N7.......FK2C.E..B"
1100 "..KP2I.F.3...N7J.E.6..L85"
1101 "D.E...C.4.7B..I....A.1..M"
1102 "J..M..7..D.A..4...ONBG..2"
1103 "9.7.6..K..P..O....D...8.."
1104 ".2IN..GE1.D..8...MK.CPJH."
1105 "FG..8B.2.L..KH.....1.5E..",
2209 "BNDAJG62O7591KHF8IP34CLME"
2210 "FG.M.B8...P.E...CJ..H...."
2211 "...........G.4.H.D.O.NJA2"
2212 ".....J.EN4.L6MA.B.2......"
2213 "HE..2..DC.....F4KMA.B.9O8"
2214 "M....62...47C19......E5.."
2215 ".I2.8M.JGL...ADN..K..3.F7"
2216 "..H3.5..89....I.J.....NL."
2217 "1B..9.FAP.6.N....537.H..O"
2218 "......1..N...O...LC.68.PG"
2219 "KOA.FNBH.....7.C.....M..6"
2220 "45.ECP.I..N.F.J1...MK.79."
2221 "I.L..8.O..9.P...A...2.1J."
2222 "..621.D.M.....B8LG..P..CH"
2223 ".HP.N7E.L1....3..B..O.G45"
2224 "....BIO....5.C.P...FN48E."
2225 "...FL.....2.DH..17..59O.."
2226 "..I.MF..2G.N...A6O.HC.PB."
2227 "72.1..L...IM.96E.45G....."
2228 "..9...7M..A.O...I...L...."
2229 ".C.JA.........1.....E.48."
2230 "O.BI.......PHL.6..1....5C"
2231 "G6M...N4FI8...K..H.E....."
2232 ".L..4.917....BE.G8F.M.I.."
2233 "8F......5.O3..4...9.....K",
2236 ".ND.JG6.O7591..F8IP.4.LM."
2237 "FG.M.B8...P.E...CJ..H...."
2238 "...........G.4.H.D.O.NJA2"
2239 ".....J.EN4.L6MA.B.2......"
2240 "HE..2..DC.....F4KMA.B.9O8"
2241 "M....62...47C19......E5.."
2242 ".I2.8M.JGL...ADN..K..3.F7"
2243 "..H3.5..89....I.J.....NL."
2244 "1B..9.FAP.6.N....537.H..O"
2245 "......1..N...O...LC.68.PG"
2246 "KOA.FNBH.....7.C.....M..6"
2247 "45.ECP.I..N.F.J1...MK.79."
2248 "I.L..8.O..9.P...A...2.1J."
2249 "..621.D.M.....B8LG..P..CH"
2250 ".HP.N7E.L1....3..B..O.G45"
2251 "....BIO....5.C.P...FN48E."
2252 "...FL.....2.DH..17..59O.."
2253 "..I.MF..2G.N...A6O.HC.PB."
2254 "72.1..L...IM.96E.45G....."
2255 "..9...7M..A.O...I...L...."
2256 ".C.JA.........1.....E.48."
2257 "O.BI.......PHL.6..1....5C"
2258 "G6M...N4FI8...K..H.E....."
2259 ".L..4.917....BE.G8F.M.I.."
2260 "8F......5.O3..4...9.....K"
2264 const unsigned int n_examples =
sizeof(examples)/
sizeof(
char*);
2268 int l = std::strlen(s);
2270 assert(res*res*res*res == l);
2276 assert(example_size(s) ==
std::sqrt(static_cast<float>(n)));
2277 assert(i >= 0 && i < n);
2278 assert(j >= 0 && j < n);
2279 char c = s[j*n +
i];
2280 if (!std::isalnum(c))
2282 if (std::isdigit(c))
2284 if (std::islower(c))
2285 c =
static_cast<char>(std::toupper(c));
2287 int res = (c -
'A') + 10;
2288 if (res > n)
return 0;
SetVarBranch SET_VAR_SIZE_MIN(BranchTbl tbl)
Select variable with smallest unknown set.
SetVarArray y
The fields occupied by a certain number.
void size(unsigned int s)
Set default size.
Options for scripts with additional size parameter
Use lexicographic ordering.
IntVarBranch INT_VAR_NONE(void)
Select first unassigned variable.
Example: Solving Sudoku puzzles using set constraints
Example: Solving Sudoku puzzles using both set and integer constraints
virtual void print(std::ostream &os) const
Print solution.
SetVarBranch SET_VAR_NONE(void)
Select first unassigned variable.
void channel(Home home, FloatVar x0, IntVar x1)
Post propagator for channeling a float and an integer variable .
void propagation(int v)
Set default propagation value.
IntVarBranch INT_VAR_DEGREE_SIZE_MAX(BranchTbl tbl)
Select variable with largest degree divided by domain size.
T * alloc(long unsigned int n)
Allocate block of n objects of type T from region.
void parse(int &argc, char *argv[])
Parse options from arguments argv (number is argc)
SudokuSet(const SizeOptions &opt)
Constructor.
SetValBranch SET_VAL_MIN_INC(void)
Include smallest element.
Example: Solving Sudoku puzzles using integer constraints
virtual void print(std::ostream &os) const
Print solution.
void dom(Home home, FloatVar x, FloatVal n)
Propagates .
IntVarBranch INT_VAR_SIZE_MIN(BranchTbl tbl)
Select variable with smallest domain size.
Sudoku(bool share, Sudoku &s)
Constructor for cloning s.
int example_size(const char *s)
The size of an instance.
SudokuMixed(bool share, SudokuMixed &s)
Constructor for cloning s.
IntVarArray x
Values for the fields.
Parametric base-class for scripts.
int sudokuField(const char *s, int n, int i, int j)
Return value at position (i,j) in the example s of size n.
void decay(double d)
Set default decay factor.
Use both integer and set constraints.
SudokuMixed(const SizeOptions &opt)
Constructor.
void update(Space &, bool share, VarArray< Var > &a)
Update array to be a clone of array a.
Gecode::FloatVal c(-8, 8)
bool same(const ConstView< ViewA > &, const ConstView< ViewB > &)
Test whether two views are the same.
IntVarBranch INT_VAR_AFC_MAX(double d, BranchTbl tbl)
Select variable with largest accumulated failure count with decay factor d.
Gecode::IntArgs i(4, 1, 2, 3, 4)
virtual Space * copy(bool share)
Perform copying during cloning.
Use minimum size over afc.
int n
Number of negative literals for node type.
void sqrt(Home home, FloatVar x0, FloatVar x1)
Post propagator for .
unsigned int size(I &i)
Size of all ranges of range iterator i.
Slice< A > row(int r) const
Access row r.
Base class for Sudoku puzzles.
SudokuSet(bool share, SudokuSet &s)
Constructor for cloning s.
const int n
The size of the problem.
void branching(int v)
Set default branching value.
No additional constraints.
Use minimum size over degree.
Passing integer variables.
Passing integer arguments.
static const IntSet empty
Empty set.
SetVarBranch SET_VAR_AFC_SIZE_MAX(double d, BranchTbl tbl)
Select variable with largest accumulated failure count divided by domain size with decay factor d...
virtual Space * copy(bool share)
Perform copying during cloning.
Sudoku(const SizeOptions &opt)
Constructor.
Use "same" constraint with integer model.
virtual void print(std::ostream &os) const
Print solution.
union Gecode::@518::NNF::@57 u
Union depending on nodetype t.
void values(Home home, const IntVarArgs &x, IntSet y, IntConLevel icl=ICL_DEF)
Post constraint .
void count(Home home, const IntVarArgs &x, int n, IntRelType irt, int m, IntConLevel)
Post propagator for .
SetVarBranch SET_VAR_DEGREE_SIZE_MAX(BranchTbl tbl)
Select variable with largest degree divided by domain size.
int main(int argc, char *argv[])
Main-function.
bool assigned(View x, int v)
Whether x is assigned to value v.
void rel(Home home, FloatVar x0, FloatRelType frt, FloatVal n)
Propagates .
IntVarBranch INT_VAR_AFC_SIZE_MAX(double d, BranchTbl tbl)
Select variable with largest accumulated failure count divided by domain size with decay factor d...
void distinct(Home home, const IntVarArgs &x, IntConLevel icl)
Post propagator for for all .
void solutions(unsigned int n)
Set default number of solutions to search for.
Matrix-interface for arrays.
IntValBranch INT_VAL_SPLIT_MIN(void)
Select values not greater than mean of smallest and largest value.
void model(int v)
Set default model value.
struct Gecode::@518::NNF::@57::@58 b
For binary nodes (and, or, eqv)
Gecode toplevel namespace
Slice< A > col(int c) const
Access column c.
BrancherHandle 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.
virtual Space * copy(bool share)
Perform copying during cloning.
Slice< A > slice(int fc, int tc, int fr, int tr) const
Access slice of the matrix.
SetVarBranch SET_VAR_AFC_MAX(double d, BranchTbl tbl)
Select variable with largest accumulated failure count with decay factor d.
void icl(IntConLevel i)
Set default integer consistency level.
struct Gecode::@518::NNF::@57::@59 a
For atomic nodes.
Domain propagation or consistency.
SudokuInt(bool share, SudokuInt &s)
Constructor for cloning s.