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