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