42 #ifdef GECODE_HAS_SET_VARS 53 extern const char* examples[];
54 extern const unsigned int n_examples;
55 int example_size(
const char *s);
56 int sudokuField(
const char *s,
int n,
int i,
int j);
65 #ifdef GECODE_HAS_SET_VARS 85 n(example_size(examples[opt.
size()])) {}
102 #ifdef GECODE_HAS_SET_VARS 116 for (
int i=0;
i<nn;
i++) {
122 for (
int i=0;
i<nn;
i+=
n) {
123 for (
int j=0; j<nn; j+=
n) {
129 for (
int i=0;
i<nn;
i++)
130 for (
int j=0; j<nn; j++)
131 if (
int v = sudokuField(examples[opt.
size()], nn,
i, j))
134 #ifdef GECODE_HAS_SET_VARS 137 for (
int b=0;
b<
n;
b++) {
144 for (
int i=0; i<
n; i++)
145 for (
int j=0; j<
n; j++) {
147 for (
int k=0; k<
n; k++) {
152 bc1[b1c] = bc1s[
count];
153 br1[b1c] = br1s[
count];
161 bc2[b2c] = bc2s[
count];
162 br2[b2c] = br2s[
count];
167 same(*
this, nn, bc1, bc2);
168 same(*
this, nn, br1, br2);
175 }
else if (opt.
branching() == BRANCH_SIZE) {
177 }
else if (opt.
branching() == BRANCH_SIZE_DEGREE) {
179 }
else if (opt.
branching() == BRANCH_SIZE_AFC) {
181 }
else if (opt.
branching() == BRANCH_AFC) {
201 for (
int i = 0;
i<
n*
n*
n*
n;
i++) {
206 os << (char)(x[
i].val()+
'A'-10) <<
" ";
211 os << std::endl <<
" ";
216 #ifdef GECODE_HAS_SET_VARS 228 return m.
slice(bc*
n+i, bc*
n+i+1, j*
n, (j+1)*n);
234 return m.
slice(j*
n, (j+1)*n, br*n+i, br*n+i+1);
239 #ifdef GECODE_HAS_SET_VARS 254 static_cast<unsigned int>(
n*
n),static_cast<unsigned int>(
n*
n)) {
264 int* dsc = r.
alloc<
int>(nn);
265 for (
int i=0;
i<nn;
i++) {
268 for (
int j=0; j<nn; j++) {
275 int* dsb_arr = r.
alloc<
int>(nn);
276 for (
int i=0;
i<
n;
i++) {
277 for (
int j=0; j<
n; j++) {
279 for (
int ii=0; ii<
n; ii++) {
280 for (
int jj=0; jj<
n; jj++) {
281 dsb_arr[ii*n+jj] = j*nn*n+
i*n+jj*nn+ii+1;
284 block[
i*n+j] =
IntSet(dsb_arr, nn);
294 for (
int i=0;
i<nn;
i++)
295 for (
int j=0; j<nn; j++) {
305 for (
int i=0;
i<nn;
i++)
306 for (
int j=0; j<nn; j++)
307 if (
int idx = sudokuField(examples[opt.
size()], nn,
i, j))
312 }
else if (opt.
branching() == BRANCH_SIZE) {
314 }
else if (opt.
branching() == BRANCH_SIZE_DEGREE) {
316 }
else if (opt.
branching() == BRANCH_SIZE_AFC) {
318 }
else if (opt.
branching() == BRANCH_AFC) {
338 for (
int i = 0;
i<
n*
n*
n*
n;
i++) {
339 for (
int j=0; j<n*
n; j++) {
340 if (y[j].contains(
i+1)) {
344 os << (char)(j+1+
'A'-10) <<
" ";
349 os << std::endl <<
'\t';
370 SetVar dummySet0(*
this, is0, is0);
371 IntVar dummyInt0(*
this, 0, 0);
374 for (
int i=0;
i<nn;
i++)
378 for (
int i=0;
i<nn*nn;
i++)
415 #ifdef GECODE_HAS_SET_VARS 420 "use both integer and set constraints");
424 "additional \"same\" constraint for integer model");
432 opt.
parse(argc,argv);
433 if (opt.
size() >= n_examples) {
434 std::cerr <<
"Error: size must be between 0 and " 435 << n_examples-1 << std::endl;
438 #ifdef GECODE_HAS_SET_VARS 439 switch (opt.
model()) {
441 Script::run<SudokuInt,DFS,SizeOptions>(
opt);
444 Script::run<SudokuSet,DFS,SizeOptions>(
opt);
447 Script::run<SudokuMixed,DFS,SizeOptions>(
opt);
451 Script::run<SudokuInt,DFS,SizeOptions>(
opt);
468 const char* examples[] = {
675 "...G...9..4.....6F..L8..." 676 "CEIN.HDM.OF.1L..A..9PJ.4." 677 ".....A...L..JBN.2.D.1...H" 678 "P49...JB23.AD..7E..C5F..." 679 "A1H....F.N5....I.BL...26." 680 "....7..C.6...H4B..1....I5" 681 ".F.P...I..B..7.5.L...9..." 682 ".L6A...5OF.8P...K.NE..734" 683 "B2.E..L...1J.5....O7.K.AP" 684 "O.5.CB1.P....3EM....2L.H." 685 "2..MJ.A...9.3.7......P.8C" 686 ".....CF.DPG62N.E...OH.M.J" 687 ".DL..OM..IE.B8..NH...3..K" 688 ".CO1F.B.N.AH..P.78.JE...D" 689 "E..6.....H......4M.KIB9.." 690 "N.J..6......C..1.5.G..H.." 691 "...75LG...6..1..CI..4.E.." 692 "9K..6.....HGN.O2P.4......" 693 ".OA..IP849...2.K3...7GN.." 694 "..G....N...P.D9....A...C1" 695 "J...M.NAFE.4..23.7....8L." 696 ".....J.H9CD1LP..GO....4ME" 697 "48NK..5.M......JL.......9" 698 ".I.OG....835.A.DH..P....." 699 "35......L.J..E....8IG.67B" 702 ".N..JG..O7591...8I....L.." 703 "FG.M.B8...P.E...CJ..H...." 704 "...........G.4.H.D.O.NJA2" 705 ".....J.EN4.L6MA.B.2......" 706 "HE..2..DC.....F4KMA.B.9O8" 707 "M....62...47C19......E5.." 708 ".I2.8M.JGL...ADN..K..3.F7" 709 "..H3.5..89....I.J.....NL." 710 "1B..9.FAP.6.N....537.H..O" 711 "......1..N...O...LC.68.PG" 712 "KOA.FNBH.....7.C.....M..6" 713 "45.ECP.I..N.F.J1...MK.79." 714 "I.L..8.O..9.P...A...2.1J." 715 "..621.D.M.....B8LG..P..CH" 716 ".HP.N7E.L1....3..B..O.G45" 717 "....BIO....5.C.P...FN48E." 718 "...FL.....2.DH..17..59O.." 719 "..I.MF..2G.N...A6O.HC.PB." 720 "72.1..L...IM.96E.45G....." 721 "..9...7M..A.O...I...L...." 722 ".C.JA.........1.....E.48." 723 "O.BI.......PHL.6..1....5C" 724 "G6M...N4FI8...K..H.E....." 725 ".L..4.917....BE.G8F.M.I.." 726 "8F......5.O3..4...9.....K" 729 "5.PC..7..J..I...3..H.M.2L" 730 "H.......F..DA..N.G...9..P" 731 "...3LCP2.54.71.B....J.8.." 732 "76M8...3A...H..C.D.FO...." 733 "...DK..GI..B.L.6.8.14...." 734 "A......M....D.6.N.P....O2" 735 "...E5BLF..92..3AJC..6I..." 736 ".PNJ.6..E7A.8..IM.OL1.G.C" 737 ".L3...O.N.5.KI.46.....9E." 738 ".I.G.A..28.MBP...E..HJ3.7" 739 "J.74.L..D1O96.A3.M...GI.." 740 "E...1...K....J...P6.7.C.9" 741 "8M..A9JO.F.P..1...4.E3N6." 742 "...I.3.7.......EL.CD..H.." 743 "....DE2..P...N.........K." 744 ".O.7.FKI1..GJ.N.....9.P8." 745 ".89..H..BNM73D.KFJ..I.6.A" 746 "PDBN...9M..C.....O.6..7.." 747 ".F.K...4..LA9B..C.E75..GN" 748 "G.A.....7.8.....H....O.3." 749 "B...C...4......8K.3.P...." 750 "DHE5..FA...J.3..B.2.KC.98" 751 "...F...5....N..J9......I." 752 ".J...P..O.BK....I.M.3..5." 753 "9...8.B.6.D.M.I..H.5G.J4." 756 "..6F.....5..3.....H..A.M2" 757 ".....3....I8.A.MC.KJ.LNG." 758 ".I.7N..K.2..6...3D..B.O85" 759 ".3A.PF.D8OBK7.2....L6.9H4" 760 ".K..CBML.....O.A8.G4.D..." 761 "1.4.AGL..M5..F.O.9....P2." 762 "..I.........8......N4E..." 763 "J.C8.1.6.3.LO.K7AG2P9.H.." 764 ".2.3BH..9.A...G......O..L" 765 ".H..M8.J.....NI1.LEF....B" 766 "I5..4.....G.27..K..3.M..H" 767 "P..E..I.A..3B.8....G.2..." 768 "AJ......NFK.I.O9476..G.1." 769 ".976...E3H....M5.F......O" 770 ".F.M3.5.GKC4.HJ.N.....ID7" 771 "..L1K..9.J37.ID..B..E6..." 772 ".82OH.1..PNML...E..C...J." 773 "....JLFN.B..G..6M..H..D.9" 774 "...C.A...I.6.......K.5..." 775 "E.G.I.....O....J.8F......" 776 "..M4..9.D.7.K.FE.3O......" 777 "H.N.....14E..B3L..8I...AG" 778 "K.O.62.PM...N..H...18C.9." 779 "LC..8.3...2...H.G...J..4E" 780 ".B..9NK.E....C6.P.4D.71OI" 783 "A..F.N......M28DC.LI7..OJ" 784 "..B...D.M.6....9.....2A.." 785 ".2..I.56.B...J.MEH......." 786 "O7...HE...BA..G2........L" 787 ".H6J.2...G.7NDP.A...8..C." 788 ".PN35..B..869.2.GA..K.C.." 789 "....EM13OD.N...49K...7..." 790 "9G..C....IJF5.B..7.3....." 791 "HD.....JN....7...EF....9." 792 "1.OA..G.KL....H..B.CP...." 793 "..CE.......2..9I....3...." 794 "FJ..83P.E..K7.NL15H..I2.." 795 ".4..GJ...6DIB...P...AHL.C" 796 ".1I.2.M....83.F..4.NBE..." 797 "L3M.OD.H.AG..4.....69...F" 798 ".8...5H.3.....M...D..K..4" 799 "3..4..AEDO7J...5..9..G1.." 800 "..2N9.8F.P.OIGC.L6..E.H.." 801 "C...1.7..K.L6.4EO.8.5...N" 802 ".IG.H..M..E...1A2N4..8.F." 803 "6..5J..N1...2..H.IGA...P8" 804 ".L...O...H...C....M5G..A." 805 "..F...3C.7.P..5N..B..DMH9" 806 "291D..6..M..H.7.3.J.N..B." 807 "....MK..29F.G.DO4...6.E35" 810 "....B12O3..D..F..KPL.E4.7" 811 "1M..GL..H..K.A.....39.P.." 812 ".8.3.4.....7..6.F.....CK." 813 "P.O...758.2..MC.....1L.A." 814 "...HFK6.A..8...9B...2...J" 815 "91.KJE..L.5O..GD.....4..." 816 ".I..3..D.2.....C4MLAK..N." 817 ".4..6IA.P7.....B9......3." 818 "M.F...4.J...8....N.H.1G7." 819 "..5P.N.....C.731.I.E.9A.." 820 ".....GO.KDL......BA......" 821 ".3A..F...9..K.EI5.7..6.DN" 822 ".G.54.L.....PH..3F6....2." 823 "....P.....G..2D.OH.1B...C" 824 "6.EM.7N....3.B4..DC..K1P." 825 "B.9.....I..5N...7OGK...46" 826 "OF.GD6HP..JM..BA8.I.C...." 827 "8.L7...........P.3M5...92" 828 ".EM.....45IF7....2.CJ8DL." 829 ".6.4.8..NA.2......9....GI" 830 "2..A1DCN..3G.F5.L..I..O6H" 831 "..BIO..1.H.L...G........." 832 "C.P.....M8.9O..5A..N.JK.D" 833 "H...N...FOA4..73....5..CM" 834 ".D4..3...6BE..N.2JH8..L.." 837 "LJ.FH2...K....359.E.B6.N." 838 "...EML1FC.PJ.A.8I....2.K4" 839 "9........G1..6..K...PAL3C" 840 "P...C34..8.N7.........DE." 841 "...7....E..IO...124.J5.F." 842 ".8.L.PA.2..31FG....N..C.I" 843 "F.G......M........2.K..1." 844 "....2KH6.JOD..9.L..G...B." 845 ".6O3..G...4.NJ.H.PB...5.9" 846 "I...K..LBN...E.76.A....8." 847 "D.B.L......8.3.C.KM.6...." 848 ".C593.I.N4.26MB..1..L.K.." 849 "M.F6......DA45.9..N.I3..B" 850 ".G..79.H...KJ...4...AN.2." 851 ".KH...BC....LON..7..D.8.F" 852 "2..B...MP....7OEJ4....6.1" 853 ".4....2O.9......N..1....G" 854 ".....G.JF.2..L.6.5......." 855 "C9A.G...H1...PJ..L.3.8.MN" 856 "...1......M.....O.P8.K3J." 857 "...N.HP.K25G3..JC8..1M..." 858 "..2K.FC34.A....N7..9.LB.." 859 "..65DJ..L..C.4.1...BGF..." 860 "OF..E..7.B.......634...D." 861 "G.3..N.I9D7PM8KF2....4..." 864 ".1..I8.P..6.N...BD...3O.." 865 ".9.6...E.M43.8..AK.2J.1.." 866 "...JKL...FA...P.I4...DB.." 867 "E...P.I.B.7.1..J.HC...98." 868 "..5M8GJ.KD.O...N3..1AI..." 869 "K.2C4.M.N..J..I.......H.5" 870 "N..B9O.D...KH6.E...C...7I" 871 "DE..JK4.....L.1B7..68PN2." 872 ".....P...C..F.7...L.O9..." 873 "...35.H......92..M.4.EC.1" 874 "P..IL..H.........1..3.D.." 875 "....B9..8.3I5.C...K...F1." 876 "FH....2O..D.4M.P...A...GC" 877 "JA.......KF.......4.EOMIP" 878 "3.7GNF...A.2OB9C.E5.HJ..." 879 "2.I.1.......AO5.P...K.3.." 880 "..H....L..M.CIJ..7...4..." 881 "GO.9..KF.I.P3...E.HJ...N7" 882 "5.37...B.E...4N..O.8....." 883 "4B...7.9O.HL..E2C3.K51.M." 884 "L.O42...D..AJ.8...GH.N..E" 885 "9M.8.H..LG1..N..5.E..F7B." 886 "......FAC..5M..I6J.B4...G" 887 "...F..82..P.E......36HK.L" 888 "B.J.G5...O.H2..98.7......" 891 ".CNPHK.53.O9F..D.78..J..." 892 "J.....F.DB...7.G..PAE...L" 893 ".6.........5.4A......I..." 894 "A..L.6.E.1JG....5.H.2...9" 895 "..G4..P...E2N.M...C..FB.1" 896 "..PKJ...G41O..C.N..H....." 897 ".M..I5L97J.3H...E2.8...D." 898 "1.4..ON.83G.P.D59..C.BH.." 899 "..2.9.......4.F.3.6..O.7." 900 "3F.7.MEC..5...2..4K.LN8.." 901 "...I........MF7.6AOG..LE." 902 "C1.3..JG..D.9...4..N...68" 903 "...M7L9..NHA...FJ.I..3.C." 904 ".A...P...5...E3.8M..K4OFG" 905 ".....C.6KIP...8..3.DJ...." 906 ".2.J...3C..7.D.9A.EF6L..." 907 "4...3.6N.....L9.H..P8...2" 908 ".9.C.4H.......P....1..FJ3" 909 ".LD.K87.1.BM5AJN....4H.G." 910 ".B..MAI........47O.LD...." 911 ".G....3....F..1..9..M..K6" 912 "P7.A..B8.......2....I.3.." 913 "M..O....9K2..6..1.N.FE.L." 914 "....E...A..N.J.IG8...C.9." 915 "6KL.4...FCI.A.....5J.2D.N" 918 "E..I...M......L....D...BK" 919 "F..BH9.K.A2.7..E4.P.6..M." 920 ".6.J..PD8FE.IM...K...54.." 921 "L...8E...IA..HC........7J" 922 ".....7H.4.JK..DOFC....9I." 923 "9...7A.5.B.M34E.KDJ8....." 924 "8...BD....O..7....CP.E.6." 925 ".1.3..8....D...2.ML.B..5A" 926 ".E2.A.O.7..1..I.659..8LD." 927 "KF..M2...PL......A.G..N3." 928 "...76N.1..CBG...DPK..O.J2" 929 ".JK...6B.9..P.7.N.EMFDG.5" 930 "N....G.F.8....OH9.2...E.7" 931 "....4.3....F9.....5.NC.A." 932 "M.A.GL.J......5..4.7.91.." 933 "C.8NE.5..6..M.....BJ17..H" 934 "7.6...NL.41.AC.I8...GJ3.." 935 "...53P.GM2.L..F.....K.68." 936 "J.4.D..H..IG..8K..35.N.FL" 937 "P.F...93.D.....A.1......M" 938 "..7.I...1...DF..PJ.4.MA.." 939 ".KN.....5H..O.63.E.2....4" 940 "....1...O..A2..DCH8B..KE." 941 "3.HA.6BP.....J1957O..28.." 942 "42JO.I...K5C......6.P.B.." 945 "...G87..O..F.N..CH6..D..2" 946 "C16..N....DL.3.E........." 947 ".LN.EK..D..O.G6.412....5H" 948 "K...2........59M...P..3.." 949 "..A9.M.6....8.E7O3..K..LB" 950 "7..8B.1.EP.....4.L.6.C.9." 951 ".3.6...9.85.A2F.....B.EP." 952 ".D4K.L..NA....C.M.E..7..." 953 "L..P.3H.CG.7....DKF..I6.." 954 "5EH.G.7.6.1....J....D3K.O" 955 ".6.....G.K.E..I2.4J......" 956 "..ICFP.8H7.2.O.B.NM5..G.." 957 ".M..D9..BE..J..F..I7..LAK" 958 ".BE.L...31.M7FK..C9..8.DN" 959 ".2O......D38C...E...F.P.." 960 ".A.....M..NB..3.J.7E8..2." 961 "...O...B..6..C.8KG4..5D7M" 962 "....M8..I..9..AL1.O.3HBNG" 963 ".C..4....L.....D.F......." 964 "J..5NF..G...H..6..C..1..." 965 "D..N..O....G9.J.A..I...8." 966 ".F.H1BN.K.O.4.8.6.3.9.M.." 967 "B...I....9K..6..2...G.H1." 968 "O...7.CJMI25N...HDKBPFAE." 969 ".....28.F..C........O.JK." 972 "9.K..6D.I5...........H..." 973 ".I.E..BK...GN...6.L...3.." 974 "7....2..L8E.K.D1.P5I.6..A" 975 "..N.LEH.A32..CM9........." 976 "..2....9N...3.IC...J.KF8." 977 "......GA..C.7JPNI3....6L." 978 "....E.J.8K..I.....97NG2.B" 979 "O7..3HI...M.....DCF5..914" 980 "L.M.4.3.19.D..2......F.K." 981 "B....F...O9.6ANG.2.PH.E.5" 982 "8KDM...5.1....G......P..6" 983 ".4.H.L.C..J2....G..3ION.." 984 "C.A..J..E...1K......92.5." 985 ".9O.NP.2...IA....H..G..7." 986 "...I5..O.N4.H...2DCKJ...E" 987 "56....1.D..AJ.....7.L.O.." 988 "K.8.H.7.9.5....AC..O..G6F" 989 "3..........O..C.F.P6K.5.." 990 "...OC.4J2.3E.9...N.H7..P1" 991 ".B.7.K.....6.MH.LJ..A...." 992 "I..4.........P..E7D9O.B.H" 993 "E.3G.OP...I1CBL..FN4..82." 994 ".A..9N.8.E...73O..H....4." 995 ".M.C.3....DK..EI......JG." 996 ".HP..D..FB...NO.1KJ8.AL.." 999 "....L.1.8H.CO..P....FA..." 1000 "P1.2.4CO...K..A..3H8...7." 1001 "I..H.G.5.B.6.M..A24.K..9." 1002 "....6I.KF9..5.P.J1.BDCE.M" 1003 ".A....2...F..L..E.M.6.5O3" 1004 "7..1.C...8.L9..4P.5.G.K.." 1005 "JO.5H.M2.I.7.F.6D..A4..NE" 1006 "E.3.NO....K2...LG..7JM..." 1007 ".9F.CJ.H....A.NKB.1..2.5." 1008 "2LB...5..7.P36H.M..N...1D" 1009 ".....P..B....46.HJ......." 1010 "B4..7LI.C.GD2...KA.3H...." 1011 "K5......6J1.........27O8P" 1012 "LP...5K.G..JB3.......1.M." 1013 "..EG...4.F.NKC...O..9.B.." 1014 "..MI...D32AGP..5O...74.BN" 1015 "FC74.....1..LO..8...5.D.J" 1016 "..JN....H...E.I...DPA3.6." 1017 "AE.......O3F..5.........H" 1018 "...8..6......24.9G....I.1" 1019 ".M....8.9..O1.F.C.EL3...A" 1020 ".N...E.3.....I7M1...ODG.K" 1021 "1......P.N9..D..5........" 1022 ".I.P..FGOCMA.......J.5..2" 1023 ".GK....7...3.....92..B.L4" 1026 "...H....GKM.43..B.D......" 1027 "15I.C....8B.6D.7G....A.H4" 1028 ".7...F..B...J.E16.N....3." 1029 "...D.1...6L7.H.5K....P98F" 1030 "KJ.AF.5CHO...NP2M.....B.." 1031 "4..K..I9.M.DNP..A.3..E5O6" 1032 "PGC...HE.....I5..M...7..J" 1033 ".B.EJ..G.5..L....D.48.2.." 1034 ".D....N.4.J.2A..H..5..F1." 1035 "8....AJLD.7..OM...1B....P" 1036 "CH...N..7.........B3....." 1037 "I..O.JL..P5...3......KH.8" 1038 "D.259.E......6.......L3.." 1039 "...3K6.B.AE..74N25H..G1.." 1040 ".L.B..41.HC...G.OIP8..MN7" 1041 ".........2.C.4.L....69.I5" 1042 "N...7.C...69.5.A......PKL" 1043 "....L.G...13.BOMP.82..D7H" 1044 "...C.H..5.P.E.K...I7....." 1045 "JO..P.96ABI8.....C..N..4G" 1046 ".NA8H.32..O4..IB..L9G..J." 1047 "..4.GD..M.3..27INJ.O....." 1048 ".C9L..A..J.....6.2..I..F." 1049 "BK...4..F.A.CL..87.1.O.M." 1050 "6..P.I.5...M..N....F....D" 1053 ".6OL.3GB.I.1F.EP..9..24.." 1054 "..1.P.....K....N.2.....ID" 1055 "2.8.K7..J...6..1F.......A" 1056 "...D.8.4..29..LJ7.HMKPF.." 1057 "..I.9N...A..P.M.DK...E5.." 1058 "94.N...5..F..E.C182..BG3." 1059 "8D..3HC....6G.....P.F.72I" 1060 "C..I.E.7D....8BG.F...6..." 1061 "......L....N.24..I..1K.DJ" 1062 ".27HG.NF......I..L..E.A.." 1063 "L...N.I8F6.H.9K.3O..B..5P" 1064 ".9...L..25.B14F.N.JE...7K" 1065 ".1...9B....GJ.8.A.5C....." 1066 "....CPK..J....5.M.7.6.H.3" 1067 "..F7..3..O..N..B8....421." 1068 "AM.8....P...71..26N...3G." 1069 "P....D.2.78.O..5CJ.GA.BH." 1070 "6..4.F...3...K9A..1...J.M" 1071 ".I2.E......JM.N...B98..P." 1072 "FC..7..6.EI.D.G...3H5..KN" 1073 "I8NO.4F.9..DB....5......." 1074 "5..1...G3.MIH.A.9..N....." 1075 "KG.62..1.....L3.....IJE.F" 1076 "....D.6.AC4.9.....OL.HP.." 1077 "..EA.5O.L.6.......D...9N." 1080 ".CH3.L..D4F..I.........1." 1081 "G..K.....7.O.......L.42N." 1082 "A.D...5O8B...39G.4..I...L" 1083 "1E2OB....A8N..6FCD9.H...G" 1084 "IN..4..3.....J..5OM....9." 1085 "...JEMP..9G8..D7......BA." 1086 "B.M9..L....6...2.FI.KJ..." 1087 ".LN.386A..BH....O.J.2..7." 1088 "7A6..2..3N.....4KP..G8HIC" 1089 ".1.....J.CK3....HB..5L4.." 1090 ".H......P.I.57....G..21B4" 1091 "....7.....EP1....3.2..A.." 1092 ".59.1FI.L8.MJG.B..AH....E" 1093 "NI..D....O3K..A.P9..8F..." 1094 ".O....A..E2.8.HN.J7.P...." 1095 ".MC..P....H2...A7..ID...1" 1096 ".6.....M.J.14.BDG.3.O9F2." 1097 ".......CG.........4...M.." 1098 "HDL...8N7.......FK2C.E..B" 1099 "..KP2I.F.3...N7J.E.6..L85" 1100 "D.E...C.4.7B..I....A.1..M" 1101 "J..M..7..D.A..4...ONBG..2" 1102 "9.7.6..K..P..O....D...8.." 1103 ".2IN..GE1.D..8...MK.CPJH." 1104 "FG..8B.2.L..KH.....1.5E..",
2208 "BNDAJG62O7591KHF8IP34CLME" 2209 "FG.M.B8...P.E...CJ..H...." 2210 "...........G.4.H.D.O.NJA2" 2211 ".....J.EN4.L6MA.B.2......" 2212 "HE..2..DC.....F4KMA.B.9O8" 2213 "M....62...47C19......E5.." 2214 ".I2.8M.JGL...ADN..K..3.F7" 2215 "..H3.5..89....I.J.....NL." 2216 "1B..9.FAP.6.N....537.H..O" 2217 "......1..N...O...LC.68.PG" 2218 "KOA.FNBH.....7.C.....M..6" 2219 "45.ECP.I..N.F.J1...MK.79." 2220 "I.L..8.O..9.P...A...2.1J." 2221 "..621.D.M.....B8LG..P..CH" 2222 ".HP.N7E.L1....3..B..O.G45" 2223 "....BIO....5.C.P...FN48E." 2224 "...FL.....2.DH..17..59O.." 2225 "..I.MF..2G.N...A6O.HC.PB." 2226 "72.1..L...IM.96E.45G....." 2227 "..9...7M..A.O...I...L...." 2228 ".C.JA.........1.....E.48." 2229 "O.BI.......PHL.6..1....5C" 2230 "G6M...N4FI8...K..H.E....." 2231 ".L..4.917....BE.G8F.M.I.." 2232 "8F......5.O3..4...9.....K",
2235 ".ND.JG6.O7591..F8IP.4.LM." 2236 "FG.M.B8...P.E...CJ..H...." 2237 "...........G.4.H.D.O.NJA2" 2238 ".....J.EN4.L6MA.B.2......" 2239 "HE..2..DC.....F4KMA.B.9O8" 2240 "M....62...47C19......E5.." 2241 ".I2.8M.JGL...ADN..K..3.F7" 2242 "..H3.5..89....I.J.....NL." 2243 "1B..9.FAP.6.N....537.H..O" 2244 "......1..N...O...LC.68.PG" 2245 "KOA.FNBH.....7.C.....M..6" 2246 "45.ECP.I..N.F.J1...MK.79." 2247 "I.L..8.O..9.P...A...2.1J." 2248 "..621.D.M.....B8LG..P..CH" 2249 ".HP.N7E.L1....3..B..O.G45" 2250 "....BIO....5.C.P...FN48E." 2251 "...FL.....2.DH..17..59O.." 2252 "..I.MF..2G.N...A6O.HC.PB." 2253 "72.1..L...IM.96E.45G....." 2254 "..9...7M..A.O...I...L...." 2255 ".C.JA.........1.....E.48." 2256 "O.BI.......PHL.6..1....5C" 2257 "G6M...N4FI8...K..H.E....." 2258 ".L..4.917....BE.G8F.M.I.." 2259 "8F......5.O3..4...9.....K" 2263 const unsigned int n_examples =
sizeof(examples)/
sizeof(
char*);
2267 int l = std::strlen(s);
2269 assert(res*res*res*res == l);
2275 assert(example_size(s) ==
std::sqrt(static_cast<float>(n)));
2276 assert(i >= 0 && i < n);
2277 assert(j >= 0 && j < n);
2278 char c = s[j*n +
i];
2279 if (!std::isalnum(c))
2281 if (std::isdigit(c))
2283 if (std::islower(c))
2284 c =
static_cast<char>(std::toupper(c));
2286 int res = (c -
'A') + 10;
2287 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.