Пример #1
0
    def test_mandatory_empty_square_between_groups(self):
        nonogram = [[' ', 'X', 'X', 'X'],
                    ['X', ' ', ' ', 'X']]

        keys = {'rows': [[1], [1]],
                'columns': [[1], [1], [1], [2]]}

        self.assertFalse(solution.validate_nonogram(nonogram, keys))
Пример #2
0
    def test_valid_nonogram(self):
        nonogram = [['X', 'X', ' ', ' ', ' '],
                    ['X', 'X', ' ', 'X', ' '],
                    [' ', 'X', ' ', 'X', ' '],
                    [' ', 'X', 'X', 'X', 'X'],
                    [' ', ' ', 'X', 'X', ' ']]

        keys = {'rows': [[2], [2, 1], [1, 1], [4], [2]],
                'columns': [[2], [4], [2], [4], [1]]}

        self.assertTrue(solution.validate_nonogram(nonogram, keys))
Пример #3
0
    def test_valid_nonogram(self):
        nonogram = [['X', 'X', ' ', ' ', ' '], ['X', 'X', ' ', 'X', ' '],
                    [' ', 'X', ' ', 'X', ' '], [' ', 'X', 'X', 'X', 'X'],
                    [' ', ' ', 'X', 'X', ' ']]

        keys = {
            'rows': [[2], [2, 1], [1, 1], [4], [2]],
            'columns': [[2], [4], [2], [4], [1]]
        }

        self.assertTrue(solution.validate_nonogram(nonogram, keys))
 def test_validate_nonogram4(self):
     rows = [[6], [1, 2, 1], [1, 2, 1], [1, 2, 1], [1, 2, 1], [6]]
     cols = [[6], [1, 1], [2, 3], [6], [1, 1], [6]]
     keys = {"rows": rows, "columns": cols}
     nonogram = [
         ["X", "X", "X", "X", "X", "X"],
         ["X", " ", "X", "X", " ", "X"],
         ["X", " ", " ", "X", " ", "X"],
         ["X", " ", "X", "X", " ", "X"],
         ["X", " ", "X", "X", " ", "X"],
         ["X", "X", "X", "X", "X", "X"],
     ]
     self.assertFalse(validate_nonogram(nonogram, keys))
 def test_validate_nonogram3(self):
     rows = [[1, 1, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1]]
     cols = [[1, 1, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1]]
     keys = {"rows": rows, "columns": cols}
     nonogram = [
         ["X", " ", "X", " ", "X", " "],
         [" ", "X", " ", "X", " ", "X"],
         ["X", " ", "X", " ", "X", " "],
         [" ", "X", " ", "X", " ", "X"],
         ["X", " ", "X", " ", "X", " "],
         [" ", "X", " ", "X", " ", "X"],
     ]
     self.assertTrue(validate_nonogram(nonogram, keys))
 def test_validate_nonogram1(self):
     rows = [[4], [6], [3, 2], [3, 1, 1], [3, 3], [5, 1], [8], [10], [7, 3]]
     cols = [[1], [2], [3], [4], [6], [7], [8], [3, 3], [2, 2], [2, 1, 3], [3, 2, 2], [4, 1], [1], [0], [0]]
     keys = {"rows": rows, "columns": cols}
     nonogram = [
         [" ", " ", " ", " ", " ", " ", " ", "X", "X", "X", "X", " ", " ", " ", " "],
         [" ", " ", " ", " ", " ", " ", "X", "X", "X", "X", "X", "X", " ", " ", " "],
         [" ", " ", " ", " ", " ", "X", "X", "X", " ", " ", "X", "X", " ", " ", " "],
         [" ", " ", " ", " ", "X", "X", "X", " ", " ", "X", " ", "X", " ", " ", " "],
         [" ", " ", " ", " ", "X", "X", "X", " ", " ", " ", "X", "X", "X", " ", " "],
         [" ", " ", " ", "X", "X", "X", "X", "X", " ", " ", "X", " ", " ", " ", " "],
         [" ", " ", "X", "X", "X", "X", "X", "X", "X", "X", " ", " ", " ", " ", " "],
         [" ", "X", "X", "X", "X", "X", "X", "X", "X", "X", "X", " ", " ", " ", " "],
         ["X", "X", "X", "X", "X", "X", "X", " ", " ", "X", "X", "X", " ", " ", " "],
     ]
     self.assertTrue(validate_nonogram(nonogram, keys))
Пример #7
0
    def test_python_nonogram(self):
        python_nonogram = [
            [' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X', 'X', 'X', 'X',
             'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', ' ', ' ', ' ', ' ', ' ',
             ' ', ' ', ' ', ' '],
            [' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X', 'X', 'X', 'X', 'X',
             'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', ' ', ' ', ' ', ' ',
             ' ', ' ', ' ', ' '],
            [' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X', 'X', 'X', ' ', ' ', 'X',
             'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', ' ', ' ', ' ',
             ' ', ' ', ' ', ' '],
            [' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X', 'X', 'X', ' ', ' ', 'X',
             'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', ' ', ' ', ' ',
             ' ', ' ', ' ', ' '],
            [' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X', 'X', 'X', 'X', 'X', 'X',
             'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', ' ', ' ', ' ',
             ' ', ' ', ' ', ' '],
            [' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X', 'X', 'X', 'X', 'X', 'X',
             'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', ' ', ' ', ' ',
             ' ', ' ', ' ', ' '],
            [' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X', 'X', 'X', 'X', 'X', 'X',
             'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', ' ', ' ', ' ',
             ' ', ' ', ' ', ' '],
            [' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
             ' ', ' ', ' ', 'X', 'X', 'X', 'X', 'X', 'X', 'X', ' ', ' ', ' ',
             ' ', ' ', ' ', ' '],
            [' ', ' ', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X',
             'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X',
             'X', 'X', ' ', ' '],
            [' ', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X',
             'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', ' ', ' ', ' ',
             ' ', ' ', 'X', ' '],
            ['X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X',
             'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', ' ', ' ', ' ',
             ' ', ' ', ' ', 'X'],
            ['X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X',
             'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', ' ', ' ', ' ',
             ' ', ' ', ' ', 'X'],
            ['X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X',
             'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', ' ', ' ', ' ',
             ' ', ' ', ' ', 'X'],
            ['X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X',
             'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', ' ', ' ', ' ', ' ',
             ' ', ' ', ' ', 'X'],
            ['X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X',
             'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', ' ', ' ', ' ', ' ', ' ',
             ' ', ' ', ' ', 'X'],
            ['X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', ' ', ' ', ' ', ' ', ' ',
             ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
             ' ', ' ', ' ', 'X'],
            ['X', 'X', 'X', 'X', 'X', 'X', 'X', ' ', ' ', ' ', ' ', ' ', ' ',
             ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
             ' ', ' ', ' ', 'X'],
            ['X', 'X', 'X', 'X', 'X', 'X', 'X', ' ', ' ', ' ', ' ', ' ', ' ',
             ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
             ' ', ' ', ' ', 'X'],
            ['X', 'X', 'X', 'X', 'X', 'X', 'X', ' ', ' ', ' ', ' ', ' ', ' ',
             ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
             ' ', ' ', ' ', 'X'],
            ['X', 'X', 'X', 'X', 'X', 'X', 'X', ' ', ' ', ' ', ' ', ' ', ' ',
             ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
             ' ', ' ', ' ', 'X'],
            [' ', 'X', 'X', 'X', 'X', 'X', 'X', ' ', ' ', ' ', ' ', ' ', ' ',
             ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
             ' ', ' ', 'X', ' '],
            [' ', ' ', 'X', 'X', 'X', 'X', 'X', 'X', ' ', ' ', ' ', ' ', ' ',
             'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X',
             'X', 'X', ' ', ' '],
            [' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X', ' ', ' ', ' ', ' ', ' ',
             'X', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
             ' ', ' ', ' ', ' '],
            [' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X', ' ', ' ', ' ', ' ', ' ',
             'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', ' ', ' ', ' ',
             ' ', ' ', ' ', ' '],
            [' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X', ' ', ' ', ' ', ' ', ' ',
             ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X', ' ', ' ', ' ',
             ' ', ' ', ' ', ' '],
            [' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X', ' ', ' ', ' ', ' ', ' ',
             ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X', ' ', ' ', ' ',
             ' ', ' ', ' ', ' '],
            [' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X', ' ', ' ', ' ', ' ', ' ',
             ' ', ' ', ' ', ' ', ' ', 'X', 'X', ' ', ' ', 'X', ' ', ' ', ' ',
             ' ', ' ', ' ', ' '],
            [' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X', ' ', ' ', ' ', ' ', ' ',
             ' ', ' ', ' ', ' ', ' ', 'X', 'X', ' ', ' ', 'X', ' ', ' ', ' ',
             ' ', ' ', ' ', ' '],
            [' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X', ' ', ' ', ' ', ' ',
             ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X', ' ', ' ', ' ', ' ',
             ' ', ' ', ' ', ' '],
            [' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X', 'X', 'X', 'X',
             'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', ' ', ' ', ' ', ' ', ' ',
             ' ', ' ', ' ', ' '],
        ]

        python_keys = {
            'rows': [
                [12], [14], [3, 11], [3, 11], [16], [16], [16], [7], [26],
                [22, 1], [23, 1], [23, 1], [23, 1], [22, 1], [21, 1], [8, 1],
                [7, 1], [7, 1], [7, 1], [7, 1], [6, 1], [6, 15], [1, 1],
                [1, 10], [1, 1], [1, 1], [1, 2, 1], [1, 2, 1], [1, 1], [12]
            ],

            'columns': [
                [10], [12], [14], [14], [14], [14], [14], [5, 8, 7], [6, 7, 1],
                [7, 7, 1], [2, 3, 7, 1], [2, 3, 7, 1], [7, 7, 1], [7, 7, 3, 1],
                [7, 7, 1, 1, 1], [7, 7, 1, 1, 1], [15, 1, 1, 1], [15, 1, 1, 1],
                [15, 1, 1, 2, 1], [15, 1, 1, 2, 1], [15, 1, 1, 1],
                [13, 1, 1, 1], [11, 1, 5], [1, 1], [1, 1], [1, 1], [1, 1],
                [1, 1], [1, 1], [10]
            ]
        }

        self.assertTrue(solution.validate_nonogram(python_nonogram,
                                                   python_keys))
Пример #8
0
    def test_ruby_nonogram(self):
        ruby_nonogram = [
            [' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
             ' ', ' ', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X',
             'X', 'X', 'X', 'X'],
            [' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
             ' ', 'X', 'X', 'X', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
             ' ', 'X', 'X', 'X'],
            [' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
             'X', 'X', ' ', 'X', 'X', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
             'X', 'X', ' ', 'X'],
            [' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X',
             'X', ' ', ' ', ' ', 'X', 'X', ' ', ' ', ' ', ' ', ' ', ' ', 'X',
             'X', ' ', ' ', 'X'],
            [' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X', 'X',
             ' ', ' ', ' ', ' ', ' ', 'X', 'X', ' ', ' ', ' ', ' ', 'X', 'X',
             ' ', ' ', ' ', 'X'],
            [' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X', 'X', ' ',
             ' ', ' ', ' ', ' ', ' ', ' ', 'X', 'X', ' ', ' ', 'X', 'X', ' ',
             ' ', ' ', ' ', 'X'],
            [' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X', 'X', ' ', ' ',
             ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X', ' ', 'X', 'X', ' ', ' ',
             ' ', ' ', ' ', 'X'],
            [' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X', 'X', ' ', ' ', ' ',
             ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X', 'X', 'X', ' ', ' ', ' ',
             ' ', ' ', ' ', 'X'],
            [' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X', 'X', ' ', ' ', ' ', ' ',
             ' ', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', ' ', ' ', ' ', ' ',
             ' ', ' ', ' ', 'X'],
            [' ', ' ', ' ', ' ', ' ', ' ', 'X', 'X', ' ', 'X', 'X', 'X', 'X',
             'X', 'X', ' ', ' ', ' ', ' ', 'X', 'X', 'X', ' ', ' ', ' ', ' ',
             ' ', ' ', ' ', 'X'],
            [' ', ' ', ' ', ' ', ' ', 'X', 'X', ' ', ' ', 'X', ' ', ' ', ' ',
             ' ', ' ', ' ', ' ', ' ', 'X', 'X', ' ', 'X', ' ', ' ', ' ', ' ',
             ' ', ' ', ' ', 'X'],
            [' ', ' ', ' ', ' ', 'X', 'X', ' ', ' ', ' ', 'X', ' ', ' ', ' ',
             ' ', ' ', ' ', ' ', 'X', 'X', ' ', ' ', 'X', 'X', ' ', ' ', ' ',
             ' ', ' ', ' ', 'X'],
            [' ', ' ', ' ', 'X', 'X', ' ', ' ', ' ', ' ', 'X', ' ', ' ', ' ',
             ' ', ' ', ' ', 'X', 'X', ' ', ' ', ' ', ' ', 'X', ' ', ' ', ' ',
             ' ', ' ', ' ', 'X'],
            [' ', ' ', 'X', 'X', ' ', ' ', ' ', ' ', ' ', 'X', ' ', ' ', ' ',
             ' ', ' ', 'X', 'X', ' ', ' ', ' ', ' ', ' ', 'X', ' ', ' ', ' ',
             ' ', ' ', ' ', 'X'],
            [' ', 'X', 'X', ' ', ' ', ' ', ' ', ' ', 'X', 'X', ' ', ' ', ' ',
             ' ', 'X', 'X', ' ', ' ', ' ', ' ', ' ', ' ', 'X', 'X', ' ', ' ',
             ' ', ' ', ' ', 'X'],
            ['X', 'X', ' ', ' ', ' ', ' ', ' ', ' ', 'X', ' ', ' ', ' ', ' ',
             'X', 'X', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X', ' ', ' ',
             ' ', ' ', ' ', 'X'],
            ['X', 'X', 'X', ' ', ' ', ' ', ' ', ' ', 'X', ' ', ' ', ' ', 'X',
             'X', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X', ' ', ' ',
             ' ', ' ', ' ', 'X'],
            ['X', ' ', 'X', 'X', ' ', ' ', ' ', ' ', 'X', ' ', ' ', 'X', 'X',
             ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X', 'X', ' ',
             ' ', ' ', ' ', 'X'],
            ['X', ' ', ' ', 'X', 'X', ' ', ' ', ' ', 'X', ' ', 'X', 'X', ' ',
             ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X', ' ',
             ' ', ' ', ' ', 'X'],
            ['X', ' ', ' ', ' ', 'X', 'X', ' ', ' ', 'X', 'X', 'X', ' ', ' ',
             ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X', ' ',
             ' ', ' ', ' ', 'X'],
            ['X', ' ', ' ', ' ', ' ', 'X', 'X', 'X', 'X', 'X', ' ', ' ', ' ',
             ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X', 'X',
             ' ', ' ', ' ', 'X'],
            ['X', ' ', ' ', ' ', ' ', ' ', ' ', 'X', 'X', 'X', 'X', 'X', ' ',
             ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X',
             ' ', ' ', ' ', 'X'],
            ['X', ' ', ' ', ' ', ' ', ' ', 'X', 'X', ' ', ' ', ' ', 'X', 'X',
             'X', 'X', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X',
             ' ', ' ', ' ', 'X'],
            ['X', ' ', ' ', ' ', ' ', 'X', 'X', ' ', ' ', ' ', ' ', ' ', ' ',
             ' ', 'X', 'X', 'X', 'X', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X',
             'X', ' ', ' ', 'X'],
            ['X', ' ', ' ', ' ', 'X', 'X', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
             ' ', ' ', ' ', ' ', 'X', 'X', 'X', 'X', ' ', ' ', ' ', ' ', ' ',
             'X', ' ', ' ', 'X'],
            ['X', ' ', ' ', 'X', 'X', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
             ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X', 'X', 'X', 'X', ' ', ' ',
             'X', 'X', ' ', 'X'],
            ['X', ' ', 'X', 'X', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
             ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X', 'X', ' ',
             ' ', 'X', ' ', 'X'],
            ['X', 'X', 'X', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
             ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X', 'X',
             'X', 'X', 'X', 'X'],
            ['X', 'X', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
             ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
             ' ', 'X', 'X', 'X'],
            ['X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X',
             'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X',
             'X', 'X', 'X', 'X', ],
        ]

        ruby_keys = {
            'rows': [
                [15], [3, 3], [2, 2, 2, 1], [2, 2, 2, 1], [2, 2, 2, 1],
                [2, 2, 2, 1], [2, 1, 2, 1], [2, 3, 1], [2, 8, 1], [2, 6, 3, 1],
                [2, 1, 2, 1, 1], [2, 1, 2, 2, 1], [2, 1, 2, 1, 1],
                [2, 1, 2, 1, 1], [2, 2, 2, 2, 1], [2, 1, 2, 1, 1],
                [3, 1, 2, 1, 1], [1, 2, 1, 2, 2, 1], [1, 2, 1, 2, 1, 1],
                [1, 2, 3, 1, 1], [1, 5, 2, 1], [1, 5, 1, 1], [1, 2, 4, 1, 1],
                [1, 2, 4, 2, 1], [1, 2, 4, 1, 1], [1, 2, 4, 2, 1],
                [1, 2, 2, 1, 1], [3, 6], [2, 3], [30]
            ],

            'columns': [
                [15], [3, 3], [2, 2, 2, 1], [2, 2, 2, 1], [2, 2, 2, 1],
                [2, 2, 2, 1], [2, 1, 2, 1], [2, 3, 1], [2, 8, 1], [2, 6, 3, 1],
                [2, 1, 2, 1, 1], [2, 1, 2, 2, 1], [2, 1, 2, 1, 1],
                [2, 1, 2, 1, 1], [2, 2, 2, 2, 1], [2, 1, 2, 1, 1],
                [3, 1, 2, 1, 1], [1, 2, 1, 2, 2, 1], [1, 2, 1, 2, 1, 1],
                [1, 2, 3, 1, 1], [1, 5, 2, 1], [1, 5, 1, 1], [1, 2, 4, 1, 1],
                [1, 2, 4, 2, 1], [1, 2, 4, 2, 1], [1, 2, 4, 1, 1],
                [1, 2, 3, 1, 1], [3, 5], [2, 3], [30]
            ],
        }

        self.assertTrue(solution.validate_nonogram(ruby_nonogram, ruby_keys))
Пример #9
0
    def test_python_nonogram(self):
        python_nonogram = [
            [
                ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X', 'X', 'X',
                'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', ' ', ' ', ' ',
                ' ', ' ', ' ', ' ', ' ', ' '
            ],
            [
                ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X', 'X', 'X', 'X',
                'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', ' ', ' ',
                ' ', ' ', ' ', ' ', ' ', ' '
            ],
            [
                ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X', 'X', 'X', ' ', ' ',
                'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', ' ',
                ' ', ' ', ' ', ' ', ' ', ' '
            ],
            [
                ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X', 'X', 'X', ' ', ' ',
                'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', ' ',
                ' ', ' ', ' ', ' ', ' ', ' '
            ],
            [
                ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X', 'X', 'X', 'X', 'X',
                'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', ' ',
                ' ', ' ', ' ', ' ', ' ', ' '
            ],
            [
                ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X', 'X', 'X', 'X', 'X',
                'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', ' ',
                ' ', ' ', ' ', ' ', ' ', ' '
            ],
            [
                ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X', 'X', 'X', 'X', 'X',
                'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', ' ',
                ' ', ' ', ' ', ' ', ' ', ' '
            ],
            [
                ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
                ' ', ' ', ' ', ' ', 'X', 'X', 'X', 'X', 'X', 'X', 'X', ' ',
                ' ', ' ', ' ', ' ', ' ', ' '
            ],
            [
                ' ', ' ', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X',
                'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X',
                'X', 'X', 'X', 'X', ' ', ' '
            ],
            [
                ' ', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X',
                'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', ' ',
                ' ', ' ', ' ', ' ', 'X', ' '
            ],
            [
                'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X',
                'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', ' ',
                ' ', ' ', ' ', ' ', ' ', 'X'
            ],
            [
                'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X',
                'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', ' ',
                ' ', ' ', ' ', ' ', ' ', 'X'
            ],
            [
                'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X',
                'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', ' ',
                ' ', ' ', ' ', ' ', ' ', 'X'
            ],
            [
                'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X',
                'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', ' ', ' ',
                ' ', ' ', ' ', ' ', ' ', 'X'
            ],
            [
                'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X',
                'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', ' ', ' ', ' ',
                ' ', ' ', ' ', ' ', ' ', 'X'
            ],
            [
                'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', ' ', ' ', ' ', ' ',
                ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
                ' ', ' ', ' ', ' ', ' ', 'X'
            ],
            [
                'X', 'X', 'X', 'X', 'X', 'X', 'X', ' ', ' ', ' ', ' ', ' ',
                ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
                ' ', ' ', ' ', ' ', ' ', 'X'
            ],
            [
                'X', 'X', 'X', 'X', 'X', 'X', 'X', ' ', ' ', ' ', ' ', ' ',
                ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
                ' ', ' ', ' ', ' ', ' ', 'X'
            ],
            [
                'X', 'X', 'X', 'X', 'X', 'X', 'X', ' ', ' ', ' ', ' ', ' ',
                ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
                ' ', ' ', ' ', ' ', ' ', 'X'
            ],
            [
                'X', 'X', 'X', 'X', 'X', 'X', 'X', ' ', ' ', ' ', ' ', ' ',
                ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
                ' ', ' ', ' ', ' ', ' ', 'X'
            ],
            [
                ' ', 'X', 'X', 'X', 'X', 'X', 'X', ' ', ' ', ' ', ' ', ' ',
                ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
                ' ', ' ', ' ', ' ', 'X', ' '
            ],
            [
                ' ', ' ', 'X', 'X', 'X', 'X', 'X', 'X', ' ', ' ', ' ', ' ',
                ' ', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X',
                'X', 'X', 'X', 'X', ' ', ' '
            ],
            [
                ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X', ' ', ' ', ' ', ' ',
                ' ', 'X', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
                ' ', ' ', ' ', ' ', ' ', ' '
            ],
            [
                ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X', ' ', ' ', ' ', ' ',
                ' ', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', ' ',
                ' ', ' ', ' ', ' ', ' ', ' '
            ],
            [
                ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X', ' ', ' ', ' ', ' ',
                ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X', ' ',
                ' ', ' ', ' ', ' ', ' ', ' '
            ],
            [
                ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X', ' ', ' ', ' ', ' ',
                ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X', ' ',
                ' ', ' ', ' ', ' ', ' ', ' '
            ],
            [
                ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X', ' ', ' ', ' ', ' ',
                ' ', ' ', ' ', ' ', ' ', ' ', 'X', 'X', ' ', ' ', 'X', ' ',
                ' ', ' ', ' ', ' ', ' ', ' '
            ],
            [
                ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X', ' ', ' ', ' ', ' ',
                ' ', ' ', ' ', ' ', ' ', ' ', 'X', 'X', ' ', ' ', 'X', ' ',
                ' ', ' ', ' ', ' ', ' ', ' '
            ],
            [
                ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X', ' ', ' ', ' ',
                ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X', ' ', ' ',
                ' ', ' ', ' ', ' ', ' ', ' '
            ],
            [
                ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X', 'X', 'X',
                'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', ' ', ' ', ' ',
                ' ', ' ', ' ', ' ', ' ', ' '
            ],
        ]

        python_keys = {
            'rows': [[12], [14], [3, 11], [3, 11], [16], [16], [16], [7], [26],
                     [22, 1], [23, 1], [23, 1], [23, 1], [22, 1], [21, 1],
                     [8, 1], [7, 1], [7, 1], [7, 1], [7, 1], [6, 1], [6, 15],
                     [1, 1], [1, 10], [1, 1], [1, 1], [1, 2, 1], [1, 2, 1],
                     [1, 1], [12]],
            'columns': [[10], [12], [14], [14], [14], [14], [14], [5, 8, 7],
                        [6, 7, 1], [7, 7, 1], [2, 3, 7, 1], [2, 3, 7, 1],
                        [7, 7, 1], [7, 7, 3, 1], [7, 7, 1, 1, 1],
                        [7, 7, 1, 1, 1], [15, 1, 1, 1], [15, 1, 1, 1],
                        [15, 1, 1, 2, 1], [15, 1, 1, 2, 1], [15, 1, 1, 1],
                        [13, 1, 1, 1], [11, 1, 5], [1, 1], [1, 1], [1, 1],
                        [1, 1], [1, 1], [1, 1], [10]]
        }

        self.assertTrue(
            solution.validate_nonogram(python_nonogram, python_keys))
Пример #10
0
    def test_mandatory_empty_square_between_groups(self):
        nonogram = [[' ', 'X', 'X', 'X'], ['X', ' ', ' ', 'X']]

        keys = {'rows': [[1], [1]], 'columns': [[1], [1], [1], [2]]}

        self.assertFalse(solution.validate_nonogram(nonogram, keys))
Пример #11
0
    def test_ruby_nonogram(self):
        ruby_nonogram = [
            [
                ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
                ' ', ' ', ' ', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X',
                'X', 'X', 'X', 'X', 'X', 'X'
            ],
            [
                ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
                ' ', ' ', 'X', 'X', 'X', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
                ' ', ' ', ' ', 'X', 'X', 'X'
            ],
            [
                ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
                ' ', 'X', 'X', ' ', 'X', 'X', ' ', ' ', ' ', ' ', ' ', ' ',
                ' ', ' ', 'X', 'X', ' ', 'X'
            ],
            [
                ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
                'X', 'X', ' ', ' ', ' ', 'X', 'X', ' ', ' ', ' ', ' ', ' ',
                ' ', 'X', 'X', ' ', ' ', 'X'
            ],
            [
                ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X',
                'X', ' ', ' ', ' ', ' ', ' ', 'X', 'X', ' ', ' ', ' ', ' ',
                'X', 'X', ' ', ' ', ' ', 'X'
            ],
            [
                ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X', 'X',
                ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X', 'X', ' ', ' ', 'X',
                'X', ' ', ' ', ' ', ' ', 'X'
            ],
            [
                ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X', 'X', ' ',
                ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X', ' ', 'X', 'X',
                ' ', ' ', ' ', ' ', ' ', 'X'
            ],
            [
                ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X', 'X', ' ', ' ',
                ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X', 'X', 'X', ' ',
                ' ', ' ', ' ', ' ', ' ', 'X'
            ],
            [
                ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X', 'X', ' ', ' ', ' ',
                ' ', ' ', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X', ' ', ' ',
                ' ', ' ', ' ', ' ', ' ', 'X'
            ],
            [
                ' ', ' ', ' ', ' ', ' ', ' ', 'X', 'X', ' ', 'X', 'X', 'X',
                'X', 'X', 'X', ' ', ' ', ' ', ' ', 'X', 'X', 'X', ' ', ' ',
                ' ', ' ', ' ', ' ', ' ', 'X'
            ],
            [
                ' ', ' ', ' ', ' ', ' ', 'X', 'X', ' ', ' ', 'X', ' ', ' ',
                ' ', ' ', ' ', ' ', ' ', ' ', 'X', 'X', ' ', 'X', ' ', ' ',
                ' ', ' ', ' ', ' ', ' ', 'X'
            ],
            [
                ' ', ' ', ' ', ' ', 'X', 'X', ' ', ' ', ' ', 'X', ' ', ' ',
                ' ', ' ', ' ', ' ', ' ', 'X', 'X', ' ', ' ', 'X', 'X', ' ',
                ' ', ' ', ' ', ' ', ' ', 'X'
            ],
            [
                ' ', ' ', ' ', 'X', 'X', ' ', ' ', ' ', ' ', 'X', ' ', ' ',
                ' ', ' ', ' ', ' ', 'X', 'X', ' ', ' ', ' ', ' ', 'X', ' ',
                ' ', ' ', ' ', ' ', ' ', 'X'
            ],
            [
                ' ', ' ', 'X', 'X', ' ', ' ', ' ', ' ', ' ', 'X', ' ', ' ',
                ' ', ' ', ' ', 'X', 'X', ' ', ' ', ' ', ' ', ' ', 'X', ' ',
                ' ', ' ', ' ', ' ', ' ', 'X'
            ],
            [
                ' ', 'X', 'X', ' ', ' ', ' ', ' ', ' ', 'X', 'X', ' ', ' ',
                ' ', ' ', 'X', 'X', ' ', ' ', ' ', ' ', ' ', ' ', 'X', 'X',
                ' ', ' ', ' ', ' ', ' ', 'X'
            ],
            [
                'X', 'X', ' ', ' ', ' ', ' ', ' ', ' ', 'X', ' ', ' ', ' ',
                ' ', 'X', 'X', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X',
                ' ', ' ', ' ', ' ', ' ', 'X'
            ],
            [
                'X', 'X', 'X', ' ', ' ', ' ', ' ', ' ', 'X', ' ', ' ', ' ',
                'X', 'X', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X',
                ' ', ' ', ' ', ' ', ' ', 'X'
            ],
            [
                'X', ' ', 'X', 'X', ' ', ' ', ' ', ' ', 'X', ' ', ' ', 'X',
                'X', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X',
                'X', ' ', ' ', ' ', ' ', 'X'
            ],
            [
                'X', ' ', ' ', 'X', 'X', ' ', ' ', ' ', 'X', ' ', 'X', 'X',
                ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
                'X', ' ', ' ', ' ', ' ', 'X'
            ],
            [
                'X', ' ', ' ', ' ', 'X', 'X', ' ', ' ', 'X', 'X', 'X', ' ',
                ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
                'X', ' ', ' ', ' ', ' ', 'X'
            ],
            [
                'X', ' ', ' ', ' ', ' ', 'X', 'X', 'X', 'X', 'X', ' ', ' ',
                ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
                'X', 'X', ' ', ' ', ' ', 'X'
            ],
            [
                'X', ' ', ' ', ' ', ' ', ' ', ' ', 'X', 'X', 'X', 'X', 'X',
                ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
                ' ', 'X', ' ', ' ', ' ', 'X'
            ],
            [
                'X', ' ', ' ', ' ', ' ', ' ', 'X', 'X', ' ', ' ', ' ', 'X',
                'X', 'X', 'X', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
                ' ', 'X', ' ', ' ', ' ', 'X'
            ],
            [
                'X', ' ', ' ', ' ', ' ', 'X', 'X', ' ', ' ', ' ', ' ', ' ',
                ' ', ' ', 'X', 'X', 'X', 'X', ' ', ' ', ' ', ' ', ' ', ' ',
                ' ', 'X', 'X', ' ', ' ', 'X'
            ],
            [
                'X', ' ', ' ', ' ', 'X', 'X', ' ', ' ', ' ', ' ', ' ', ' ',
                ' ', ' ', ' ', ' ', ' ', 'X', 'X', 'X', 'X', ' ', ' ', ' ',
                ' ', ' ', 'X', ' ', ' ', 'X'
            ],
            [
                'X', ' ', ' ', 'X', 'X', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
                ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X', 'X', 'X', 'X',
                ' ', ' ', 'X', 'X', ' ', 'X'
            ],
            [
                'X', ' ', 'X', 'X', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
                ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'X',
                'X', ' ', ' ', 'X', ' ', 'X'
            ],
            [
                'X', 'X', 'X', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
                ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
                'X', 'X', 'X', 'X', 'X', 'X'
            ],
            [
                'X', 'X', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
                ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ',
                ' ', ' ', ' ', 'X', 'X', 'X'
            ],
            [
                'X',
                'X',
                'X',
                'X',
                'X',
                'X',
                'X',
                'X',
                'X',
                'X',
                'X',
                'X',
                'X',
                'X',
                'X',
                'X',
                'X',
                'X',
                'X',
                'X',
                'X',
                'X',
                'X',
                'X',
                'X',
                'X',
                'X',
                'X',
                'X',
                'X',
            ],
        ]

        ruby_keys = {
            'rows': [[15], [3, 3], [2, 2, 2, 1], [2, 2, 2, 1], [2, 2, 2, 1],
                     [2, 2, 2, 1], [2, 1, 2, 1], [2, 3, 1], [2, 8, 1],
                     [2, 6, 3, 1], [2, 1, 2, 1, 1], [2, 1, 2, 2, 1],
                     [2, 1, 2, 1, 1], [2, 1, 2, 1, 1], [2, 2, 2, 2, 1],
                     [2, 1, 2, 1, 1], [3, 1, 2, 1, 1], [1, 2, 1, 2, 2, 1],
                     [1, 2, 1, 2, 1, 1], [1, 2, 3, 1, 1], [1, 5, 2, 1],
                     [1, 5, 1, 1], [1, 2, 4, 1, 1], [1, 2, 4, 2, 1],
                     [1, 2, 4, 1, 1], [1, 2, 4, 2, 1], [1, 2, 2, 1, 1], [3, 6],
                     [2, 3], [30]],
            'columns': [[15], [3, 3], [2, 2, 2, 1], [2, 2, 2, 1], [2, 2, 2, 1],
                        [2, 2, 2, 1], [2, 1, 2, 1], [2, 3, 1], [2, 8, 1],
                        [2, 6, 3, 1], [2, 1, 2, 1, 1], [2, 1, 2, 2, 1],
                        [2, 1, 2, 1, 1], [2, 1, 2, 1, 1], [2, 2, 2, 2, 1],
                        [2, 1, 2, 1, 1], [3, 1, 2, 1, 1], [1, 2, 1, 2, 2, 1],
                        [1, 2, 1, 2, 1, 1], [1, 2, 3, 1, 1], [1, 5, 2, 1],
                        [1, 5, 1, 1], [1, 2, 4, 1, 1], [1, 2, 4, 2, 1],
                        [1, 2, 4, 2, 1], [1, 2, 4, 1, 1], [1, 2, 3, 1, 1],
                        [3, 5], [2, 3], [30]],
        }

        self.assertTrue(solution.validate_nonogram(ruby_nonogram, ruby_keys))
    def test_validate_python_nonogram(self):
        rows = [[12], [14], [3, 11], [3, 11], [16],
                [16], [16], [7], [26], [22, 1],
                [23, 1], [23, 1], [23, 1], [22, 1], [21, 1],
                [8, 1], [7, 1], [7, 1], [7, 1], [7, 1],
                [6, 1], [6, 15], [1, 1], [1, 10], [1, 1],
                [1, 1], [1, 2, 1], [1, 2, 1], [1, 1], [12]]

        cols = [
            [10], [12], [14], [14], [14],
            [14], [14], [5, 8, 7], [6, 7, 1], [7, 7, 1],

            [2, 3, 7, 1], [2, 3, 7, 1], [7, 7, 1],
            [7, 7, 3, 1], [7, 7, 1, 1, 1],

            [7, 7, 1, 1, 1], [15, 1, 1, 1], [15, 1, 1, 1],
            [15, 1, 1, 2, 1], [15, 1, 1, 2, 1],

            [15, 1, 1, 1], [13, 1, 1, 1], [11, 1, 5], [1, 1], [1, 1],
            [1, 1], [1, 1], [1, 1], [1, 1], [10]
        ]

        keys = {'rows': rows, 'columns': cols}

        python_nonogram = [
            [' ',' ',' ',' ',' ',' ',' ',' ',' ','X','X','X','X','X','X',
             'X','X','X','X','X','X',' ',' ',' ',' ',' ',' ',' ',' ',' '],
            [' ',' ',' ',' ',' ',' ',' ',' ','X','X','X','X','X','X','X',
             'X','X','X','X','X','X','X',' ',' ',' ',' ',' ',' ',' ',' '],
            [' ',' ',' ',' ',' ',' ',' ','X','X','X',' ',' ','X','X','X',
             'X','X','X','X','X','X','X','X',' ',' ',' ',' ',' ',' ',' '],
            [' ',' ',' ',' ',' ',' ',' ','X','X','X',' ',' ','X','X','X',
             'X','X','X','X','X','X','X','X',' ',' ',' ',' ',' ',' ',' '],
            [' ',' ',' ',' ',' ',' ',' ','X','X','X','X','X','X','X','X',
             'X','X','X','X','X','X','X','X',' ',' ',' ',' ',' ',' ',' '],
            [' ',' ',' ',' ',' ',' ',' ','X','X','X','X','X','X','X','X',
             'X','X','X','X','X','X','X','X',' ',' ',' ',' ',' ',' ',' '],
            [' ',' ',' ',' ',' ',' ',' ','X','X','X','X','X','X','X','X',
             'X','X','X','X','X','X','X','X',' ',' ',' ',' ',' ',' ',' '],
            [' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',
             ' ','X','X','X','X','X','X','X',' ',' ',' ',' ',' ',' ',' '],
            [' ',' ','X','X','X','X','X','X','X','X','X','X','X','X','X',
             'X','X','X','X','X','X','X','X','X','X','X','X','X',' ',' '],
            [' ','X','X','X','X','X','X','X','X','X','X','X','X','X','X',
             'X','X','X','X','X','X','X','X',' ',' ',' ',' ',' ','X',' '],
            ['X','X','X','X','X','X','X','X','X','X','X','X','X','X','X',
             'X','X','X','X','X','X','X','X',' ',' ',' ',' ',' ',' ','X'],
            ['X','X','X','X','X','X','X','X','X','X','X','X','X','X','X',
             'X','X','X','X','X','X','X','X',' ',' ',' ',' ',' ',' ','X'],
            ['X','X','X','X','X','X','X','X','X','X','X','X','X','X','X',
             'X','X','X','X','X','X','X','X',' ',' ',' ',' ',' ',' ','X'],
            ['X','X','X','X','X','X','X','X','X','X','X','X','X','X','X',
             'X','X','X','X','X','X','X',' ',' ',' ',' ',' ',' ',' ','X'],
            ['X','X','X','X','X','X','X','X','X','X','X','X','X','X','X',
             'X','X','X','X','X','X',' ',' ',' ',' ',' ',' ',' ',' ','X'],
            ['X','X','X','X','X','X','X','X',' ',' ',' ',' ',' ',' ',' ',
             ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','X'],
            ['X','X','X','X','X','X','X',' ',' ',' ',' ',' ',' ',' ',' ',
             ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','X'],
            ['X','X','X','X','X','X','X',' ',' ',' ',' ',' ',' ',' ',' ',
             ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','X'],
            ['X','X','X','X','X','X','X',' ',' ',' ',' ',' ',' ',' ',' ',
             ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','X'],
            ['X','X','X','X','X','X','X',' ',' ',' ',' ',' ',' ',' ',' ',
             ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','X'],
            [' ','X','X','X','X','X','X',' ',' ',' ',' ',' ',' ',' ',' ',
             ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','X',' '],
            [' ',' ','X','X','X','X','X','X',' ',' ',' ',' ',' ','X','X',
             'X','X','X','X','X','X','X','X','X','X','X','X','X',' ',' '],
            [' ',' ',' ',' ',' ',' ',' ','X',' ',' ',' ',' ',' ','X',' ',
             ' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' '],
            [' ',' ',' ',' ',' ',' ',' ','X',' ',' ',' ',' ',' ','X','X',
             'X','X','X','X','X','X','X','X',' ',' ',' ',' ',' ',' ',' '],
            [' ',' ',' ',' ',' ',' ',' ','X',' ',' ',' ',' ',' ',' ',' ',
             ' ',' ',' ',' ',' ',' ',' ','X',' ',' ',' ',' ',' ',' ',' '],
            [' ',' ',' ',' ',' ',' ',' ','X',' ',' ',' ',' ',' ',' ',' ',
             ' ',' ',' ',' ',' ',' ',' ','X',' ',' ',' ',' ',' ',' ',' '],
            [' ',' ',' ',' ',' ',' ',' ','X',' ',' ',' ',' ',' ',' ',' ',
             ' ',' ',' ','X','X',' ',' ','X',' ',' ',' ',' ',' ',' ',' '],
            [' ',' ',' ',' ',' ',' ',' ','X',' ',' ',' ',' ',' ',' ',' ',
             ' ',' ',' ','X','X',' ',' ','X',' ',' ',' ',' ',' ',' ',' '],
            [' ',' ',' ',' ',' ',' ',' ',' ','X',' ',' ',' ',' ',' ',' ',
             ' ',' ',' ',' ',' ',' ','X',' ',' ',' ',' ',' ',' ',' ',' '],
            [' ',' ',' ',' ',' ',' ',' ',' ',' ','X','X','X','X','X','X',
             'X','X','X','X','X','X',' ',' ',' ',' ',' ',' ',' ',' ',' ']
        ]

        self.assertTrue(validate_nonogram(python_nonogram, keys))