Day 4 part 1
This commit is contained in:
		
							parent
							
								
									71d32e87fe
								
							
						
					
					
						commit
						dd8550e3b8
					
				
					 2 changed files with 701 additions and 0 deletions
				
			
		
							
								
								
									
										100
									
								
								4/4.py
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										100
									
								
								4/4.py
									
									
									
									
									
										Executable file
									
								
							| 
						 | 
					@ -0,0 +1,100 @@
 | 
				
			||||||
 | 
					#!/usr/bin/env python
 | 
				
			||||||
 | 
					# 2021 - Advent Of Code - 4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import re
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					re_parse = re.compile(r'\s?(\d+)\s+'*4 + r'(\d+)')
 | 
				
			||||||
 | 
					GRID_SIZE = 5
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class Board:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def __init__(self, grid):
 | 
				
			||||||
 | 
					        self.grid = grid
 | 
				
			||||||
 | 
					        self.marked = [[0] * GRID_SIZE for _ in range(GRID_SIZE)]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def print_with_mark(self):
 | 
				
			||||||
 | 
					        for x in range(GRID_SIZE):
 | 
				
			||||||
 | 
					            print(f'{self.grid[x]} \t {self.marked[x]}')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def mark_number(self, num):
 | 
				
			||||||
 | 
					        for line in range(GRID_SIZE):
 | 
				
			||||||
 | 
					            try:
 | 
				
			||||||
 | 
					                index = self.grid[line].index(num)
 | 
				
			||||||
 | 
					                self.marked[line][index] = 1
 | 
				
			||||||
 | 
					                if self.has_win():
 | 
				
			||||||
 | 
					                    return True
 | 
				
			||||||
 | 
					                return False
 | 
				
			||||||
 | 
					            except ValueError:
 | 
				
			||||||
 | 
					                pass
 | 
				
			||||||
 | 
					        return False
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def has_win(self):
 | 
				
			||||||
 | 
					        # check lines
 | 
				
			||||||
 | 
					        for line in range(GRID_SIZE):
 | 
				
			||||||
 | 
					            if 0 not in self.marked[line]:
 | 
				
			||||||
 | 
					                return True
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # check column
 | 
				
			||||||
 | 
					        for c in range(GRID_SIZE):
 | 
				
			||||||
 | 
					            col_sum = 0
 | 
				
			||||||
 | 
					            for line in range(GRID_SIZE):
 | 
				
			||||||
 | 
					                if self.marked[line][c] == 0:
 | 
				
			||||||
 | 
					                    break
 | 
				
			||||||
 | 
					                else:
 | 
				
			||||||
 | 
					                    col_sum += 1
 | 
				
			||||||
 | 
					            if col_sum == GRID_SIZE:
 | 
				
			||||||
 | 
					                return True
 | 
				
			||||||
 | 
					        return False
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def calc_unmarked(self):
 | 
				
			||||||
 | 
					        unmarked_sum = 0
 | 
				
			||||||
 | 
					        for line in range(GRID_SIZE):
 | 
				
			||||||
 | 
					            for col in range(GRID_SIZE):
 | 
				
			||||||
 | 
					                if self.marked[line][col] == 0:
 | 
				
			||||||
 | 
					                    unmarked_sum += int(self.grid[line][col])
 | 
				
			||||||
 | 
					        return unmarked_sum
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def parse_file(file):
 | 
				
			||||||
 | 
					    boards_list = []
 | 
				
			||||||
 | 
					    with open(file) as f:
 | 
				
			||||||
 | 
					        numbers = f.readline().split(',')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        line = f.readline()
 | 
				
			||||||
 | 
					        while line:
 | 
				
			||||||
 | 
					            board = []
 | 
				
			||||||
 | 
					            for i in range(GRID_SIZE):
 | 
				
			||||||
 | 
					                line = f.readline()
 | 
				
			||||||
 | 
					                m = re_parse.match(line)
 | 
				
			||||||
 | 
					                grid_line = m.groups()
 | 
				
			||||||
 | 
					                board.append(grid_line)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            b = Board(board)
 | 
				
			||||||
 | 
					            boards_list.append(b)
 | 
				
			||||||
 | 
					            line = f.readline()
 | 
				
			||||||
 | 
					    return boards_list, numbers
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def play_until_win(boards_list, draws):
 | 
				
			||||||
 | 
					    """ play until win and return last pos """
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    for d in draws:
 | 
				
			||||||
 | 
					        for board in boards_list:
 | 
				
			||||||
 | 
					            if board.mark_number(d):
 | 
				
			||||||
 | 
					                print("this board wins !")
 | 
				
			||||||
 | 
					                board.print_with_mark()
 | 
				
			||||||
 | 
					                return board, d
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					boards, draws = parse_file('input.txt')
 | 
				
			||||||
 | 
					print(f'number of boards: {len(boards)}')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(winning_board, last_num) = play_until_win(boards, draws)
 | 
				
			||||||
 | 
					print(f'last number is: {last_num}')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					board_score = winning_board.calc_unmarked()
 | 
				
			||||||
 | 
					print(f'board score: {board_score}')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					score = int(last_num) * board_score
 | 
				
			||||||
 | 
					print(f'score is : {score}')
 | 
				
			||||||
							
								
								
									
										601
									
								
								4/input.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										601
									
								
								4/input.txt
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,601 @@
 | 
				
			||||||
 | 
					72,99,88,8,59,61,96,92,2,70,1,32,18,10,95,33,20,31,66,43,26,24,91,44,11,15,48,90,27,29,14,68,3,50,69,74,54,4,16,55,64,12,73,80,58,83,6,87,30,41,25,39,93,60,9,81,63,75,46,19,78,51,21,28,94,7,17,42,53,13,97,98,34,76,89,23,86,52,79,85,67,84,47,22,37,65,71,49,82,40,77,36,62,0,56,45,57,38,35,5
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					91 60 70 64 83
 | 
				
			||||||
 | 
					35 41 79 55 31
 | 
				
			||||||
 | 
					 7 58 25  3 47
 | 
				
			||||||
 | 
					 2 23 69 59 21
 | 
				
			||||||
 | 
					11 22  8 87 90
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					77 95 19 21 76
 | 
				
			||||||
 | 
					93 92 62 35  3
 | 
				
			||||||
 | 
					 4 29  7 41 45
 | 
				
			||||||
 | 
					80 50 83 61 64
 | 
				
			||||||
 | 
					39 32 91 56 48
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					47 11 39 58 97
 | 
				
			||||||
 | 
					63 51 40 74 71
 | 
				
			||||||
 | 
					12 17 68 81 44
 | 
				
			||||||
 | 
					64 85 20 84 80
 | 
				
			||||||
 | 
					 0 77  5 18 50
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					44 82 32  1 57
 | 
				
			||||||
 | 
					98 88 33 83 85
 | 
				
			||||||
 | 
					25 61 63 99 37
 | 
				
			||||||
 | 
					 0 74  7 20 39
 | 
				
			||||||
 | 
					71 72 22 80 28
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					78 97  0 48 41
 | 
				
			||||||
 | 
					56 51 62 58 90
 | 
				
			||||||
 | 
					 8 44 98 46  1
 | 
				
			||||||
 | 
					38 40 91 20 55
 | 
				
			||||||
 | 
					88  2 32 86 14
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					84 50 16 45 40
 | 
				
			||||||
 | 
					 9 39 60 34 46
 | 
				
			||||||
 | 
					57 20 12  3 36
 | 
				
			||||||
 | 
					58 17 72 48 83
 | 
				
			||||||
 | 
					73 85 49 67 66
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 4 30 73 83 57
 | 
				
			||||||
 | 
					74 23 49 19 42
 | 
				
			||||||
 | 
					72 65  8 99 13
 | 
				
			||||||
 | 
					25  6 82 53 68
 | 
				
			||||||
 | 
					20 86 46 48 50
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					52 29 61 16 75
 | 
				
			||||||
 | 
					36 19  2 82  9
 | 
				
			||||||
 | 
					34 90 89 43 14
 | 
				
			||||||
 | 
					69 66 20 21 11
 | 
				
			||||||
 | 
					31 53 46 18 23
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					37 76 34 79 99
 | 
				
			||||||
 | 
					43  5 42 91 71
 | 
				
			||||||
 | 
					47 54 19 82 81
 | 
				
			||||||
 | 
					95 78 65 60 24
 | 
				
			||||||
 | 
					32 94 92 27 66
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					68 61 80 90 53
 | 
				
			||||||
 | 
					33 17 52  0 23
 | 
				
			||||||
 | 
					30 71  5 85 11
 | 
				
			||||||
 | 
					27 39 41  6  9
 | 
				
			||||||
 | 
					58 98  7 74 89
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					31  5 55 67 51
 | 
				
			||||||
 | 
					54 86 40 25 92
 | 
				
			||||||
 | 
					91 62  9 94  7
 | 
				
			||||||
 | 
					39  0 44 52 28
 | 
				
			||||||
 | 
					12 17 26 46 32
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					94 80 83 88 77
 | 
				
			||||||
 | 
					65 71 31 86  0
 | 
				
			||||||
 | 
					98 55 18 92 72
 | 
				
			||||||
 | 
					 6 12 30 25 34
 | 
				
			||||||
 | 
					67 53 14 20 47
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					81 74 14 47  1
 | 
				
			||||||
 | 
					83 82  4 89  8
 | 
				
			||||||
 | 
					43 93 63 21 44
 | 
				
			||||||
 | 
					92 61 25 77 97
 | 
				
			||||||
 | 
					12 72 35 78 52
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					26 39 13 37 46
 | 
				
			||||||
 | 
					87  6 58 47 19
 | 
				
			||||||
 | 
					24 35 45 95 52
 | 
				
			||||||
 | 
					 5 27 42 96  0
 | 
				
			||||||
 | 
					23 64  8 29 83
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					53 58 18 96 93
 | 
				
			||||||
 | 
					57 90 35 88 68
 | 
				
			||||||
 | 
					91 89  7 80 47
 | 
				
			||||||
 | 
					59 86 81 24 31
 | 
				
			||||||
 | 
					43  8 66 17 94
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 0 97 91 67 90
 | 
				
			||||||
 | 
					93 20 36  4 42
 | 
				
			||||||
 | 
					43 64 28 94 34
 | 
				
			||||||
 | 
					31  2  7 54 71
 | 
				
			||||||
 | 
					18 35 76 86 16
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					55 63 26 47  0
 | 
				
			||||||
 | 
					 2 23 54 25 90
 | 
				
			||||||
 | 
					36 13 85 31 15
 | 
				
			||||||
 | 
					59 51 18 88 62
 | 
				
			||||||
 | 
					44 69  9 81 58
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					26 97 98 42 27
 | 
				
			||||||
 | 
					 3 53 91 89 93
 | 
				
			||||||
 | 
					87 57 12 18  5
 | 
				
			||||||
 | 
					29 99 86 47 64
 | 
				
			||||||
 | 
					 6 28 92 79 67
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 4 35 45 79 16
 | 
				
			||||||
 | 
					33 95 99 80  9
 | 
				
			||||||
 | 
					60 78 57 51 50
 | 
				
			||||||
 | 
					27  5 48 21 46
 | 
				
			||||||
 | 
					19 70 32 58 18
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					94 82 61 66 31
 | 
				
			||||||
 | 
					14 56 76 37 28
 | 
				
			||||||
 | 
					42 81 50 10 40
 | 
				
			||||||
 | 
					 2 98 47 29 62
 | 
				
			||||||
 | 
					69 90 46 44 18
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					87  3  8 50 17
 | 
				
			||||||
 | 
					15 90 54 45 21
 | 
				
			||||||
 | 
					 6 28 43 51 32
 | 
				
			||||||
 | 
					97 84 69 30 38
 | 
				
			||||||
 | 
					98 44 88 55 83
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					34 19 27 43 92
 | 
				
			||||||
 | 
					81 62 52 32 39
 | 
				
			||||||
 | 
					50 29 83 25 82
 | 
				
			||||||
 | 
					60 55 49 41 97
 | 
				
			||||||
 | 
					75 94 22 69 66
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					59 39 96 87 65
 | 
				
			||||||
 | 
					33 18  4 71 15
 | 
				
			||||||
 | 
					22 27 92  8 29
 | 
				
			||||||
 | 
					19  5 32 85 45
 | 
				
			||||||
 | 
					91 79 35  9  3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					41 53 51 68 85
 | 
				
			||||||
 | 
					72 71 94 82 81
 | 
				
			||||||
 | 
					60 38 13 16  7
 | 
				
			||||||
 | 
					49 80 10  0 54
 | 
				
			||||||
 | 
					20 39 59 64 99
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					37 21 90 40 73
 | 
				
			||||||
 | 
					85 75 16 34 99
 | 
				
			||||||
 | 
					84 15 25 18 27
 | 
				
			||||||
 | 
					77 32  0 76 36
 | 
				
			||||||
 | 
					13 50 68 91 12
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					24 26  0 14 12
 | 
				
			||||||
 | 
					89  4 15 95 73
 | 
				
			||||||
 | 
					54  2 55 84 42
 | 
				
			||||||
 | 
					30 50 81 60 87
 | 
				
			||||||
 | 
					37 94 71 91 53
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					52  1 81 44 34
 | 
				
			||||||
 | 
					27 60 36 19 69
 | 
				
			||||||
 | 
					98 11 49 67 56
 | 
				
			||||||
 | 
					77 72 40 48 66
 | 
				
			||||||
 | 
					84  9 37 32 51
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					58 15  7 36 55
 | 
				
			||||||
 | 
					94 49 69 89 87
 | 
				
			||||||
 | 
					79 70 30 77 19
 | 
				
			||||||
 | 
					68 31 56 41 53
 | 
				
			||||||
 | 
					47 85 74 54 46
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					64 87 23 66  0
 | 
				
			||||||
 | 
					29 98 72 82 80
 | 
				
			||||||
 | 
					70 45 46 30 37
 | 
				
			||||||
 | 
					53 54 33 86 76
 | 
				
			||||||
 | 
					 6 75 71 68  2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					12 31 43 80 41
 | 
				
			||||||
 | 
					37 15 13  2  3
 | 
				
			||||||
 | 
					86 61  9 17 59
 | 
				
			||||||
 | 
					55 68 72  8  1
 | 
				
			||||||
 | 
					96 26 44 73 47
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					67 39 95 84 10
 | 
				
			||||||
 | 
					 5 88 13 81 99
 | 
				
			||||||
 | 
					68 15 98  6 17
 | 
				
			||||||
 | 
					47 85 74 32 97
 | 
				
			||||||
 | 
					58  8 16 56 42
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					82 31 42 84 17
 | 
				
			||||||
 | 
					25 28  2  6 12
 | 
				
			||||||
 | 
					78 57 16 97 18
 | 
				
			||||||
 | 
					87 64 54 30 65
 | 
				
			||||||
 | 
					 3 77 29 49 81
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					24  1 43 89 46
 | 
				
			||||||
 | 
					29 78 57 14 85
 | 
				
			||||||
 | 
					 9 58 53 83 35
 | 
				
			||||||
 | 
					96 42 62 68 74
 | 
				
			||||||
 | 
					67  2 39 37 51
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					72 26 46 52  3
 | 
				
			||||||
 | 
					91 27 41 32 53
 | 
				
			||||||
 | 
					25 36  7 63 22
 | 
				
			||||||
 | 
					56 38 93 65  9
 | 
				
			||||||
 | 
					95 19 77 64 44
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					21 71 13 99 39
 | 
				
			||||||
 | 
					47 17 80 85 64
 | 
				
			||||||
 | 
					 5 18 48 27 81
 | 
				
			||||||
 | 
					82 23 45 57 12
 | 
				
			||||||
 | 
					83 55 26 31 32
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					57 13 86 69 65
 | 
				
			||||||
 | 
					42 76 35 18 39
 | 
				
			||||||
 | 
					17 91 95 43  6
 | 
				
			||||||
 | 
					55 97 22 54 14
 | 
				
			||||||
 | 
					56  0  5 60 92
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					87 12 46 42 35
 | 
				
			||||||
 | 
					44  6 95 30 67
 | 
				
			||||||
 | 
					51 21 68 37 59
 | 
				
			||||||
 | 
					77 65 50 69 63
 | 
				
			||||||
 | 
					33 56 24 57 28
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					82 87 42 99 39
 | 
				
			||||||
 | 
					38 55 74 28  6
 | 
				
			||||||
 | 
					77 66  9 80 10
 | 
				
			||||||
 | 
					47 90 32  3 98
 | 
				
			||||||
 | 
					92 52  5 94 51
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					16  1 87 57 66
 | 
				
			||||||
 | 
					41 70 58 31  5
 | 
				
			||||||
 | 
					71 88 17 42 76
 | 
				
			||||||
 | 
					81 40 25 89 63
 | 
				
			||||||
 | 
					92  4 61 77 64
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					70 28 56 51 66
 | 
				
			||||||
 | 
					44 60 25  0 45
 | 
				
			||||||
 | 
					91 78 81 95 88
 | 
				
			||||||
 | 
					75 43 57 67 32
 | 
				
			||||||
 | 
					58 27 20 82 22
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					16 98 82 79 90
 | 
				
			||||||
 | 
					96  4 80 69 19
 | 
				
			||||||
 | 
					 9 28 33 40 94
 | 
				
			||||||
 | 
					 2 99 14 73 43
 | 
				
			||||||
 | 
					76 68 74 42 30
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					29 42 94 45  2
 | 
				
			||||||
 | 
					25 81 46 54 26
 | 
				
			||||||
 | 
					75 99 51 58 23
 | 
				
			||||||
 | 
					76 72 71 64 63
 | 
				
			||||||
 | 
					66 70 92 44 13
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 2 71 39 49 95
 | 
				
			||||||
 | 
					19 84  1  7 96
 | 
				
			||||||
 | 
					 9  6 60 93 78
 | 
				
			||||||
 | 
					38 91 55 36 41
 | 
				
			||||||
 | 
					64  3 10 20 74
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					79 80 15 69 89
 | 
				
			||||||
 | 
					36 76 83  7 72
 | 
				
			||||||
 | 
					87 34 48  0 93
 | 
				
			||||||
 | 
					 5 84 77 20 75
 | 
				
			||||||
 | 
					46 27 11 55  3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					82 34  4 14 74
 | 
				
			||||||
 | 
					40 39  7  6 95
 | 
				
			||||||
 | 
					11 51 78 80 29
 | 
				
			||||||
 | 
					97 81 38  9 71
 | 
				
			||||||
 | 
					22 62 19 72 68
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					54 70 90 43 98
 | 
				
			||||||
 | 
					12 27 57 96 62
 | 
				
			||||||
 | 
					32 76  0 86 42
 | 
				
			||||||
 | 
					88 68 81 91 50
 | 
				
			||||||
 | 
					10 94 18 71  2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					90 41 29 53 58
 | 
				
			||||||
 | 
					59 62 14 85 66
 | 
				
			||||||
 | 
					25 82 68 44 93
 | 
				
			||||||
 | 
					73 32 76 67 18
 | 
				
			||||||
 | 
					94 71 83 34 37
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 6 72 69 33 90
 | 
				
			||||||
 | 
					87 60 66 85 16
 | 
				
			||||||
 | 
					59 80 86 47 89
 | 
				
			||||||
 | 
					32 98 17 29  5
 | 
				
			||||||
 | 
					48 27 18 57 81
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					10 22 98 86 82
 | 
				
			||||||
 | 
					 8 66 71 14 93
 | 
				
			||||||
 | 
					87 79 40 78 49
 | 
				
			||||||
 | 
					84 63 17 54 94
 | 
				
			||||||
 | 
					35 39 47  1 96
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					58 60 52  6 86
 | 
				
			||||||
 | 
					41 20 66 59  2
 | 
				
			||||||
 | 
					92 79 88 40 71
 | 
				
			||||||
 | 
					96  9 25 36 17
 | 
				
			||||||
 | 
					91 32 43 38  8
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					74  3 64 66 68
 | 
				
			||||||
 | 
					69 37 22 76 33
 | 
				
			||||||
 | 
					17 67 29 32 27
 | 
				
			||||||
 | 
					63 49 46 21 60
 | 
				
			||||||
 | 
					35 73  9 52 50
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 0 91  8 26  9
 | 
				
			||||||
 | 
					 3 98 79 97  7
 | 
				
			||||||
 | 
					37 61  1 60 47
 | 
				
			||||||
 | 
					86 17 11 70 15
 | 
				
			||||||
 | 
					66 53  2 90 54
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					68 42  0 78 16
 | 
				
			||||||
 | 
					83 88 21 87 12
 | 
				
			||||||
 | 
					50  2 29 14 63
 | 
				
			||||||
 | 
					72 90 81 71 91
 | 
				
			||||||
 | 
					54 79 94 10  4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					28 63 97 31  4
 | 
				
			||||||
 | 
					50 52 43 24 16
 | 
				
			||||||
 | 
					36 77  0  9 75
 | 
				
			||||||
 | 
					83 94 69 68 27
 | 
				
			||||||
 | 
					93 82 42 56 34
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					24 52 66 51 82
 | 
				
			||||||
 | 
					50 30 34 93 67
 | 
				
			||||||
 | 
					56 70 53 13 78
 | 
				
			||||||
 | 
					 4 84 88 57 81
 | 
				
			||||||
 | 
					80 74  5 95 98
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					56 64 53 52 72
 | 
				
			||||||
 | 
					51 48 50 60 49
 | 
				
			||||||
 | 
					 8 46 84 95 43
 | 
				
			||||||
 | 
					91 21  7 88 33
 | 
				
			||||||
 | 
					94 57 80 25 54
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					70 57 62 20 18
 | 
				
			||||||
 | 
					86 45 41 76 32
 | 
				
			||||||
 | 
					87 35 52  5  2
 | 
				
			||||||
 | 
					16 77 25 39 22
 | 
				
			||||||
 | 
					38 10  6 29 98
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					89 54 57 80 65
 | 
				
			||||||
 | 
					 0 38 94 15  6
 | 
				
			||||||
 | 
					85 76 16 83 59
 | 
				
			||||||
 | 
					92  5 53 14 95
 | 
				
			||||||
 | 
					47 35 73 98 34
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					64 24 90 71 69
 | 
				
			||||||
 | 
					55 35 20 98 41
 | 
				
			||||||
 | 
					94 70 10 73 16
 | 
				
			||||||
 | 
					65 84 60  7 72
 | 
				
			||||||
 | 
					83  2 22 78 99
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					31 81 74 56 98
 | 
				
			||||||
 | 
					13 97 95 49 67
 | 
				
			||||||
 | 
					 9 47 42 99 60
 | 
				
			||||||
 | 
					38 22 65 58 21
 | 
				
			||||||
 | 
					82 45  2 28 68
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					90 88 28 85 51
 | 
				
			||||||
 | 
					23 93 13 55 50
 | 
				
			||||||
 | 
					63 22  3 30 39
 | 
				
			||||||
 | 
					 5 71 82 95 81
 | 
				
			||||||
 | 
					57 76 12 92 56
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					78 12 28  6 73
 | 
				
			||||||
 | 
					59 24 43 29 31
 | 
				
			||||||
 | 
					30 34 75 52 48
 | 
				
			||||||
 | 
					62 57 23 74 50
 | 
				
			||||||
 | 
					91 92  5 95 38
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					95 88 13 22 10
 | 
				
			||||||
 | 
					16  4 19 37 91
 | 
				
			||||||
 | 
					50 52 60 46 77
 | 
				
			||||||
 | 
					45 55 49 41 26
 | 
				
			||||||
 | 
					21  7 67 48 18
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					51 79 44 16 71
 | 
				
			||||||
 | 
					 6 13 12 41 97
 | 
				
			||||||
 | 
					50 25 19 63  4
 | 
				
			||||||
 | 
					98  0 23 77 31
 | 
				
			||||||
 | 
					27 57 52 99  3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					86 95  7 54 84
 | 
				
			||||||
 | 
					50 33 48 16  9
 | 
				
			||||||
 | 
					82 32 38  6 34
 | 
				
			||||||
 | 
					43 80 27 37 11
 | 
				
			||||||
 | 
					89 70 41 22 45
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					24  3 47 68 35
 | 
				
			||||||
 | 
					85 76  8 29  4
 | 
				
			||||||
 | 
					 2 10  5 28 73
 | 
				
			||||||
 | 
					92 89 50 25 56
 | 
				
			||||||
 | 
					99 57 79 19 37
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 0 46 72  5 20
 | 
				
			||||||
 | 
					62 28 24 53 44
 | 
				
			||||||
 | 
					84 25 63 34  9
 | 
				
			||||||
 | 
					75  1 65 59 10
 | 
				
			||||||
 | 
					95 29 97 77 45
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					87 90  1 17 67
 | 
				
			||||||
 | 
					57 73 35 10 30
 | 
				
			||||||
 | 
					65 14 46 60  6
 | 
				
			||||||
 | 
					70 66 56 69 92
 | 
				
			||||||
 | 
					 3 27 21 64 88
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					20 58 53 29 66
 | 
				
			||||||
 | 
					27  6 67 89 33
 | 
				
			||||||
 | 
					88 60 79 69 97
 | 
				
			||||||
 | 
					90  3 47 68 25
 | 
				
			||||||
 | 
					48 59 42 98 39
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					65 90 45 97 87
 | 
				
			||||||
 | 
					75 98  7 58 42
 | 
				
			||||||
 | 
					51  4 95 88 47
 | 
				
			||||||
 | 
					94  6 11 53 63
 | 
				
			||||||
 | 
					49 80  2 48 68
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 3 77 42 97 82
 | 
				
			||||||
 | 
					70 58 81 18 47
 | 
				
			||||||
 | 
					78 96 62 39 56
 | 
				
			||||||
 | 
					22 87 71 31 94
 | 
				
			||||||
 | 
					34 48 57 38 88
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					70 36 65 33 45
 | 
				
			||||||
 | 
					71  0 59 44  1
 | 
				
			||||||
 | 
					42 37  7  5  9
 | 
				
			||||||
 | 
					11 12 91 43 27
 | 
				
			||||||
 | 
					60 21 57 61 99
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					76 75 56 49  2
 | 
				
			||||||
 | 
					36 57 39 64 77
 | 
				
			||||||
 | 
					95 19 35 43 97
 | 
				
			||||||
 | 
					82 34 50 44 55
 | 
				
			||||||
 | 
					45 74 15 66 29
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 0 75  1 78 79
 | 
				
			||||||
 | 
					13 37 48 27 14
 | 
				
			||||||
 | 
					90 50 26 92 67
 | 
				
			||||||
 | 
					89 62 87 69 33
 | 
				
			||||||
 | 
					29 47  4  2 12
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					74 42 24 86 61
 | 
				
			||||||
 | 
					92 66  3 65 75
 | 
				
			||||||
 | 
					 7  1 77 63 64
 | 
				
			||||||
 | 
					39 91 87 28  5
 | 
				
			||||||
 | 
					30 35 41 73 96
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 0 81 41 15 66
 | 
				
			||||||
 | 
					62 19 86 31 40
 | 
				
			||||||
 | 
					23 94 98 82 24
 | 
				
			||||||
 | 
					61 99  1  5 60
 | 
				
			||||||
 | 
					80 64 91 33 47
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					16 61 56 77 57
 | 
				
			||||||
 | 
					28 59 71 45 92
 | 
				
			||||||
 | 
					53 20 35 66 73
 | 
				
			||||||
 | 
					99  3 86 31 74
 | 
				
			||||||
 | 
					94 69 84 96 90
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					71 56 23 76 42
 | 
				
			||||||
 | 
					90 44 58 27 15
 | 
				
			||||||
 | 
					46 18 86 63 24
 | 
				
			||||||
 | 
					69 49 82 38 43
 | 
				
			||||||
 | 
					33 51 60 66 39
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					75 78 38 25 76
 | 
				
			||||||
 | 
					67  3 83 90 10
 | 
				
			||||||
 | 
					40 89 47 23 88
 | 
				
			||||||
 | 
					34 21 46 16 33
 | 
				
			||||||
 | 
					 9 79 50  0 26
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					81 75 80 23 41
 | 
				
			||||||
 | 
					62  4 76  1 63
 | 
				
			||||||
 | 
					56 39 57 28 61
 | 
				
			||||||
 | 
					20  6 79 92 84
 | 
				
			||||||
 | 
					88  3 90 16 12
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					87 78  3 34 63
 | 
				
			||||||
 | 
					98 21 24  9 99
 | 
				
			||||||
 | 
					62 29 57 65 27
 | 
				
			||||||
 | 
					47 52 67 76 71
 | 
				
			||||||
 | 
					11 17 93 23 82
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					53 68 70 38 56
 | 
				
			||||||
 | 
					62 54 25 43 35
 | 
				
			||||||
 | 
					 9  3 13 15 75
 | 
				
			||||||
 | 
					59 27 26 33 83
 | 
				
			||||||
 | 
					93 40 11 64 76
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					27 83 26 48 77
 | 
				
			||||||
 | 
					51 20 65 18 35
 | 
				
			||||||
 | 
					80 30 60 44 89
 | 
				
			||||||
 | 
					84 82 62 91 63
 | 
				
			||||||
 | 
					12 97 11 19 34
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					31 28 92 48 34
 | 
				
			||||||
 | 
					 9 93 61 71 60
 | 
				
			||||||
 | 
					52 18 97 81 62
 | 
				
			||||||
 | 
					80 64 57 22 30
 | 
				
			||||||
 | 
					11 88 74 29 56
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					57 34 90 46 73
 | 
				
			||||||
 | 
					31  0 70 66 82
 | 
				
			||||||
 | 
					45 12 40 19 87
 | 
				
			||||||
 | 
					91 24 59 83 14
 | 
				
			||||||
 | 
					80 21 13 86 89
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 9  8 64 48 30
 | 
				
			||||||
 | 
					 6 62 28 99 41
 | 
				
			||||||
 | 
					79 45 83  7 55
 | 
				
			||||||
 | 
					15 14 54 88 12
 | 
				
			||||||
 | 
					90 74 97 96 50
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					50 73 58 26 12
 | 
				
			||||||
 | 
					96 98 56 34  7
 | 
				
			||||||
 | 
					51 92 14 89 16
 | 
				
			||||||
 | 
					41 70 80 55 13
 | 
				
			||||||
 | 
					37 47  2 64 99
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					98  9 70 17 18
 | 
				
			||||||
 | 
					39 15 88 16 47
 | 
				
			||||||
 | 
					80 41  8 51 21
 | 
				
			||||||
 | 
					54 42 31 10 59
 | 
				
			||||||
 | 
					37 92 33 62 68
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					60 72 51 63 29
 | 
				
			||||||
 | 
					83 39 41 24 14
 | 
				
			||||||
 | 
					34  5 94 90 56
 | 
				
			||||||
 | 
					75 80 67 17 20
 | 
				
			||||||
 | 
					47 11 58 93 42
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					97  7 27 42 67
 | 
				
			||||||
 | 
					12 30 91 45 52
 | 
				
			||||||
 | 
					62 50 87 92 71
 | 
				
			||||||
 | 
					99 84 33  6 46
 | 
				
			||||||
 | 
					29 55 86 47 60
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					25 49 55 98 22
 | 
				
			||||||
 | 
					66  9 61 59 90
 | 
				
			||||||
 | 
					45 74 77 88  5
 | 
				
			||||||
 | 
					 6 76  0 36 93
 | 
				
			||||||
 | 
					23 70 33 95  2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					53 92 27 86 55
 | 
				
			||||||
 | 
					66 52 26 58 38
 | 
				
			||||||
 | 
					 2 78 69 62 65
 | 
				
			||||||
 | 
					30  5  1 25 99
 | 
				
			||||||
 | 
					76 43  4 13  8
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					18 72 51 48 39
 | 
				
			||||||
 | 
					62 19 28 44 82
 | 
				
			||||||
 | 
					54 22 38 55 83
 | 
				
			||||||
 | 
					86 93 42  9 32
 | 
				
			||||||
 | 
					11 89 27 34 68
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					85 99 35 88 76
 | 
				
			||||||
 | 
					10 25 33 83 70
 | 
				
			||||||
 | 
					54 81 77 73 66
 | 
				
			||||||
 | 
					 4 74 96 41 86
 | 
				
			||||||
 | 
					49  3 68 65 39
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					71  0 70 14 31
 | 
				
			||||||
 | 
					28 23 17 43 75
 | 
				
			||||||
 | 
					13 40 38 87 97
 | 
				
			||||||
 | 
					63 93 92 89 27
 | 
				
			||||||
 | 
					58 76 24 53 54
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					55 58 11 38 16
 | 
				
			||||||
 | 
					98 86 13 12  8
 | 
				
			||||||
 | 
					22 10 77 61 90
 | 
				
			||||||
 | 
					37 76  2 62 45
 | 
				
			||||||
 | 
					44 30 52 70 82
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					89 55 12 90 63
 | 
				
			||||||
 | 
					40 88 91 22 74
 | 
				
			||||||
 | 
					 8  0 25  6 79
 | 
				
			||||||
 | 
					53 23 87 77 20
 | 
				
			||||||
 | 
					11 38 78 43 94
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					21 14 37  8 16
 | 
				
			||||||
 | 
					29 73 67 91 56
 | 
				
			||||||
 | 
					 5 90 12 92 59
 | 
				
			||||||
 | 
					64  1 42 72 94
 | 
				
			||||||
 | 
					98 86 18 69 49
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					79 71 82  1 77
 | 
				
			||||||
 | 
					96 39 24 60 81
 | 
				
			||||||
 | 
					49 16 12 63 14
 | 
				
			||||||
 | 
					 0 32 78 37  8
 | 
				
			||||||
 | 
					92 33 15 99 65
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					54 11 40 55 33
 | 
				
			||||||
 | 
					58 47  4 83 94
 | 
				
			||||||
 | 
					46 96 16 28  5
 | 
				
			||||||
 | 
					 0 62 95 71 39
 | 
				
			||||||
 | 
					93 59  7 75 64
 | 
				
			||||||
		Loading…
	
		Reference in a new issue