% Nonogram problem from Gecode: P200 % http://www.gecode.org/gecode-doc-latest/classNonogram.html % This is the hardest problem... % lazy: % % ROW RULES % row_max = 25; row_states = array2d(1..row_total_states, 1..2, [ % pattern 0,0,0,0,2,2,3, % tmp: dummy 0 1 1 0 1 1 0 1 1 1 0 1,2, 0,3, 4,0, 4,5, 0,6, 7,0, 7,8, 0,9, 0,10, 10,0, % pattern 0,0,4,1,1,1,4, % tmp: dummy 0 1 1 1 1 0 1 0 1 0 1 0 1 1 1 1 0 1,2, 0,3, 0,4, 0,5, 6,0, 6,7, 8,0, 8,9, 10,0, 10,11, 12,0, 12,13, 0,14, 0,15, 0,16, 16,0, % pattern 0,0,4,1,2,1,1, % tmp: dummy 0 1 1 1 1 0 1 0 1 1 0 1 0 1 0 1,2, 0,3, 0,4, 0,5, 6,0, 6,7, 8,0, 8,9, 0,10, 11,0, 11,12, 13,0, 13,14, 14,0, % pattern 4,1,1,1,1,1,1, % tmp: dummy 0 1 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1,2, 0,3, 0,4, 0,5, 6,0, 6,7, 8,0, 8,9, 10,0, 10,11, 12,0, 12,13, 14,0, 14,15, 16,0, 16,17, 17,0, % pattern 0,2,1,1,2,3,5, % tmp: dummy 0 1 1 0 1 0 1 0 1 1 0 1 1 1 0 1 1 1 1 1 0 1,2, 0,3, 4,0, 4,5, 6,0, 6,7, 8,0, 8,9, 0,10, 11,0, 11,12, 0,13, 0,14, 15,0, 15,16, 0,17, 0,18, 0,19, 0,20, 20,0, % pattern 0,1,1,1,1,2,1, % tmp: dummy 0 1 0 1 0 1 0 1 0 1 1 0 1 0 1,2, 3,0, 3,4, 5,0, 5,6, 7,0, 7,8, 9,0, 9,10, 0,11, 12,0, 12,13, 13,0, % pattern 0,0,3,1,5,1,2, % tmp: dummy 0 1 1 1 0 1 0 1 1 1 1 1 0 1 0 1 1 0 1,2, 0,3, 0,4, 5,0, 5,6, 7,0, 7,8, 0,9, 0,10, 0,11, 0,12, 13,0, 13,14, 15,0, 15,16, 0,17, 17,0, % pattern 0,3,2,2,1,2,2, % tmp: dummy 0 1 1 1 0 1 1 0 1 1 0 1 0 1 1 0 1 1 0 1,2, 0,3, 0,4, 5,0, 5,6, 0,7, 8,0, 8,9, 0,10, 11,0, 11,12, 13,0, 13,14, 0,15, 16,0, 16,17, 0,18, 18,0, % pattern 2,1,4,1,1,1,1, % tmp: dummy 0 1 1 0 1 0 1 1 1 1 0 1 0 1 0 1 0 1 0 1,2, 0,3, 4,0, 4,5, 6,0, 6,7, 0,8, 0,9, 0,10, 11,0, 11,12, 13,0, 13,14, 15,0, 15,16, 17,0, 17,18, 18,0, % pattern 0,2,2,1,2,1,2, % tmp: dummy 0 1 1 0 1 1 0 1 0 1 1 0 1 0 1 1 0 1,2, 0,3, 4,0, 4,5, 0,6, 7,0, 7,8, 9,0, 9,10, 0,11, 12,0, 12,13, 14,0, 14,15, 0,16, 16,0, % pattern 0,1,1,1,3,2,3, % tmp: dummy 0 1 0 1 0 1 0 1 1 1 0 1 1 0 1 1 1 0 1,2, 3,0, 3,4, 5,0, 5,6, 7,0, 7,8, 0,9, 0,10, 11,0, 11,12, 0,13, 14,0, 14,15, 0,16, 0,17, 17,0, % pattern 0,0,1,1,2,7,3, % tmp: dummy 0 1 0 1 0 1 1 0 1 1 1 1 1 1 1 0 1 1 1 0 1,2, 3,0, 3,4, 5,0, 5,6, 0,7, 8,0, 8,9, 0,10, 0,11, 0,12, 0,13, 0,14, 0,15, 16,0, 16,17, 0,18, 0,19, 19,0, % pattern 0,0,1,2,2,1,5, % tmp: dummy 0 1 0 1 1 0 1 1 0 1 0 1 1 1 1 1 0 1,2, 3,0, 3,4, 0,5, 6,0, 6,7, 0,8, 9,0, 9,10, 11,0, 11,12, 0,13, 0,14, 0,15, 0,16, 16,0, % pattern 0,0,3,2,2,1,2, % tmp: dummy 0 1 1 1 0 1 1 0 1 1 0 1 0 1 1 0 1,2, 0,3, 0,4, 5,0, 5,6, 0,7, 8,0, 8,9, 0,10, 11,0, 11,12, 13,0, 13,14, 0,15, 15,0, % pattern 0,0,0,3,2,1,2, % tmp: dummy 0 1 1 1 0 1 1 0 1 0 1 1 0 1,2, 0,3, 0,4, 5,0, 5,6, 0,7, 8,0, 8,9, 10,0, 10,11, 0,12, 12,0, % pattern 0,0,0,0,5,1,2, % tmp: dummy 0 1 1 1 1 1 0 1 0 1 1 0 1,2, 0,3, 0,4, 0,5, 0,6, 7,0, 7,8, 9,0, 9,10, 0,11, 11,0, % pattern 0,0,0,2,2,1,2, % tmp: dummy 0 1 1 0 1 1 0 1 0 1 1 0 1,2, 0,3, 4,0, 4,5, 0,6, 7,0, 7,8, 9,0, 9,10, 0,11, 11,0, % pattern 0,0,0,4,2,1,2, % tmp: dummy 0 1 1 1 1 0 1 1 0 1 0 1 1 0 1,2, 0,3, 0,4, 0,5, 6,0, 6,7, 0,8, 9,0, 9,10, 11,0, 11,12, 0,13, 13,0, % pattern 0,0,0,6,2,3,2, % tmp: dummy 0 1 1 1 1 1 1 0 1 1 0 1 1 1 0 1 1 0 1,2, 0,3, 0,4, 0,5, 0,6, 0,7, 8,0, 8,9, 0,10, 11,0, 11,12, 0,13, 0,14, 15,0, 15,16, 0,17, 17,0, % pattern 0,0,0,7,4,3,2, % tmp: dummy 0 1 1 1 1 1 1 1 0 1 1 1 1 0 1 1 1 0 1 1 0 1,2, 0,3, 0,4, 0,5, 0,6, 0,7, 0,8, 9,0, 9,10, 0,11, 0,12, 0,13, 14,0, 14,15, 0,16, 0,17, 18,0, 18,19, 0,20, 20,0, % pattern 0,0,0,0,7,4,4, % tmp: dummy 0 1 1 1 1 1 1 1 0 1 1 1 1 0 1 1 1 1 0 1,2, 0,3, 0,4, 0,5, 0,6, 0,7, 0,8, 9,0, 9,10, 0,11, 0,12, 0,13, 14,0, 14,15, 0,16, 0,17, 0,18, 18,0, % pattern 0,0,0,0,7,1,4, % tmp: dummy 0 1 1 1 1 1 1 1 0 1 0 1 1 1 1 0 1,2, 0,3, 0,4, 0,5, 0,6, 0,7, 0,8, 9,0, 9,10, 11,0, 11,12, 0,13, 0,14, 0,15, 15,0, % pattern 0,0,0,0,6,1,4, % tmp: dummy 0 1 1 1 1 1 1 0 1 0 1 1 1 1 0 1,2, 0,3, 0,4, 0,5, 0,6, 0,7, 8,0, 8,9, 10,0, 10,11, 0,12, 0,13, 0,14, 14,0, % pattern 0,0,0,0,4,2,2, % tmp: dummy 0 1 1 1 1 0 1 1 0 1 1 0 1,2, 0,3, 0,4, 0,5, 6,0, 6,7, 0,8, 9,0, 9,10, 0,11, 11,0, % pattern 0,0,0,0,0,2,1 % tmp: dummy 0 1 1 0 1 1,2, 0,3, 4,0, 4,5, 5,0, ]); row_max_state = 20; row_total_states = 373; row_num_patterns = 25; row_num_states = [10,16,14,17,20,13,17,18,18,16,17,19,16,15,12,11,11,13,17,20,18,15,14,11,5]; % this is also the final state row_start_where = [1,11,27,41,58,78,91,108,126,144,160,177,196,212,227,239,250,261,274,291,311,329,344,358,369]; % % COL_RULES: % col_max = 25; col_states = array2d(1..col_total_states, 1..2, [ % pattern 0,0,1,1,2,2, % tmp: dummy 0 1 0 1 0 1 1 0 1 1 0 1,2, 3,0, 3,4, 5,0, 5,6, 0,7, 8,0, 8,9, 0,10, 10,0, % pattern 0,0,0,5,5,7, % tmp: dummy 0 1 1 1 1 1 0 1 1 1 1 1 0 1 1 1 1 1 1 1 0 1,2, 0,3, 0,4, 0,5, 0,6, 7,0, 7,8, 0,9, 0,10, 0,11, 0,12, 13,0, 13,14, 0,15, 0,16, 0,17, 0,18, 0,19, 0,20, 20,0, % pattern 0,0,5,2,2,9, % tmp: dummy 0 1 1 1 1 1 0 1 1 0 1 1 0 1 1 1 1 1 1 1 1 1 0 1,2, 0,3, 0,4, 0,5, 0,6, 7,0, 7,8, 0,9, 10,0, 10,11, 0,12, 13,0, 13,14, 0,15, 0,16, 0,17, 0,18, 0,19, 0,20, 0,21, 0,22, 22,0, % pattern 0,0,3,2,3,9, % tmp: dummy 0 1 1 1 0 1 1 0 1 1 1 0 1 1 1 1 1 1 1 1 1 0 1,2, 0,3, 0,4, 5,0, 5,6, 0,7, 8,0, 8,9, 0,10, 0,11, 12,0, 12,13, 0,14, 0,15, 0,16, 0,17, 0,18, 0,19, 0,20, 0,21, 21,0, % pattern 0,1,1,3,2,7, % tmp: dummy 0 1 0 1 0 1 1 1 0 1 1 0 1 1 1 1 1 1 1 0 1,2, 3,0, 3,4, 5,0, 5,6, 0,7, 0,8, 9,0, 9,10, 0,11, 12,0, 12,13, 0,14, 0,15, 0,16, 0,17, 0,18, 0,19, 19,0, % pattern 0,0,0,3,1,5, % tmp: dummy 0 1 1 1 0 1 0 1 1 1 1 1 0 1,2, 0,3, 0,4, 5,0, 5,6, 7,0, 7,8, 0,9, 0,10, 0,11, 0,12, 12,0, % pattern 0,7,1,1,1,3, % tmp: dummy 0 1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 1 1 0 1,2, 0,3, 0,4, 0,5, 0,6, 0,7, 0,8, 9,0, 9,10, 11,0, 11,12, 13,0, 13,14, 15,0, 15,16, 0,17, 0,18, 18,0, % pattern 1,2,1,1,2,1, % tmp: dummy 0 1 0 1 1 0 1 0 1 0 1 1 0 1 0 1,2, 3,0, 3,4, 0,5, 6,0, 6,7, 8,0, 8,9, 10,0, 10,11, 0,12, 13,0, 13,14, 14,0, % pattern 0,0,0,4,2,4, % tmp: dummy 0 1 1 1 1 0 1 1 0 1 1 1 1 0 1,2, 0,3, 0,4, 0,5, 6,0, 6,7, 0,8, 9,0, 9,10, 0,11, 0,12, 0,13, 13,0, % pattern 0,0,1,2,2,2, % tmp: dummy 0 1 0 1 1 0 1 1 0 1 1 0 1,2, 3,0, 3,4, 0,5, 6,0, 6,7, 0,8, 9,0, 9,10, 0,11, 11,0, % pattern 0,0,0,4,6,2, % tmp: dummy 0 1 1 1 1 0 1 1 1 1 1 1 0 1 1 0 1,2, 0,3, 0,4, 0,5, 6,0, 6,7, 0,8, 0,9, 0,10, 0,11, 0,12, 13,0, 13,14, 0,15, 15,0, % pattern 0,0,1,2,2,1, % tmp: dummy 0 1 0 1 1 0 1 1 0 1 0 1,2, 3,0, 3,4, 0,5, 6,0, 6,7, 0,8, 9,0, 9,10, 10,0, % pattern 0,0,3,3,2,1, % tmp: dummy 0 1 1 1 0 1 1 1 0 1 1 0 1 0 1,2, 0,3, 0,4, 5,0, 5,6, 0,7, 0,8, 9,0, 9,10, 0,11, 12,0, 12,13, 13,0, % pattern 0,0,0,4,1,15, % tmp: dummy 0 1 1 1 1 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1,2, 0,3, 0,4, 0,5, 6,0, 6,7, 8,0, 8,9, 0,10, 0,11, 0,12, 0,13, 0,14, 0,15, 0,16, 0,17, 0,18, 0,19, 0,20, 0,21, 0,22, 0,23, 23,0, % pattern 1,1,1,3,1,1, % tmp: dummy 0 1 0 1 0 1 0 1 1 1 0 1 0 1 0 1,2, 3,0, 3,4, 5,0, 5,6, 7,0, 7,8, 0,9, 0,10, 11,0, 11,12, 13,0, 13,14, 14,0, % pattern 2,1,1,2,2,3, % tmp: dummy 0 1 1 0 1 0 1 0 1 1 0 1 1 0 1 1 1 0 1,2, 0,3, 4,0, 4,5, 6,0, 6,7, 8,0, 8,9, 0,10, 11,0, 11,12, 0,13, 14,0, 14,15, 0,16, 0,17, 17,0, % pattern 0,0,1,4,4,1, % tmp: dummy 0 1 0 1 1 1 1 0 1 1 1 1 0 1 0 1,2, 3,0, 3,4, 0,5, 0,6, 0,7, 8,0, 8,9, 0,10, 0,11, 0,12, 13,0, 13,14, 14,0, % pattern 0,0,1,4,3,2, % tmp: dummy 0 1 0 1 1 1 1 0 1 1 1 0 1 1 0 1,2, 3,0, 3,4, 0,5, 0,6, 0,7, 8,0, 8,9, 0,10, 0,11, 12,0, 12,13, 0,14, 14,0, % pattern 0,0,1,1,2,2, % tmp: dummy 0 1 0 1 0 1 1 0 1 1 0 1,2, 3,0, 3,4, 5,0, 5,6, 0,7, 8,0, 8,9, 0,10, 10,0, % pattern 0,7,2,3,1,1, % tmp: dummy 0 1 1 1 1 1 1 1 0 1 1 0 1 1 1 0 1 0 1 0 1,2, 0,3, 0,4, 0,5, 0,6, 0,7, 0,8, 9,0, 9,10, 0,11, 12,0, 12,13, 0,14, 0,15, 16,0, 16,17, 18,0, 18,19, 19,0, % pattern 0,2,1,1,1,5, % tmp: dummy 0 1 1 0 1 0 1 0 1 0 1 1 1 1 1 0 1,2, 0,3, 4,0, 4,5, 6,0, 6,7, 8,0, 8,9, 10,0, 10,11, 0,12, 0,13, 0,14, 0,15, 15,0, % pattern 0,0,0,1,2,5, % tmp: dummy 0 1 0 1 1 0 1 1 1 1 1 0 1,2, 3,0, 3,4, 0,5, 6,0, 6,7, 0,8, 0,9, 0,10, 0,11, 11,0, % pattern 0,0,1,1,1,3, % tmp: dummy 0 1 0 1 0 1 0 1 1 1 0 1,2, 3,0, 3,4, 5,0, 5,6, 7,0, 7,8, 0,9, 0,10, 10,0, % pattern 0,0,0,4,2,1, % tmp: dummy 0 1 1 1 1 0 1 1 0 1 0 1,2, 0,3, 0,4, 0,5, 6,0, 6,7, 0,8, 9,0, 9,10, 10,0, % pattern 0,0,0,0,0,3 % tmp: dummy 0 1 1 1 1,2, 0,3, 0,4, 4,0, ]); col_num_patterns = 25; col_max_state = 23; col_total_states = 359; col_num_states = [10,20,22,21,19,12,18,14,13,11,15,10,13,23,14,17,14,14,10,19,15,11,10,10,4]; % this is also the final state col_start_where = [1,11,31,53,74,93,105,123,137,150,161,176,186,199,222,236,253,267,281,291,310,325,336,346,356];