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