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 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;
287 block[
i*n+j] =
IntSet(dsb_arr, nn);
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))
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");
435 opt.
parse(argc,argv);
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 442 switch (opt.
model()) {
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;
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.
Use "same" constraint with integer model.
Options for scripts with additional size parameter
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)
No additional constraints.
Use both integer and set constraints.
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.
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.
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.
struct Gecode::@519::NNF::@60::@62 a
For atomic nodes.
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.
union Gecode::@519::NNF::@60 u
Union depending on nodetype t.
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.
virtual void print(std::ostream &os) const
Print solution.
Use lexicographic ordering.
void values(Home home, const IntVarArgs &x, IntSet y, IntConLevel icl=ICL_DEF)
Post constraint .
struct Gecode::@519::NNF::@60::@61 b
For binary nodes (and, or, eqv)
Node * x
Pointer to corresponding Boolean expression node.
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...
Use minimum size over afc.
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.
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.
Use minimum size over degree.
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.
Domain propagation or consistency.
SudokuInt(bool share, SudokuInt &s)
Constructor for cloning s.