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