├── conftest.py ├── requirements.txt ├── CONTRIBUTING.md ├── data ├── C-mdvrp.zip ├── C-mdvrp-sol.zip ├── result │ ├── pr01.res │ ├── p02.res │ ├── pr07.res │ ├── p01.res │ ├── p12.res │ ├── p13.res │ ├── p14.res │ ├── p05.res │ ├── pr02.res │ ├── p03.res │ ├── p04.res │ ├── p07.res │ ├── p06.res │ ├── pr03.res │ ├── pr08.res │ ├── p15.res │ ├── p16.res │ ├── p17.res │ ├── pr04.res │ ├── pr09.res │ ├── p18.res │ ├── p19.res │ ├── p20.res │ ├── pr05.res │ ├── p08.res │ ├── p10.res │ ├── p11.res │ ├── p09.res │ ├── pr06.res │ ├── pr10.res │ ├── p21.res │ ├── p22.res │ └── p23.res ├── input │ ├── p01 │ ├── p02 │ ├── pr01 │ ├── p12 │ ├── p13 │ ├── p14 │ ├── p03 │ ├── p04 │ ├── p05 │ ├── p06 │ ├── p07 │ ├── pr07 │ ├── pr02 │ ├── p15 │ ├── p16 │ ├── p17 │ ├── pr03 │ ├── pr08 │ ├── p08 │ ├── p09 │ ├── pr04 │ ├── p10 │ ├── p11 │ ├── p18 │ ├── p19 │ ├── p20 │ └── pr05 └── description.txt ├── utils ├── __init__.py ├── customer.py ├── io.py ├── population.py ├── depot.py └── chromosome.py ├── .github ├── ISSUE_TEMPLATE │ ├── feature_request.md │ └── bug_report.md └── workflows │ └── workflow.yml ├── ga.py ├── LICENSE ├── .gitignore ├── README.md └── CODE_OF_CONDUCT.md /conftest.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | scipy 2 | pytest 3 | numpy 4 | codecov 5 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | Any help would be appreciated even one character! 2 | -------------------------------------------------------------------------------- /data/C-mdvrp.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nikronic/Optimized-MDVRP/HEAD/data/C-mdvrp.zip -------------------------------------------------------------------------------- /data/C-mdvrp-sol.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Nikronic/Optimized-MDVRP/HEAD/data/C-mdvrp-sol.zip -------------------------------------------------------------------------------- /utils/__init__.py: -------------------------------------------------------------------------------- 1 | from utils import functional as F 2 | from utils.depot import Depot 3 | from utils.population import Population 4 | from utils.chromosome import Chromosome 5 | from utils.customer import Customer -------------------------------------------------------------------------------- /data/result/pr01.res: -------------------------------------------------------------------------------- 1 | 861.32 2 | 1 1 375.24 176.00 49 37 7 41 36 31 44 32 39 43 46 42 9 35 49 3 | 2 1 249.26 140.00 50 22 27 3 6 48 45 11 10 34 50 4 | 3 1 398.23 159.00 51 1 28 14 4 19 20 33 13 8 5 29 16 51 5 | 4 1 391.59 182.00 52 2 15 25 23 26 18 17 40 38 12 21 24 47 30 52 -------------------------------------------------------------------------------- /data/result/p02.res: -------------------------------------------------------------------------------- 1 | 473.53 2 | 1 1 87.04 154 0 4 47 18 13 41 40 19 42 0 3 | 2 1 101.91 157 0 6 14 25 24 43 7 23 48 27 46 0 4 | 3 1 74.27 153 0 38 11 2 16 50 21 34 30 9 0 5 | 3 2 95.30 158 0 10 39 33 45 15 44 37 17 12 5 49 0 6 | 4 1 115.02 155 0 20 35 36 3 28 31 26 8 22 1 32 29 0 7 | -------------------------------------------------------------------------------- /data/result/pr07.res: -------------------------------------------------------------------------------- 1 | 1089.56 2 | 1 1 492.15 193.00 73 27 60 70 30 42 19 9 11 6 33 65 10 31 20 18 71 36 73 3 | 2 1 400.02 193.00 74 49 61 37 58 7 43 26 23 1 64 47 12 68 74 4 | 3 1 272.66 196.00 75 69 62 44 34 22 54 56 3 16 15 45 8 75 5 | 4 1 484.52 174.00 76 13 59 51 17 41 50 57 24 63 5 72 53 46 28 52 76 6 | 5 1 247.53 96.00 77 66 48 21 55 4 29 40 67 14 77 7 | 6 1 200.68 96.00 78 35 2 38 39 32 25 78 -------------------------------------------------------------------------------- /data/result/p01.res: -------------------------------------------------------------------------------- 1 | 576.87 2 | 1 1 60.06 71 0 44 45 33 15 37 17 0 3 | 1 2 66.55 79 0 42 19 40 41 13 0 4 | 1 3 47.00 78 0 25 18 4 0 5 | 2 1 53.44 73 0 6 27 1 32 11 46 0 6 | 2 2 79.47 80 0 48 8 26 31 28 22 0 7 | 2 3 81.40 77 0 23 7 43 24 14 0 8 | 2 4 23.50 54 0 12 47 0 9 | 3 1 50.41 75 0 9 34 30 39 10 0 10 | 3 2 25.22 54 0 49 5 38 0 11 | 4 1 47.67 67 0 35 36 3 20 0 12 | 4 2 42.14 69 0 21 50 16 2 29 0 13 | -------------------------------------------------------------------------------- /data/result/p12.res: -------------------------------------------------------------------------------- 1 | 1318.95 2 | 1 1 128.48 51 0 4 12 20 28 36 22 14 6 0 3 | 1 2 189.57 57 0 7 15 23 31 39 67 75 40 32 24 16 8 0 4 | 1 3 170.71 54 0 5 13 21 29 37 35 27 19 11 3 0 5 | 1 4 170.71 54 0 1 9 17 25 33 34 26 18 10 2 0 6 | 2 1 128.48 51 0 45 53 61 69 77 59 51 43 0 7 | 2 2 170.71 54 0 47 55 63 71 79 80 72 64 56 48 0 8 | 2 3 189.57 57 0 42 50 58 66 74 30 38 73 65 57 49 41 0 9 | 2 4 170.71 54 0 46 54 62 70 78 76 68 60 52 44 0 10 | -------------------------------------------------------------------------------- /data/result/p13.res: -------------------------------------------------------------------------------- 1 | 1318.95 2 | 1 1 170.71 54 0 3 11 19 27 35 34 26 18 10 2 0 3 | 1 2 128.48 51 0 8 16 24 37 29 21 13 5 0 4 | 1 3 189.57 57 0 7 15 23 31 39 65 73 38 30 22 14 6 0 5 | 1 4 170.71 54 0 1 9 17 25 33 36 28 20 12 4 0 6 | 2 1 128.48 51 0 41 49 57 76 68 60 52 44 0 7 | 2 2 170.71 54 0 45 53 61 69 77 80 72 64 56 48 0 8 | 2 3 189.57 57 0 42 50 58 66 74 32 40 75 67 59 51 43 0 9 | 2 4 170.71 54 0 47 55 63 71 79 78 70 62 54 46 0 10 | -------------------------------------------------------------------------------- /data/result/p14.res: -------------------------------------------------------------------------------- 1 | 1360.12 2 | 1 1 170.71 54 0 4 12 20 28 36 33 25 17 9 1 0 3 | 1 2 174.56 54 0 6 14 22 30 38 73 31 23 15 7 0 4 | 1 3 170.71 54 0 3 11 19 27 35 34 26 18 10 2 0 5 | 1 4 170.71 54 0 8 16 24 32 40 37 29 21 13 5 0 6 | 2 1 170.71 54 0 48 56 64 72 80 79 71 63 55 47 0 7 | 2 2 161.29 54 0 42 50 58 66 74 39 65 57 49 41 0 8 | 2 3 170.71 54 0 43 51 59 67 75 77 69 61 53 45 0 9 | 2 4 170.71 54 0 44 52 60 68 76 78 70 62 54 46 0 10 | -------------------------------------------------------------------------------- /data/result/p05.res: -------------------------------------------------------------------------------- 1 | 750.03 2 | 1 1 138.91 197 0 89 27 69 1 70 30 32 90 63 64 49 36 47 46 45 0 3 | 1 2 60.16 195 0 60 6 94 13 95 97 92 37 100 98 93 59 99 96 0 4 | 1 3 94.91 198 0 18 52 7 88 31 10 62 11 19 48 82 8 83 0 5 | 1 4 84.18 198 0 5 61 85 91 16 44 14 38 86 17 84 0 6 | 2 1 127.89 195 0 76 50 33 81 9 51 20 66 65 71 35 34 78 29 24 0 7 | 2 2 27.97 92 0 77 3 79 68 80 0 8 | 2 3 124.14 196 0 12 28 53 58 2 57 87 42 43 15 41 22 73 21 40 26 0 9 | 2 4 91.86 187 0 4 72 74 75 56 23 67 39 25 55 54 0 10 | -------------------------------------------------------------------------------- /data/result/pr02.res: -------------------------------------------------------------------------------- 1 | 1307.61 2 | 1 1 479.98 164.00 97 81 86 19 74 93 92 38 68 27 8 13 63 43 41 97 3 | 1 2 341.16 176.00 97 73 62 37 25 60 72 95 29 57 54 58 70 59 84 97 4 | 2 1 469.05 195.00 98 7 5 39 64 16 20 55 44 17 69 9 94 98 5 | 2 2 240.08 178.00 98 78 88 33 32 87 65 47 1 85 22 42 98 6 | 3 1 403.44 193.00 99 56 66 36 71 53 12 3 76 50 51 6 48 10 2 80 24 18 14 67 99 7 | 3 2 29.90 10.00 99 96 99 8 | 4 1 408.91 194.00 100 79 35 82 34 49 40 75 83 23 30 15 46 91 26 21 28 11 100 9 | 4 2 221.09 110.00 100 89 52 61 90 77 4 31 45 100 -------------------------------------------------------------------------------- /data/result/p03.res: -------------------------------------------------------------------------------- 1 | 641.19 2 | 1 1 27.76 106 0 4 34 46 67 0 3 | 1 2 39.71 99 0 26 17 51 6 68 75 0 4 | 2 1 63.78 123 0 5 37 20 70 60 71 69 36 47 0 5 | 2 2 50.46 140 0 48 21 74 2 30 45 29 0 6 | 3 1 72.50 127 0 35 8 52 27 15 57 13 54 19 0 7 | 3 2 57.53 138 0 14 59 66 65 11 0 8 | 3 3 77.20 134 0 7 58 72 31 10 38 53 0 9 | 4 1 42.34 122 0 40 12 39 9 32 0 10 | 4 2 87.79 135 0 3 44 50 25 55 18 24 49 16 0 11 | 5 1 53.04 127 0 43 41 56 23 63 33 73 1 0 12 | 5 2 69.07 113 0 62 28 61 22 64 42 0 13 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: '' 5 | labels: enhancement 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Is your feature request related to a problem? Please describe.** 11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 12 | 13 | **Describe the solution you'd like** 14 | A clear and concise description of what you want to happen. 15 | 16 | **Describe alternatives you've considered** 17 | A clear and concise description of any alternative solutions or features you've considered. 18 | 19 | **Additional context** 20 | Add any other context or screenshots about the feature request here. 21 | -------------------------------------------------------------------------------- /ga.py: -------------------------------------------------------------------------------- 1 | from utils.chromosome import Chromosome 2 | from utils.depot import Depot 3 | from utils.customer import Customer 4 | import utils.io as IO 5 | import utils.functional as F 6 | 7 | # Hyper-parameters 8 | POPULATION_SIZE = 10 9 | ITERATION = 100 10 | 11 | # Initialization 12 | depots, customers = IO.single_data_loader('data/input/p01', 'data/result/p01.res') 13 | sample = F.generate_chromosome_sample(depots, customers) 14 | population = F.generate_initial_population(sample, POPULATION_SIZE) 15 | for ch in population: 16 | ch.fitness_value([1, 1]) 17 | 18 | # Iteration 19 | for i in range(ITERATION): 20 | new_population = F.generate_new_population(population) 21 | for ch in new_population: 22 | ch.fitness_value() 23 | # describe population 24 | 25 | 26 | -------------------------------------------------------------------------------- /data/result/p04.res: -------------------------------------------------------------------------------- 1 | 1001.59 2 | 1 1 76.51 96 0 41 23 67 39 56 0 3 | 1 2 59.50 93 0 96 6 89 27 28 53 58 0 4 | 1 3 88.39 100 0 92 61 16 86 38 43 15 0 5 | 1 4 60.71 98 0 57 42 14 44 91 100 98 37 97 0 6 | 1 5 40.57 87 0 21 72 74 75 22 2 0 7 | 1 6 73.41 99 0 73 4 25 55 54 12 26 40 0 8 | 1 7 41.56 100 0 59 99 93 85 0 9 | 1 8 28.69 96 0 87 95 94 13 0 10 | 2 1 74.12 100 0 69 76 77 68 80 24 29 3 0 11 | 2 2 89.62 99 0 51 9 35 71 65 66 70 0 12 | 2 3 84.30 95 0 8 45 17 84 5 60 83 18 52 0 13 | 2 4 107.18 98 0 63 64 49 36 47 46 82 0 14 | 2 5 64.10 100 0 33 81 34 78 79 50 1 0 15 | 2 6 59.81 98 0 88 7 48 19 11 62 0 16 | 2 7 53.10 99 0 31 10 90 32 20 30 0 17 | -------------------------------------------------------------------------------- /data/result/p07.res: -------------------------------------------------------------------------------- 1 | 885.80 2 | 1 1 46.39 99 0 82 48 47 8 83 0 3 | 1 2 45.73 95 0 5 61 16 86 17 0 4 | 1 3 39.74 100 0 60 99 37 98 85 93 84 0 5 | 1 4 99.18 95 0 45 46 36 49 64 19 7 18 0 6 | 2 1 51.76 93 0 12 26 40 21 4 54 0 7 | 2 2 60.54 92 0 24 29 34 78 79 3 77 76 0 8 | 2 3 8.36 42 0 68 80 0 9 | 2 4 79.73 99 0 55 25 39 67 23 56 0 10 | 3 1 35.10 99 0 87 97 92 59 96 95 0 11 | 3 2 42.69 100 0 13 94 6 89 53 58 0 12 | 3 3 42.99 90 0 73 72 74 75 22 41 2 0 13 | 3 4 87.38 99 0 42 100 91 44 38 14 43 15 57 0 14 | 4 1 50.80 96 0 70 30 51 81 33 50 1 0 15 | 4 2 43.95 74 0 31 52 27 28 69 0 16 | 4 3 89.37 93 0 9 35 71 65 66 20 0 17 | 4 4 62.09 92 0 10 32 90 63 11 62 88 0 18 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: '' 5 | labels: '' 6 | assignees: Nikronic 7 | 8 | --- 9 | 10 | **Describe the bug** 11 | A clear and concise description of what the bug is. 12 | 13 | **To Reproduce** 14 | Steps to reproduce the behavior: 15 | 1. Input 16 | 2. See error 17 | 18 | **Expected behavior** 19 | A clear and concise description of what you expected to happen. 20 | 21 | **Screenshots** 22 | If applicable, add screenshots to help explain your problem. 23 | 24 | **Desktop (please complete the following information):** 25 | - OS: [e.g. Windows] 26 | - Python Version 27 | - Numpy Version 28 | - Random Seed Values in Numpy and Python 29 | 30 | **Additional context** 31 | Add any other context about the problem here. 32 | -------------------------------------------------------------------------------- /data/result/p06.res: -------------------------------------------------------------------------------- 1 | 876.50 2 | 1 1 4.47 41 0 85 0 3 | 1 2 42.58 89 0 91 44 38 86 16 0 4 | 1 3 18.37 77 0 93 59 98 100 0 5 | 1 4 70.08 100 0 37 97 87 2 57 15 43 42 14 0 6 | 1 5 37.91 95 0 92 95 13 94 6 96 99 0 7 | 1 6 58.55 87 0 5 60 83 8 45 17 84 61 0 8 | 2 1 50.53 91 0 56 23 67 39 0 9 | 2 2 67.85 99 0 54 80 68 29 24 55 25 4 0 10 | 2 3 38.49 94 0 72 75 41 22 74 73 21 0 11 | 2 4 55.08 93 0 26 12 28 53 58 40 0 12 | 3 1 95.71 99 0 51 9 71 65 35 34 78 50 0 13 | 3 2 57.29 99 0 62 19 47 48 0 14 | 3 3 55.18 99 0 70 30 20 66 32 10 0 15 | 3 4 57.06 100 0 33 81 79 3 77 76 0 16 | 3 5 106.54 100 0 88 7 82 46 36 49 64 11 63 90 0 17 | 3 6 60.81 95 0 31 52 18 89 27 69 1 0 18 | -------------------------------------------------------------------------------- /data/result/pr03.res: -------------------------------------------------------------------------------- 1 | 1806.60 2 | 1 1 406.31 183.00 145 95 13 27 114 110 119 69 40 52 88 121 127 14 73 129 133 145 3 | 1 2 168.26 104.00 145 62 26 1 132 139 3 80 17 145 4 | 1 3 196.57 158.00 145 91 45 87 109 107 5 28 35 11 71 39 145 5 | 2 1 445.26 144.00 146 4 6 126 54 120 33 93 76 116 49 98 55 75 146 6 | 2 2 402.12 190.00 146 24 70 79 19 141 74 100 72 50 10 112 12 78 108 46 51 146 7 | 2 3 430.42 162.00 146 117 8 56 125 67 85 57 36 61 111 34 83 115 101 105 135 37 146 8 | 3 1 236.54 138.00 147 32 81 122 23 130 99 144 118 42 147 9 | 3 2 327.19 184.00 147 2 64 137 77 30 90 7 134 97 48 102 94 147 10 | 3 3 440.90 188.00 147 44 38 31 103 20 113 60 136 47 140 89 9 131 142 124 147 11 | 4 1 -0.00 0.00 148 148 12 | 4 2 389.17 180.00 148 92 63 41 15 143 84 106 138 96 66 53 82 59 29 65 21 86 148 13 | 4 3 166.85 157.00 148 43 104 22 58 68 25 128 123 18 16 148 -------------------------------------------------------------------------------- /data/result/pr08.res: -------------------------------------------------------------------------------- 1 | 1666.60 2 | 1 1 270.50 176.00 145 40 53 129 140 109 34 104 10 35 63 25 101 102 28 145 3 | 1 2 432.14 189.00 145 39 93 141 116 82 84 27 80 57 29 73 7 96 122 145 4 | 2 1 345.65 190.00 146 90 8 38 16 22 61 113 103 4 18 118 51 128 42 50 146 5 | 2 2 14.05 17.00 146 23 146 6 | 3 1 250.79 168.00 147 41 136 107 83 64 85 1 76 32 91 147 7 | 3 2 216.60 186.00 147 56 135 46 24 15 125 77 5 68 108 45 33 147 8 | 4 1 464.59 162.00 148 19 3 139 134 121 119 49 143 69 9 120 26 110 12 142 148 9 | 4 2 272.55 183.00 148 132 65 59 54 123 44 115 127 97 74 106 133 148 10 | 5 1 375.06 179.00 149 14 105 67 70 79 117 6 87 126 88 37 62 149 11 | 5 2 263.76 185.00 149 21 100 58 60 94 89 86 95 52 124 36 112 138 149 12 | 6 1 312.13 190.00 150 144 81 55 131 137 31 30 2 48 92 43 72 150 13 | 6 2 348.78 181.00 150 75 13 114 47 66 11 78 20 98 130 111 17 71 99 150 -------------------------------------------------------------------------------- /utils/customer.py: -------------------------------------------------------------------------------- 1 | class Customer: 2 | """ 3 | Customer class represents each node to be serviced by the vehicles. 4 | These customers is going to fll `Depot` classes. 5 | """ 6 | 7 | def __init__(self, id, x, y, cost, null=False): 8 | """ 9 | 10 | :param id: ID assigned to node for tracking 11 | :param x: X coordinate of depot 12 | :param y: Y coordinate of depot 13 | :param cost: The cost of servicing each depot 14 | (in this project, it is 'weight' because vehicles have weight limit) 15 | :param null: True if the depot is fake and used to split the list of customers as a route in each depot. 16 | 17 | :return: 18 | """ 19 | 20 | self.id = id 21 | self.x = x 22 | self.y = y 23 | self.cost = cost 24 | self.null = null 25 | 26 | def describe(self): 27 | print('ID:{}, coordinate=[{}, {}], cost={}, separator={}'.format( 28 | self.id, self.x, self.y, self.cost, self.null)) 29 | -------------------------------------------------------------------------------- /data/result/p15.res: -------------------------------------------------------------------------------- 1 | 2505.42 2 | 1 1 147.80 53 0 3 11 19 27 34 26 18 10 2 0 3 | 1 2 170.71 54 0 1 9 17 25 33 36 28 20 12 4 0 4 | 1 3 233.14 60 0 15 23 31 39 74 66 58 50 49 57 65 73 38 30 22 14 0 5 | 1 4 54.14 48 0 6 7 8 5 0 6 | 2 1 233.14 60 0 53 61 69 77 116 108 100 92 89 97 105 113 75 67 59 51 0 7 | 2 2 54.14 48 0 41 42 43 45 0 8 | 2 3 188.93 55 0 48 56 64 72 118 80 79 71 63 55 47 0 9 | 2 4 170.71 54 0 46 54 62 70 78 76 68 60 52 44 0 10 | 3 1 147.80 53 0 86 94 102 110 119 111 103 95 87 0 11 | 3 2 54.14 48 0 83 82 81 84 0 12 | 3 3 170.71 54 0 85 93 101 109 117 120 112 104 96 88 0 13 | 3 4 233.14 60 0 90 98 106 114 159 151 143 135 136 144 152 160 115 107 99 91 0 14 | 4 1 54.14 48 0 124 126 127 128 0 15 | 4 2 233.14 60 0 132 140 148 156 37 29 21 13 16 24 32 40 158 150 142 134 0 16 | 4 3 170.71 54 0 123 131 139 147 155 157 149 141 133 125 0 17 | 4 4 188.93 55 0 121 129 137 145 35 153 154 146 138 130 122 0 18 | -------------------------------------------------------------------------------- /data/result/p16.res: -------------------------------------------------------------------------------- 1 | 2572.23 2 | 1 1 196.08 58 0 5 13 21 29 37 156 145 153 35 27 19 11 3 0 3 | 1 2 170.71 54 0 1 9 17 25 33 34 26 18 10 2 0 4 | 1 3 128.48 51 0 6 14 22 36 28 20 12 4 0 5 | 1 4 96.57 46 0 8 16 31 23 15 7 0 6 | 2 1 198.99 60 0 43 51 59 67 75 113 105 97 69 61 53 45 0 7 | 2 2 196.08 58 0 41 49 57 65 73 38 30 39 74 66 58 50 42 0 8 | 2 3 128.48 51 0 47 55 63 71 79 64 56 48 0 9 | 2 4 170.71 54 0 46 54 62 70 78 76 68 60 52 44 0 10 | 3 1 196.08 58 0 86 94 102 110 118 80 72 77 116 108 100 92 84 0 11 | 3 2 170.71 54 0 88 96 104 112 120 119 111 103 95 87 0 12 | 3 3 96.57 46 0 81 89 106 98 90 82 0 13 | 3 4 128.48 51 0 83 91 99 117 109 101 93 85 0 14 | 4 1 198.99 60 0 126 134 142 150 158 40 32 24 148 140 132 124 0 15 | 4 2 128.48 51 0 122 130 138 146 154 137 129 121 0 16 | 4 3 170.71 54 0 125 133 141 149 157 155 147 139 131 123 0 17 | 4 4 196.08 58 0 127 135 143 151 159 114 107 115 160 152 144 136 128 0 18 | -------------------------------------------------------------------------------- /data/result/p17.res: -------------------------------------------------------------------------------- 1 | 2709.09 2 | 1 1 170.71 54 0 1 9 17 25 33 36 28 20 12 4 0 3 | 1 2 174.56 54 0 7 15 23 31 73 38 30 22 14 6 0 4 | 1 3 170.71 54 0 2 10 18 26 34 35 27 19 11 3 0 5 | 1 4 161.29 54 0 5 13 21 29 37 156 32 24 16 8 0 6 | 2 1 170.71 54 0 47 55 63 71 79 80 72 64 56 48 0 7 | 2 2 170.71 54 0 46 54 62 70 78 76 68 60 52 44 0 8 | 2 3 161.29 54 0 42 50 58 66 74 39 65 57 49 41 0 9 | 2 4 161.29 54 0 45 53 61 69 77 116 67 59 51 43 0 10 | 3 1 170.71 54 0 86 94 102 110 118 119 111 103 95 87 0 11 | 3 2 161.29 54 0 82 90 98 106 114 159 107 99 91 83 0 12 | 3 3 174.56 54 0 84 92 100 108 75 113 105 97 89 81 0 13 | 3 4 170.71 54 0 85 93 101 109 117 120 112 104 96 88 0 14 | 4 1 174.56 54 0 128 136 144 152 160 115 151 143 135 127 0 15 | 4 2 174.56 54 0 126 134 142 150 158 40 148 140 132 124 0 16 | 4 3 170.71 54 0 121 129 137 145 153 154 146 138 130 122 0 17 | 4 4 170.71 54 0 125 133 141 149 157 155 147 139 131 123 0 18 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 M. Doosti Lakhani 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /data/result/pr04.res: -------------------------------------------------------------------------------- 1 | 2072.52 2 | 1 1 245.42 183.00 193 148 12 152 89 65 32 9 177 104 82 193 3 | 1 2 -0.00 0.00 193 193 4 | 1 3 232.84 166.00 193 154 18 90 153 189 15 121 71 50 161 180 193 5 | 1 4 436.49 175.00 193 68 67 56 42 141 192 76 181 21 35 5 117 165 193 6 | 2 1 251.36 179.00 194 3 38 70 13 174 131 176 80 155 74 72 188 123 194 7 | 2 2 376.55 180.00 194 173 7 81 150 95 60 2 30 172 46 183 116 110 25 194 8 | 2 3 348.08 177.00 194 137 79 149 73 108 142 57 122 11 111 107 125 178 58 194 9 | 2 4 -0.00 0.00 194 194 10 | 3 1 358.34 182.00 195 190 157 145 128 133 59 129 97 19 109 167 130 139 16 34 195 11 | 3 2 433.86 184.00 195 39 47 162 132 55 159 127 85 52 160 53 64 24 134 93 195 12 | 3 3 164.42 149.00 195 113 27 106 138 66 14 135 186 91 195 13 | 3 4 236.95 182.00 195 62 77 22 69 115 99 171 33 168 187 36 98 10 195 14 | 4 1 436.71 183.00 196 87 45 170 158 4 120 86 1 105 20 40 147 31 140 182 101 112 196 15 | 4 2 326.18 172.00 196 94 41 83 124 49 63 28 84 136 6 169 96 26 114 43 102 184 78 100 175 196 16 | 4 3 435.93 180.00 196 44 17 92 146 103 179 48 166 75 126 118 191 61 156 54 29 196 17 | 4 4 287.39 185.00 196 8 37 185 119 23 51 151 88 164 143 163 144 196 -------------------------------------------------------------------------------- /.github/workflows/workflow.yml: -------------------------------------------------------------------------------- 1 | name: Python package 2 | 3 | on: [push] 4 | 5 | jobs: 6 | build: 7 | 8 | runs-on: ubuntu-latest 9 | strategy: 10 | max-parallel: 4 11 | matrix: 12 | python-version: [3.6, 3.7] 13 | 14 | steps: 15 | - uses: actions/checkout@v1 16 | - name: Set up Python ${{ matrix.python-version }} 17 | uses: actions/setup-python@v1 18 | with: 19 | python-version: ${{ matrix.python-version }} 20 | - name: Install dependencies 21 | run: | 22 | python -m pip install --upgrade pip 23 | pip install -r requirements.txt 24 | - name: Lint with flake8 25 | run: | 26 | pip install flake8 27 | # stop the build if there are Python syntax errors or undefined names 28 | flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics 29 | # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide 30 | flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics 31 | - name: Test with pytest 32 | run: | 33 | pytest 34 | - name: Test with pytest 2 35 | run: | 36 | pytest 37 | - name: Test with pytest 3 38 | run: | 39 | pytest 40 | - name: Test with pytest 4 41 | run: | 42 | pytest 43 | - name: Test with pytest 5 44 | run: | 45 | pytest 46 | 47 | -------------------------------------------------------------------------------- /data/result/pr09.res: -------------------------------------------------------------------------------- 1 | 2153.10 2 | 1 1 411.63 180.00 217 172 123 36 79 58 3 2 103 60 15 117 56 78 59 217 3 | 1 2 248.18 98.00 217 167 30 190 169 13 161 191 216 101 153 29 86 217 4 | 1 3 193.28 178.00 217 67 180 110 47 64 39 23 214 120 105 150 217 5 | 2 1 277.47 178.00 218 5 131 122 109 148 102 84 31 69 182 21 189 156 218 6 | 2 2 414.30 180.00 218 207 197 187 87 176 46 211 92 33 72 25 7 85 128 35 76 118 218 7 | 2 3 73.78 85.00 218 73 16 121 127 108 218 8 | 3 1 206.36 147.00 219 177 135 104 163 199 94 80 52 115 152 149 219 9 | 3 2 333.16 166.00 219 202 11 171 26 12 137 82 186 168 194 88 6 124 209 219 10 | 3 3 328.42 170.00 219 205 162 41 95 77 32 141 14 147 20 130 18 1 143 43 4 219 11 | 4 1 272.14 172.00 220 144 37 98 38 28 66 112 213 99 70 40 100 193 142 192 178 220 12 | 4 2 362.78 171.00 220 184 198 63 45 106 55 129 91 10 159 62 210 220 13 | 4 3 254.11 158.00 220 174 151 140 119 68 158 126 133 139 146 83 157 220 14 | 5 1 359.80 180.00 221 201 165 96 8 17 44 34 185 196 61 22 132 212 114 221 15 | 5 2 225.58 160.00 221 215 170 200 97 181 75 116 71 134 183 145 48 51 221 16 | 5 3 264.70 180.00 221 74 57 208 93 107 195 160 49 50 155 221 17 | 6 1 236.75 153.00 222 65 19 125 203 166 90 27 54 53 111 154 206 204 222 18 | 6 2 266.65 180.00 222 179 138 164 9 81 42 24 173 136 175 89 113 188 222 19 | 6 3 -0.00 0.00 222 222 -------------------------------------------------------------------------------- /data/result/p18.res: -------------------------------------------------------------------------------- 1 | 3702.85 2 | 1 1 188.93 55 0 6 14 22 30 73 38 36 28 20 12 4 0 3 | 1 2 60.00 60 0 2 3 5 8 7 0 4 | 1 3 221.42 60 0 10 18 26 34 239 231 214 222 230 238 33 25 17 9 1 0 5 | 2 1 233.14 60 0 56 64 72 80 118 110 102 94 92 100 108 116 77 69 61 53 0 6 | 2 2 147.80 53 0 41 49 57 65 76 68 60 52 44 0 7 | 2 3 54.14 48 0 42 43 45 48 0 8 | 2 4 170.71 54 0 47 55 63 71 79 78 70 62 54 46 0 9 | 2 5 233.14 60 0 50 58 66 74 39 31 23 15 16 24 32 40 75 67 59 51 0 10 | 3 1 54.14 48 0 86 84 81 82 0 11 | 3 2 170.71 54 0 88 96 104 112 120 119 111 103 95 87 0 12 | 3 3 188.93 55 0 83 91 99 107 160 115 117 109 101 93 85 0 13 | 4 1 233.14 60 0 135 143 151 159 114 106 98 90 89 97 105 113 158 150 142 134 0 14 | 4 2 147.80 53 0 128 136 144 152 157 149 141 133 125 0 15 | 4 3 60.00 60 0 127 126 124 121 122 0 16 | 4 4 233.14 60 0 132 140 148 156 37 29 21 13 11 19 27 35 153 145 137 129 0 17 | 4 5 221.42 60 0 130 138 146 154 199 191 176 184 192 200 155 147 139 131 123 0 18 | 19 | 5 1 86.50 60 0 167 168 175 183 166 164 0 20 | 5 2 188.93 55 0 161 169 177 185 235 193 194 186 178 170 162 0 21 | 5 3 170.71 54 0 163 171 179 187 195 197 189 181 173 165 0 22 | 6 1 233.14 60 0 213 221 229 237 196 188 180 172 174 182 190 198 240 232 224 216 0 23 | 6 2 170.71 54 0 201 209 217 225 233 236 228 220 212 204 0 24 | 6 3 147.80 53 0 203 211 219 227 234 226 218 210 202 0 25 | 6 4 86.50 60 0 207 206 223 215 208 205 0 26 | -------------------------------------------------------------------------------- /data/result/p19.res: -------------------------------------------------------------------------------- 1 | 3827.06 2 | 1 1 196.08 58 0 3 11 19 27 35 153 145 156 37 29 21 13 5 0 3 | 1 2 196.08 58 0 2 10 18 26 34 239 230 238 33 25 17 9 1 0 4 | 1 3 128.48 51 0 6 14 22 36 28 20 12 4 0 5 | 1 4 96.57 46 0 8 16 31 23 15 7 0 6 | 2 1 170.71 54 0 46 54 62 70 78 76 68 60 52 44 0 7 | 2 2 128.48 51 0 48 56 64 79 71 63 55 47 0 8 | 2 3 198.99 60 0 43 51 59 67 75 113 105 97 69 61 53 45 0 9 | 2 4 196.08 58 0 42 50 58 66 74 39 30 38 73 65 57 49 41 0 10 | 3 1 170.71 54 0 88 96 104 112 120 119 111 103 95 87 0 11 | 3 2 128.48 51 0 85 93 101 109 117 99 91 83 0 12 | 3 3 96.57 46 0 82 90 98 106 89 81 0 13 | 3 4 196.08 58 0 84 92 100 108 116 77 72 80 118 110 102 94 86 0 14 | 4 1 196.08 58 0 127 135 143 151 159 114 107 115 160 152 144 136 128 0 15 | 4 2 128.48 51 0 123 131 139 157 149 141 133 125 0 16 | 4 3 114.05 50 0 121 129 137 146 138 130 122 0 17 | 4 4 198.99 60 0 126 134 142 150 158 40 32 24 148 140 132 124 0 18 | 5 1 196.08 58 0 167 175 183 191 199 154 147 155 200 192 184 176 168 0 19 | 5 2 170.71 54 0 163 171 179 187 195 197 189 181 173 165 0 20 | 5 3 128.48 51 0 161 169 177 194 186 178 170 162 0 21 | 5 4 198.99 60 0 166 174 182 190 198 240 232 224 188 180 172 164 0 22 | 6 1 170.71 54 0 201 209 217 225 233 234 226 218 210 202 0 23 | 6 2 128.48 51 0 206 214 222 236 228 220 212 204 0 24 | 6 3 96.57 46 0 208 216 231 223 215 207 0 25 | 6 4 196.08 58 0 203 211 219 227 235 193 185 196 237 229 221 213 205 0 26 | -------------------------------------------------------------------------------- /data/result/p20.res: -------------------------------------------------------------------------------- 1 | 4058.07 2 | 1 1 161.29 54 0 1 9 17 25 239 34 26 18 10 2 0 3 | 1 2 170.71 54 0 6 14 22 30 38 36 28 20 12 4 0 4 | 1 3 161.29 54 0 8 16 24 32 74 39 31 23 15 7 0 5 | 1 4 174.56 54 0 3 11 19 27 35 153 29 21 13 5 0 6 | 2 1 174.56 54 0 48 56 64 72 80 118 69 61 53 45 0 7 | 2 2 174.56 54 0 43 51 59 67 75 40 66 58 50 42 0 8 | 2 3 170.71 54 0 41 49 57 65 73 76 68 60 52 44 0 9 | 2 4 170.71 54 0 46 54 62 70 78 79 71 63 55 47 0 10 | 3 1 161.29 54 0 86 94 102 110 77 116 108 100 92 84 0 11 | 3 2 170.71 54 0 88 96 104 112 120 119 111 103 95 87 0 12 | 3 3 170.71 54 0 83 91 99 107 115 117 109 101 93 85 0 13 | 3 4 161.29 54 0 81 89 97 105 159 114 106 98 90 82 0 14 | 4 1 161.29 54 0 123 131 139 147 199 154 146 138 130 122 0 15 | 4 2 161.29 54 0 121 129 137 145 37 156 148 140 132 124 0 16 | 4 3 174.56 54 0 126 134 142 150 158 113 151 143 135 127 0 17 | 4 4 170.71 54 0 125 133 141 149 157 160 152 144 136 128 0 18 | 5 1 170.71 54 0 163 171 179 187 195 197 189 181 173 165 0 19 | 5 2 170.71 54 0 161 169 177 185 193 194 186 178 170 162 0 20 | 5 3 161.29 54 0 166 174 182 190 237 196 188 180 172 164 0 21 | 5 4 174.56 54 0 168 176 184 192 200 155 191 183 175 167 0 22 | 6 1 170.71 54 0 203 211 219 227 235 234 226 218 210 202 0 23 | 6 2 170.71 54 0 201 209 217 225 233 236 228 220 212 204 0 24 | 6 3 174.56 54 0 206 214 222 230 238 33 231 223 215 207 0 25 | 6 4 174.56 54 0 208 216 224 232 240 198 229 221 213 205 0 26 | -------------------------------------------------------------------------------- /data/result/pr05.res: -------------------------------------------------------------------------------- 1 | 2385.77 2 | 1 1 180.87 178.00 241 157 15 211 158 133 102 217 81 203 142 241 3 | 1 2 290.67 178.00 241 161 124 189 150 149 226 8 82 116 230 28 135 55 241 4 | 1 3 362.83 180.00 241 75 194 1 16 117 209 228 22 90 129 4 241 5 | 1 4 295.55 178.00 241 154 51 39 94 223 180 19 200 114 57 131 33 91 241 6 | 1 5 325.55 178.00 241 193 11 84 60 224 96 44 104 168 184 48 21 160 241 7 | 2 1 309.84 174.00 242 225 207 5 145 3 205 107 13 111 108 146 118 202 162 242 8 | 2 2 -0.00 0.00 242 242 9 | 2 3 206.75 179.00 242 182 174 49 87 113 136 62 77 198 64 106 30 242 10 | 2 4 252.37 178.00 242 85 221 240 201 123 204 239 34 14 7 128 208 137 242 11 | 2 5 243.37 159.00 242 132 79 227 105 148 59 183 188 35 101 213 212 242 12 | 3 1 227.25 158.00 243 32 206 185 192 24 73 66 190 9 243 13 | 3 2 409.53 180.00 243 112 103 219 89 38 93 78 41 199 45 74 12 243 14 | 3 3 392.34 178.00 243 53 120 191 167 31 186 222 6 195 172 181 83 170 243 15 | 3 4 396.05 179.00 243 10 156 138 171 236 42 152 126 169 234 69 25 97 140 139 175 243 16 | 3 5 233.28 176.00 243 37 197 177 80 20 235 187 29 151 100 121 166 243 17 | 4 1 317.24 179.00 244 164 178 176 109 70 46 52 216 40 233 127 229 218 238 244 18 | 4 2 267.39 180.00 244 163 119 71 50 88 155 58 86 220 159 92 67 244 19 | 4 3 216.51 180.00 244 143 72 43 99 179 26 196 23 17 63 144 244 20 | 4 4 251.38 179.00 244 18 54 153 56 141 165 115 231 214 125 61 65 173 210 36 244 21 | 4 5 329.99 180.00 244 122 27 215 47 68 110 98 76 95 130 134 232 147 2 237 244 -------------------------------------------------------------------------------- /data/input/p01: -------------------------------------------------------------------------------- 1 | 2 4 50 4 2 | 0 80 3 | 0 80 4 | 0 80 5 | 0 80 6 | 1 37 52 0 7 1 4 1 2 4 8 7 | 2 49 49 0 30 1 4 1 2 4 8 8 | 3 52 64 0 16 1 4 1 2 4 8 9 | 4 20 26 0 9 1 4 1 2 4 8 10 | 5 40 30 0 21 1 4 1 2 4 8 11 | 6 21 47 0 15 1 4 1 2 4 8 12 | 7 17 63 0 19 1 4 1 2 4 8 13 | 8 31 62 0 23 1 4 1 2 4 8 14 | 9 52 33 0 11 1 4 1 2 4 8 15 | 10 51 21 0 5 1 4 1 2 4 8 16 | 11 42 41 0 19 1 4 1 2 4 8 17 | 12 31 32 0 29 1 4 1 2 4 8 18 | 13 5 25 0 23 1 4 1 2 4 8 19 | 14 12 42 0 21 1 4 1 2 4 8 20 | 15 36 16 0 10 1 4 1 2 4 8 21 | 16 52 41 0 15 1 4 1 2 4 8 22 | 17 27 23 0 3 1 4 1 2 4 8 23 | 18 17 33 0 41 1 4 1 2 4 8 24 | 19 13 13 0 9 1 4 1 2 4 8 25 | 20 57 58 0 28 1 4 1 2 4 8 26 | 21 62 42 0 8 1 4 1 2 4 8 27 | 22 42 57 0 8 1 4 1 2 4 8 28 | 23 16 57 0 16 1 4 1 2 4 8 29 | 24 8 52 0 10 1 4 1 2 4 8 30 | 25 7 38 0 28 1 4 1 2 4 8 31 | 26 27 68 0 7 1 4 1 2 4 8 32 | 27 30 48 0 15 1 4 1 2 4 8 33 | 28 43 67 0 14 1 4 1 2 4 8 34 | 29 58 48 0 6 1 4 1 2 4 8 35 | 30 58 27 0 19 1 4 1 2 4 8 36 | 31 37 69 0 11 1 4 1 2 4 8 37 | 32 38 46 0 12 1 4 1 2 4 8 38 | 33 46 10 0 23 1 4 1 2 4 8 39 | 34 61 33 0 26 1 4 1 2 4 8 40 | 35 62 63 0 17 1 4 1 2 4 8 41 | 36 63 69 0 6 1 4 1 2 4 8 42 | 37 32 22 0 9 1 4 1 2 4 8 43 | 38 45 35 0 15 1 4 1 2 4 8 44 | 39 59 15 0 14 1 4 1 2 4 8 45 | 40 5 6 0 7 1 4 1 2 4 8 46 | 41 10 17 0 27 1 4 1 2 4 8 47 | 42 21 10 0 13 1 4 1 2 4 8 48 | 43 5 64 0 11 1 4 1 2 4 8 49 | 44 30 15 0 16 1 4 1 2 4 8 50 | 45 39 10 0 10 1 4 1 2 4 8 51 | 46 32 39 0 5 1 4 1 2 4 8 52 | 47 25 32 0 25 1 4 1 2 4 8 53 | 48 25 55 0 17 1 4 1 2 4 8 54 | 49 48 28 0 18 1 4 1 2 4 8 55 | 50 56 37 0 10 1 4 1 2 4 8 56 | 51 20 20 0 0 0 0 57 | 52 30 40 0 0 0 0 58 | 53 50 30 0 0 0 0 59 | 54 60 50 0 0 0 0 60 | -------------------------------------------------------------------------------- /data/input/p02: -------------------------------------------------------------------------------- 1 | 2 2 50 4 2 | 0 160 3 | 0 160 4 | 0 160 5 | 0 160 6 | 1 37 52 0 7 1 4 1 2 4 8 7 | 2 49 49 0 30 1 4 1 2 4 8 8 | 3 52 64 0 16 1 4 1 2 4 8 9 | 4 20 26 0 9 1 4 1 2 4 8 10 | 5 40 30 0 21 1 4 1 2 4 8 11 | 6 21 47 0 15 1 4 1 2 4 8 12 | 7 17 63 0 19 1 4 1 2 4 8 13 | 8 31 62 0 23 1 4 1 2 4 8 14 | 9 52 33 0 11 1 4 1 2 4 8 15 | 10 51 21 0 5 1 4 1 2 4 8 16 | 11 42 41 0 19 1 4 1 2 4 8 17 | 12 31 32 0 29 1 4 1 2 4 8 18 | 13 5 25 0 23 1 4 1 2 4 8 19 | 14 12 42 0 21 1 4 1 2 4 8 20 | 15 36 16 0 10 1 4 1 2 4 8 21 | 16 52 41 0 15 1 4 1 2 4 8 22 | 17 27 23 0 3 1 4 1 2 4 8 23 | 18 17 33 0 41 1 4 1 2 4 8 24 | 19 13 13 0 9 1 4 1 2 4 8 25 | 20 57 58 0 28 1 4 1 2 4 8 26 | 21 62 42 0 8 1 4 1 2 4 8 27 | 22 42 57 0 8 1 4 1 2 4 8 28 | 23 16 57 0 16 1 4 1 2 4 8 29 | 24 8 52 0 10 1 4 1 2 4 8 30 | 25 7 38 0 28 1 4 1 2 4 8 31 | 26 27 68 0 7 1 4 1 2 4 8 32 | 27 30 48 0 15 1 4 1 2 4 8 33 | 28 43 67 0 14 1 4 1 2 4 8 34 | 29 58 48 0 6 1 4 1 2 4 8 35 | 30 58 27 0 19 1 4 1 2 4 8 36 | 31 37 69 0 11 1 4 1 2 4 8 37 | 32 38 46 0 12 1 4 1 2 4 8 38 | 33 46 10 0 23 1 4 1 2 4 8 39 | 34 61 33 0 26 1 4 1 2 4 8 40 | 35 62 63 0 17 1 4 1 2 4 8 41 | 36 63 69 0 6 1 4 1 2 4 8 42 | 37 32 22 0 9 1 4 1 2 4 8 43 | 38 45 35 0 15 1 4 1 2 4 8 44 | 39 59 15 0 14 1 4 1 2 4 8 45 | 40 5 6 0 7 1 4 1 2 4 8 46 | 41 10 17 0 27 1 4 1 2 4 8 47 | 42 21 10 0 13 1 4 1 2 4 8 48 | 43 5 64 0 11 1 4 1 2 4 8 49 | 44 30 15 0 16 1 4 1 2 4 8 50 | 45 39 10 0 10 1 4 1 2 4 8 51 | 46 32 39 0 5 1 4 1 2 4 8 52 | 47 25 32 0 25 1 4 1 2 4 8 53 | 48 25 55 0 17 1 4 1 2 4 8 54 | 49 48 28 0 18 1 4 1 2 4 8 55 | 50 56 37 0 10 1 4 1 2 4 8 56 | 51 20 20 0 0 0 0 57 | 52 30 40 0 0 0 0 58 | 53 50 30 0 0 0 0 59 | 54 60 50 0 0 0 0 60 | -------------------------------------------------------------------------------- /data/result/p08.res: -------------------------------------------------------------------------------- 1 | 4437.68 2 | 1 1 273.48 494 0 237 122 233 176 136 78 24 127 40 17 175 55 47 56 0 3 | 1 2 133.14 473 0 73 198 207 19 185 72 166 96 0 4 | 1 3 138.48 496 0 69 146 135 84 15 102 39 38 223 43 0 5 | 1 4 115.54 496 0 125 101 203 57 131 214 11 241 225 0 6 | 1 5 188.96 487 0 235 238 10 42 197 194 80 113 103 168 66 242 0 7 | 1 6 191.58 488 0 148 26 9 153 189 106 121 248 89 167 13 193 0 8 | 1 7 59.02 497 0 177 62 249 157 82 224 163 0 9 | 1 8 122.55 495 0 114 230 58 150 183 170 2 0 10 | 1 9 162.05 475 0 27 173 137 124 49 12 133 5 191 30 18 54 0 11 | 1 10 281.96 482 0 195 228 53 130 129 221 31 205 61 90 211 79 204 0 12 | 1 11 147.83 497 0 217 83 206 65 220 36 64 0 13 | 1 12 148.28 493 0 190 8 123 118 3 116 126 104 215 213 112 0 14 | 2 1 209.02 498 0 199 222 85 132 97 51 67 169 6 37 0 15 | 2 2 175.08 498 0 165 181 171 59 162 219 52 243 16 0 16 | 2 3 97.66 482 0 180 63 46 93 187 45 161 179 200 0 17 | 2 4 165.62 486 0 7 140 186 21 138 100 145 81 0 18 | 2 5 309.78 491 0 164 209 142 68 231 71 229 1 139 202 232 70 115 4 208 0 19 | 2 6 266.60 493 0 188 87 154 76 155 108 244 99 234 33 172 74 141 0 20 | 2 7 138.41 425 0 28 182 34 95 160 246 25 0 21 | 2 8 185.69 459 0 50 88 247 149 86 151 94 245 0 22 | 2 9 109.58 412 0 22 120 236 111 196 174 48 128 0 23 | 2 10 187.86 499 0 143 14 98 117 240 107 212 77 91 216 0 24 | 2 11 139.09 492 0 152 144 192 184 218 119 239 35 156 0 25 | 2 12 193.07 500 0 23 92 178 210 41 109 20 227 29 105 44 0 26 | 2 13 297.34 498 0 110 60 158 134 159 147 201 32 226 75 0 27 | -------------------------------------------------------------------------------- /data/result/p10.res: -------------------------------------------------------------------------------- 1 | 3663.02 2 | 1 1 131.84 480 0 111 236 23 120 22 200 179 161 93 187 45 128 0 3 | 1 2 137.33 496 0 85 169 52 219 75 162 59 181 171 105 0 4 | 1 3 192.98 488 0 37 116 126 215 3 118 16 243 6 165 222 0 5 | 1 4 210.64 492 0 132 97 67 51 147 159 134 158 60 29 0 6 | 1 5 88.55 497 0 92 178 210 41 110 109 20 227 0 7 | 1 6 85.33 494 0 117 240 98 14 143 174 48 196 0 8 | 1 7 202.45 485 0 107 212 77 91 46 216 63 180 152 208 199 44 0 9 | 2 1 120.05 498 0 242 38 39 102 15 233 136 226 176 56 0 10 | 2 2 208.98 497 0 114 26 153 189 106 121 248 89 167 13 238 0 11 | 2 3 93.39 489 0 225 157 163 224 82 235 241 0 12 | 2 4 81.49 391 0 10 42 197 194 80 113 103 66 0 13 | 2 5 151.04 497 0 122 146 84 135 123 8 190 69 177 237 62 249 43 223 0 14 | 2 6 185.49 493 0 175 78 32 201 127 40 24 17 55 47 168 0 15 | 2 7 119.96 471 0 131 214 57 203 101 193 125 64 11 0 16 | 3 1 124.88 484 0 173 217 58 183 150 220 36 0 17 | 3 2 94.98 398 0 12 61 90 221 129 130 49 124 0 18 | 3 3 238.45 482 0 133 5 33 234 142 68 231 202 139 1 229 71 31 205 211 0 19 | 3 4 123.67 440 0 18 207 166 213 112 96 73 198 204 54 0 20 | 3 5 102.47 476 0 191 79 72 185 19 30 137 0 21 | 3 6 185.47 495 0 27 195 2 170 148 9 230 83 206 65 228 53 0 22 | 4 1 157.62 442 0 160 7 246 25 141 104 74 172 140 164 0 23 | 4 2 104.01 482 0 4 81 186 21 138 209 100 145 0 24 | 4 3 143.06 497 0 188 87 154 76 155 232 70 99 108 244 115 0 25 | 4 4 37.71 162 0 95 182 34 0 26 | 4 5 219.62 497 0 50 88 247 149 86 151 94 245 119 0 27 | 4 6 121.56 483 0 35 239 218 184 192 144 156 28 0 28 | -------------------------------------------------------------------------------- /data/result/p11.res: -------------------------------------------------------------------------------- 1 | 3554.18 2 | 1 1 140.19 472 0 222 165 6 16 243 52 181 171 169 85 0 3 | 1 2 84.20 327 0 92 109 20 227 0 4 | 1 3 131.64 482 0 105 132 97 29 158 60 110 41 210 178 0 5 | 1 4 119.29 495 0 48 128 179 161 46 63 200 22 120 23 236 111 0 6 | 1 5 190.11 474 0 44 199 208 246 25 141 104 74 215 126 116 37 0 7 | 1 6 96.14 457 0 117 240 98 107 14 143 174 196 0 8 | 2 1 164.38 496 0 10 238 131 214 57 203 11 235 241 225 242 0 9 | 2 2 117.60 497 0 176 233 102 15 219 75 162 59 226 32 78 0 10 | 2 3 163.16 483 0 24 40 127 147 159 134 51 67 201 0 11 | 2 4 177.09 484 0 136 39 84 135 146 237 62 122 43 223 38 56 0 12 | 2 5 112.21 499 0 175 66 80 197 42 194 113 103 168 47 55 17 0 13 | 3 1 142.21 497 0 50 88 247 149 86 151 94 245 119 0 14 | 3 2 174.80 488 0 156 160 7 164 140 172 186 81 4 95 0 15 | 3 3 33.10 313 0 192 184 218 239 0 16 | 3 4 151.32 484 0 152 180 216 93 187 45 212 77 91 144 0 17 | 3 5 193.99 494 0 28 188 244 108 155 76 154 87 34 182 35 0 18 | 4 1 130.73 334 0 54 137 124 53 228 65 206 173 0 19 | 4 2 95.93 492 0 83 36 220 150 183 58 217 0 20 | 4 3 116.47 499 0 163 224 82 157 249 177 69 0 21 | 4 4 142.60 445 0 204 73 96 112 213 8 3 118 123 190 0 22 | 4 5 198.03 487 0 27 230 9 153 13 167 89 248 121 106 189 0 23 | 4 6 124.44 492 0 125 64 193 101 114 148 26 170 2 195 0 24 | 5 1 97.00 468 0 5 133 12 49 130 129 221 61 90 211 79 0 25 | 5 2 230.26 493 0 205 31 71 229 1 139 202 231 232 70 99 142 68 234 0 26 | 5 3 94.46 481 0 191 18 30 198 207 166 185 19 0 27 | 5 4 132.83 473 0 72 21 138 100 145 115 209 33 0 28 | -------------------------------------------------------------------------------- /data/result/p09.res: -------------------------------------------------------------------------------- 1 | 3900.22 2 | 1 1 274.07 495 0 226 175 17 24 40 127 147 159 134 29 0 3 | 1 2 93.59 497 0 227 20 109 110 41 210 178 92 0 4 | 1 3 153.00 495 0 169 52 219 15 102 16 243 6 165 222 0 5 | 1 4 190.11 474 0 44 199 208 246 25 141 104 74 215 126 116 37 0 6 | 1 5 118.45 497 0 236 179 161 46 216 180 63 200 22 120 111 0 7 | 1 6 215.13 500 0 23 144 192 184 218 119 239 35 156 152 0 8 | 1 7 82.40 414 0 196 174 143 98 240 117 0 9 | 1 8 219.07 471 0 93 50 245 94 151 86 149 247 88 77 0 10 | 1 9 153.47 470 0 14 107 212 91 187 45 128 48 0 11 | 1 10 180.06 491 0 60 158 51 201 78 32 67 97 132 0 12 | 1 11 156.64 472 0 105 59 136 176 233 75 162 181 171 85 0 13 | 2 1 113.37 497 0 58 220 65 206 83 217 2 0 14 | 2 2 173.35 490 0 204 73 198 54 30 191 18 137 173 27 195 0 15 | 2 3 164.62 498 0 157 249 62 146 84 135 3 118 123 8 190 0 16 | 2 4 129.81 475 0 148 26 9 153 189 106 121 248 89 167 13 0 17 | 2 5 68.69 287 0 203 57 131 214 101 0 18 | 2 6 192.61 499 0 241 56 66 47 55 168 103 113 80 194 197 42 10 238 0 19 | 2 7 74.85 435 0 114 230 150 36 183 170 0 20 | 2 8 93.20 445 0 224 237 177 69 163 64 125 0 21 | 2 9 146.31 497 0 193 235 11 225 242 38 39 122 223 43 82 0 22 | 3 1 200.90 500 0 79 5 133 12 49 124 228 53 130 129 221 61 90 211 0 23 | 3 2 161.31 457 0 68 142 232 231 202 139 1 229 71 31 205 234 0 24 | 3 3 77.55 365 0 209 115 4 81 186 21 138 0 25 | 3 4 91.37 437 0 100 145 244 108 155 70 99 0 26 | 3 5 214.37 478 0 172 140 164 7 160 28 182 95 34 188 87 154 76 0 27 | 3 6 161.92 470 0 213 112 96 207 166 19 185 72 33 0 28 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | 6 | # C extensions 7 | *.so 8 | 9 | # Distribution / packaging 10 | .Python 11 | build/ 12 | develop-eggs/ 13 | dist/ 14 | downloads/ 15 | eggs/ 16 | .eggs/ 17 | lib/ 18 | lib64/ 19 | parts/ 20 | sdist/ 21 | var/ 22 | wheels/ 23 | *.egg-info/ 24 | .installed.cfg 25 | *.egg 26 | MANIFEST 27 | 28 | # PyInstaller 29 | # Usually these files are written by a python script from a template 30 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 31 | *.manifest 32 | *.spec 33 | 34 | # Installer logs 35 | pip-log.txt 36 | pip-delete-this-directory.txt 37 | 38 | # Unit test / coverage reports 39 | htmlcov/ 40 | .tox/ 41 | .coverage 42 | .coverage.* 43 | .cache 44 | nosetests.xml 45 | coverage.xml 46 | *.cover 47 | .hypothesis/ 48 | .pytest_cache/ 49 | 50 | # Translations 51 | *.mo 52 | *.pot 53 | 54 | # Django stuff: 55 | *.log 56 | local_settings.py 57 | db.sqlite3 58 | 59 | # Flask stuff: 60 | instance/ 61 | .webassets-cache 62 | 63 | # Scrapy stuff: 64 | .scrapy 65 | 66 | # Sphinx documentation 67 | docs/_build/ 68 | 69 | # PyBuilder 70 | target/ 71 | 72 | # Jupyter Notebook 73 | .ipynb_checkpoints 74 | 75 | # pyenv 76 | .python-version 77 | 78 | # celery beat schedule file 79 | celerybeat-schedule 80 | 81 | # SageMath parsed files 82 | *.sage.py 83 | 84 | # Environments 85 | .env 86 | .venv 87 | env/ 88 | venv/ 89 | ENV/ 90 | env.bak/ 91 | venv.bak/ 92 | 93 | # Spyder project settings 94 | .spyderproject 95 | .spyproject 96 | 97 | # Rope project settings 98 | .ropeproject 99 | 100 | # mkdocs documentation 101 | /site 102 | 103 | # mypy 104 | .mypy_cache/ 105 | .idea/ 106 | 107 | tests/chromosome.txt 108 | -------------------------------------------------------------------------------- /data/result/pr06.res: -------------------------------------------------------------------------------- 1 | 2723.27 2 | 1 1 311.90 175.00 289 265 160 218 185 251 25 224 44 120 117 11 285 86 289 3 | 1 2 386.46 172.00 289 8 90 131 169 248 110 275 119 136 59 104 266 289 4 | 1 3 18.48 8.00 289 281 289 5 | 1 4 250.20 173.00 289 77 72 69 256 112 147 213 140 41 276 194 220 289 6 | 1 5 307.07 173.00 289 39 264 172 60 200 105 243 20 150 261 273 28 277 253 180 289 7 | 1 6 -0.00 0.00 289 289 8 | 2 1 355.16 165.00 290 177 66 114 101 198 148 288 75 202 165 5 171 15 146 17 221 38 290 9 | 2 2 399.71 171.00 290 53 233 4 79 31 32 157 240 89 71 85 222 92 235 27 204 290 10 | 2 3 389.33 170.00 290 269 254 152 186 263 258 142 158 70 43 48 115 283 260 217 290 11 | 2 4 204.44 165.00 290 179 111 109 153 247 67 49 184 255 231 242 290 12 | 2 5 188.60 148.00 290 156 100 3 173 262 284 54 245 282 290 13 | 2 6 389.27 146.00 290 135 280 144 51 10 56 226 24 257 193 35 187 272 290 14 | 3 1 271.25 174.00 291 246 196 162 241 52 259 225 199 123 36 219 26 46 102 252 291 15 | 3 2 201.40 138.00 291 98 195 267 175 279 270 137 74 87 291 16 | 3 3 226.95 174.00 291 19 14 116 91 286 34 287 197 143 76 84 291 17 | 3 4 182.74 166.00 291 106 228 139 182 128 121 30 33 167 81 291 18 | 3 5 387.72 175.00 291 78 216 103 205 159 80 68 42 212 149 230 278 122 215 291 19 | 3 6 368.31 173.00 291 163 47 108 21 45 22 161 164 93 6 214 271 124 132 201 12 291 20 | 4 1 262.73 175.00 292 274 65 2 73 113 13 234 97 29 238 16 250 151 292 21 | 4 2 237.21 154.00 292 232 133 188 249 127 99 55 138 229 95 107 191 292 22 | 4 3 331.41 168.00 292 237 96 126 174 63 134 244 7 94 206 50 62 57 64 292 23 | 4 4 261.50 168.00 292 40 18 82 203 61 227 239 155 183 170 23 292 24 | 4 5 392.33 166.00 292 208 207 178 9 189 141 37 192 154 1 129 166 88 130 210 236 223 292 25 | 4 6 232.09 174.00 292 209 58 268 176 118 190 125 168 83 145 211 181 292 -------------------------------------------------------------------------------- /data/result/pr10.res: -------------------------------------------------------------------------------- 1 | 2921.85 2 | 1 1 217.89 160.00 289 62 14 175 138 280 70 235 50 64 206 246 289 3 | 1 2 424.81 140.00 289 95 30 234 53 256 107 58 210 82 33 195 113 135 229 289 4 | 1 3 351.43 170.00 289 164 55 236 96 57 272 217 67 187 197 24 104 80 289 5 | 1 4 276.62 166.00 289 40 288 13 23 142 147 240 36 154 26 146 52 83 47 289 6 | 2 1 229.12 168.00 290 276 86 35 249 94 161 268 51 122 290 7 | 2 2 220.14 167.00 290 112 93 207 177 193 173 190 143 261 251 17 157 233 290 8 | 2 3 220.30 169.00 290 160 118 274 277 129 32 92 201 18 166 22 192 10 290 9 | 2 4 231.57 163.00 290 179 100 108 126 180 119 259 226 219 264 153 290 10 | 3 1 341.38 164.00 291 145 156 285 282 245 224 162 239 220 15 196 91 212 106 291 11 | 3 2 314.00 166.00 291 139 170 178 211 191 241 39 11 204 254 130 199 262 291 12 | 3 3 196.34 170.00 291 29 42 151 34 134 28 20 141 275 69 87 291 13 | 3 4 258.75 163.00 291 1 21 286 222 16 248 2 258 46 131 232 205 49 43 291 14 | 4 1 335.03 169.00 292 163 214 31 216 270 231 273 227 186 172 73 12 133 253 61 292 15 | 4 2 418.26 169.00 292 218 136 3 252 125 167 183 120 194 198 5 45 137 292 16 | 4 3 212.90 164.00 292 127 159 283 271 202 109 76 221 181 66 267 97 292 17 | 4 4 259.46 170.00 292 25 114 213 284 124 269 168 225 228 8 247 257 292 18 | 5 1 168.08 168.00 293 79 185 115 158 152 128 203 243 110 27 293 19 | 5 2 393.82 170.00 293 6 38 44 169 121 111 102 132 99 63 41 78 230 90 293 20 | 5 3 422.56 170.00 293 208 215 200 174 89 105 150 250 74 255 81 148 237 88 293 21 | 5 4 178.70 167.00 293 242 7 59 101 56 68 71 155 72 293 22 | 6 1 36.13 45.00 294 260 9 294 23 | 6 2 408.90 162.00 294 140 287 176 37 149 117 85 223 4 165 188 144 84 294 24 | 6 3 174.62 164.00 294 75 77 184 65 103 123 54 98 244 263 265 294 25 | 6 4 328.05 166.00 294 266 48 279 281 189 238 278 209 19 116 182 60 171 294 -------------------------------------------------------------------------------- /data/input/pr01: -------------------------------------------------------------------------------- 1 | 2 1 48 4 2 | 500 200 3 | 500 200 4 | 500 200 5 | 500 200 6 | 1 -29.730 64.136 2 12 1 4 1 2 4 8 7 | 2 -30.664 5.463 7 8 1 4 1 2 4 8 8 | 3 51.642 5.469 21 16 1 4 1 2 4 8 9 | 4 -13.171 69.336 24 5 1 4 1 2 4 8 10 | 5 -67.413 68.323 1 12 1 4 1 2 4 8 11 | 6 48.907 6.274 17 5 1 4 1 2 4 8 12 | 7 5.243 22.260 6 13 1 4 1 2 4 8 13 | 8 -65.002 77.234 5 20 1 4 1 2 4 8 14 | 9 -4.175 -1.569 7 13 1 4 1 2 4 8 15 | 10 23.029 11.639 1 18 1 4 1 2 4 8 16 | 11 25.482 6.287 4 7 1 4 1 2 4 8 17 | 12 -42.615 -26.392 10 6 1 4 1 2 4 8 18 | 13 -76.672 99.341 2 9 1 4 1 2 4 8 19 | 14 -20.673 57.892 16 9 1 4 1 2 4 8 20 | 15 -52.039 6.567 23 4 1 4 1 2 4 8 21 | 16 -41.376 50.824 18 25 1 4 1 2 4 8 22 | 17 -91.943 27.588 3 5 1 4 1 2 4 8 23 | 18 -65.118 30.212 15 17 1 4 1 2 4 8 24 | 19 18.597 96.716 13 3 1 4 1 2 4 8 25 | 20 -40.942 83.209 10 16 1 4 1 2 4 8 26 | 21 -37.756 -33.325 4 25 1 4 1 2 4 8 27 | 22 23.767 29.083 23 21 1 4 1 2 4 8 28 | 23 -43.030 20.453 20 14 1 4 1 2 4 8 29 | 24 -35.297 -24.896 10 19 1 4 1 2 4 8 30 | 25 -54.755 14.368 4 14 1 4 1 2 4 8 31 | 26 -49.329 33.374 2 6 1 4 1 2 4 8 32 | 27 57.404 23.822 23 16 1 4 1 2 4 8 33 | 28 -22.754 55.408 6 9 1 4 1 2 4 8 34 | 29 -56.622 73.340 8 20 1 4 1 2 4 8 35 | 30 -38.562 -3.705 10 13 1 4 1 2 4 8 36 | 31 -16.779 19.537 7 10 1 4 1 2 4 8 37 | 32 -11.560 11.615 1 16 1 4 1 2 4 8 38 | 33 -46.545 97.974 21 19 1 4 1 2 4 8 39 | 34 16.229 9.320 6 22 1 4 1 2 4 8 40 | 35 1.294 7.349 4 14 1 4 1 2 4 8 41 | 36 -26.404 29.529 13 10 1 4 1 2 4 8 42 | 37 4.352 14.685 9 11 1 4 1 2 4 8 43 | 38 -50.665 -23.126 22 15 1 4 1 2 4 8 44 | 39 -22.833 -9.814 22 13 1 4 1 2 4 8 45 | 40 -71.100 -18.616 18 15 1 4 1 2 4 8 46 | 41 -7.849 32.074 10 8 1 4 1 2 4 8 47 | 42 11.877 -24.933 25 22 1 4 1 2 4 8 48 | 43 -18.927 -23.730 23 24 1 4 1 2 4 8 49 | 44 -11.920 11.755 4 3 1 4 1 2 4 8 50 | 45 29.840 11.633 9 25 1 4 1 2 4 8 51 | 46 12.268 -55.811 17 19 1 4 1 2 4 8 52 | 47 -37.933 -21.613 10 21 1 4 1 2 4 8 53 | 48 42.883 -2.966 17 10 1 4 1 2 4 8 54 | 49 4.163 13.559 0 0 0 0 55 | 50 21.387 17.105 0 0 0 0 56 | 51 -36.118 49.097 0 0 0 0 57 | 52 -31.201 0.235 0 0 0 0 58 | -------------------------------------------------------------------------------- /data/description.txt: -------------------------------------------------------------------------------- 1 | Description for Files of Cordeau's Instances 2 | 3 | The format of data and solution files in all directories is as follows: 4 | 5 | A) DATA FILES 6 | 7 | The first line contains the following information: 8 | 9 | type m n t 10 | 11 | where 12 | 13 | type = 0 (VRP) 14 | 1 (PVRP) 15 | 2 (MDVRP) 16 | 3 (SDVRP) 17 | 4 (VRPTW) 18 | 5 (PVRPTW) 19 | 6 (MDVRPTW) 20 | 7 (SDVRPTW) 21 | m = number of vehicles 22 | n = number of customers 23 | t = number of days (PVRP), depots (MDVRP) or vehicle types (SDVRP) 24 | The next t lines contain, for each day (or depot or vehicle type), the following information: 25 | 26 | D Q 27 | 28 | where 29 | 30 | D = maximum duration of a route 31 | Q = maximum load of a vehicle 32 | The next lines contain, for each customer, the following information: 33 | 34 | i x y d q f a list e l 35 | 36 | where 37 | 38 | i = customer number 39 | x = x coordinate 40 | y = y coordinate 41 | d = service duration 42 | q = demand 43 | f = frequency of visit 44 | a = number of possible visit combinations 45 | list = list of all possible visit combinations 46 | e = beginning of time window (earliest time for start of service), if any 47 | l = end of time window (latest time for start of service), if any 48 | Each visit combination is coded with the decimal equivalent of the corresponding binary bit string. For example, in a 5-day period, the code 10 which is equivalent to the bit string 01010 means that a customer is visited on days 2 and 4. (Days are numbered from left to right.) 49 | 50 | Note : In the case of the MDVRP, the lines go from 1 to n + t and the last t entries correspond to the t depots. In the case of the VRP, PVRP and MDVRP, the lines go from 0 to n and the first entry corresponds to the unique depot. 51 | 52 | B) SOLUTION FILES 53 | 54 | The first line contains the cost of the solution (total duration excluding service time). 55 | 56 | The next lines contain, for each route, the following information: 57 | 58 | l k d q list 59 | 60 | where 61 | 62 | l = number of the day (or depot or vehicle type) 63 | k = number of the vehicle 64 | d = duration of the route 65 | q = load of the vehicle 66 | list = ordered sequence of customers (with start-of-service times, if applicable) 67 | 68 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | **This project is under developement, after achieving reliable results, this document will be fully updated.** 2 | 3 | [![forthebadge made-with-python](http://ForTheBadge.com/images/badges/made-with-python.svg)](https://www.python.org/) 4 | 5 | [![GitHub license](https://img.shields.io/github/license/Nikronic/Optimized-MDVRP.svg)](https://github.com/Nikronic/Optimized-MDVRP/blob/master/LICENSE) 6 | [![Open Source? Yes!](https://badgen.net/badge/Open%20Source%20%3F/Yes%21/blue?icon=github)](https://github.com/Nikronic/badges/) 7 | 8 | 9 | [![GitHub release](https://img.shields.io/github/release/Nikronic/Optimized-MDVRP.svg)](https://github.com/Nikronic/Optimized-MDVRP/releases/) 10 | [![GitHub tag](https://img.shields.io/github/tag/Nikronic/Optimized-MDVRP.svg)](https://github.com/Nikronic/Optimized-MDVRP/tags/) 11 | 12 | [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](http://makeapullrequest.com) 13 | 14 | ![Tweeting](https://img.shields.io/twitter/url/http/shields.io.svg?style=social) 15 | 16 | 17 | 18 | 19 | 20 | 21 | # Optimized-MDVRP 22 | "Using Genetic Algorithms for Multi-depot Vehicle Routing" paper implementation. 23 | 24 | ![Github Action Status](https://github.com/Nikronic/Optimized-MDVRP/workflows/Python%20package/badge.svg) 25 | 26 | **MDVRP** is a **multi-objective optimization** task that the goal is to assign a number of vehicles which are distributed in multi depots in search to the customers meanwhile **minimizing** the number of car used and distance traveled regarding some **constraints** such as vehicle weight threshold. 27 | 28 | 29 | First, initial attempt was implementing the Using **Genetic Algorithms** for Multi-depot Vehicle Routing paper, but I noticed that the *algorithm could be refined in many aspects*, so I applied the desired modification in *mutation* and *replacement* so that **I achieved better results** in term of metrics provided in the original paper. 30 | 31 | This project was part of the *Computational Intelligence* course. 32 | 33 | ## Citation 34 | Please cite this project as: 35 | 36 | Nikan Doosti. (2020). Nikronic/Optimized-MDVRP: DOI Release (v0.1-alpha). Zenodo. https://doi.org/10.5281/zenodo.3838616 37 | 38 | [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.3838616.svg)](https://doi.org/10.5281/zenodo.3838616) 39 | 40 | -------------------------------------------------------------------------------- /data/input/p12: -------------------------------------------------------------------------------- 1 | 2 5 80 2 2 | 0 60 3 | 0 60 4 | 1 -10 -10 0 12 1 2 1 2 5 | 2 -10 0 0 12 1 2 1 2 6 | 3 -10 10 0 12 1 2 1 2 7 | 4 0 -10 0 12 1 2 1 2 8 | 5 0 10 0 12 1 2 1 2 9 | 6 10 -10 0 12 1 2 1 2 10 | 7 10 0 0 12 1 2 1 2 11 | 8 10 10 0 12 1 2 1 2 12 | 9 -20 -20 0 8 1 2 1 2 13 | 10 -20 0 0 8 1 2 1 2 14 | 11 -20 20 0 8 1 2 1 2 15 | 12 0 -20 0 8 1 2 1 2 16 | 13 0 20 0 8 1 2 1 2 17 | 14 20 -20 0 8 1 2 1 2 18 | 15 20 0 0 8 1 2 1 2 19 | 16 20 20 0 8 1 2 1 2 20 | 17 -30 -30 0 4 1 2 1 2 21 | 18 -30 0 0 4 1 2 1 2 22 | 19 -30 30 0 4 1 2 1 2 23 | 20 0 -30 0 4 1 2 1 2 24 | 21 0 30 0 4 1 2 1 2 25 | 22 30 -30 0 4 1 2 1 2 26 | 23 30 0 0 4 1 2 1 2 27 | 24 30 30 0 4 1 2 1 2 28 | 25 -40 -40 0 2 1 2 1 2 29 | 26 -40 0 0 2 1 2 1 2 30 | 27 -40 40 0 2 1 2 1 2 31 | 28 0 -40 0 2 1 2 1 2 32 | 29 0 40 0 2 1 2 1 2 33 | 30 40 -40 0 2 1 2 1 2 34 | 31 40 0 0 2 1 2 1 2 35 | 32 40 40 0 2 1 2 1 2 36 | 33 -50 -50 0 1 1 2 1 2 37 | 34 -50 0 0 1 1 2 1 2 38 | 35 -50 50 0 1 1 2 1 2 39 | 36 0 -50 0 1 1 2 1 2 40 | 37 0 50 0 1 1 2 1 2 41 | 38 50 -50 0 1 1 2 1 2 42 | 39 50 0 0 1 1 2 1 2 43 | 40 50 50 0 1 1 2 1 2 44 | 41 100 -10 0 12 1 2 1 2 45 | 42 100 0 0 12 1 2 1 2 46 | 43 100 10 0 12 1 2 1 2 47 | 44 110 -10 0 12 1 2 1 2 48 | 45 110 10 0 12 1 2 1 2 49 | 46 120 -10 0 12 1 2 1 2 50 | 47 120 0 0 12 1 2 1 2 51 | 48 120 10 0 12 1 2 1 2 52 | 49 90 -20 0 8 1 2 1 2 53 | 50 90 0 0 8 1 2 1 2 54 | 51 90 20 0 8 1 2 1 2 55 | 52 110 -20 0 8 1 2 1 2 56 | 53 110 20 0 8 1 2 1 2 57 | 54 130 -20 0 8 1 2 1 2 58 | 55 130 0 0 8 1 2 1 2 59 | 56 130 20 0 8 1 2 1 2 60 | 57 80 -30 0 4 1 2 1 2 61 | 58 80 0 0 4 1 2 1 2 62 | 59 80 30 0 4 1 2 1 2 63 | 60 110 -30 0 4 1 2 1 2 64 | 61 110 30 0 4 1 2 1 2 65 | 62 140 -30 0 4 1 2 1 2 66 | 63 140 0 0 4 1 2 1 2 67 | 64 140 30 0 4 1 2 1 2 68 | 65 70 -40 0 2 1 2 1 2 69 | 66 70 0 0 2 1 2 1 2 70 | 67 70 40 0 2 1 2 1 2 71 | 68 110 -40 0 2 1 2 1 2 72 | 69 110 40 0 2 1 2 1 2 73 | 70 150 -40 0 2 1 2 1 2 74 | 71 150 0 0 2 1 2 1 2 75 | 72 150 40 0 2 1 2 1 2 76 | 73 60 -50 0 1 1 2 1 2 77 | 74 60 0 0 1 1 2 1 2 78 | 75 60 50 0 1 1 2 1 2 79 | 76 110 -50 0 1 1 2 1 2 80 | 77 110 50 0 1 1 2 1 2 81 | 78 160 -50 0 1 1 2 1 2 82 | 79 160 0 0 1 1 2 1 2 83 | 80 160 50 0 1 1 2 1 2 84 | 81 0 0 0 0 0 0 85 | 82 110 0 0 0 0 0 86 | -------------------------------------------------------------------------------- /data/input/p13: -------------------------------------------------------------------------------- 1 | 2 5 80 2 2 | 200 60 3 | 200 60 4 | 1 -10 -10 0 12 1 2 1 2 5 | 2 -10 0 0 12 1 2 1 2 6 | 3 -10 10 0 12 1 2 1 2 7 | 4 0 -10 0 12 1 2 1 2 8 | 5 0 10 0 12 1 2 1 2 9 | 6 10 -10 0 12 1 2 1 2 10 | 7 10 0 0 12 1 2 1 2 11 | 8 10 10 0 12 1 2 1 2 12 | 9 -20 -20 0 8 1 2 1 2 13 | 10 -20 0 0 8 1 2 1 2 14 | 11 -20 20 0 8 1 2 1 2 15 | 12 0 -20 0 8 1 2 1 2 16 | 13 0 20 0 8 1 2 1 2 17 | 14 20 -20 0 8 1 2 1 2 18 | 15 20 0 0 8 1 2 1 2 19 | 16 20 20 0 8 1 2 1 2 20 | 17 -30 -30 0 4 1 2 1 2 21 | 18 -30 0 0 4 1 2 1 2 22 | 19 -30 30 0 4 1 2 1 2 23 | 20 0 -30 0 4 1 2 1 2 24 | 21 0 30 0 4 1 2 1 2 25 | 22 30 -30 0 4 1 2 1 2 26 | 23 30 0 0 4 1 2 1 2 27 | 24 30 30 0 4 1 2 1 2 28 | 25 -40 -40 0 2 1 2 1 2 29 | 26 -40 0 0 2 1 2 1 2 30 | 27 -40 40 0 2 1 2 1 2 31 | 28 0 -40 0 2 1 2 1 2 32 | 29 0 40 0 2 1 2 1 2 33 | 30 40 -40 0 2 1 2 1 2 34 | 31 40 0 0 2 1 2 1 2 35 | 32 40 40 0 2 1 2 1 2 36 | 33 -50 -50 0 1 1 2 1 2 37 | 34 -50 0 0 1 1 2 1 2 38 | 35 -50 50 0 1 1 2 1 2 39 | 36 0 -50 0 1 1 2 1 2 40 | 37 0 50 0 1 1 2 1 2 41 | 38 50 -50 0 1 1 2 1 2 42 | 39 50 0 0 1 1 2 1 2 43 | 40 50 50 0 1 1 2 1 2 44 | 41 100 -10 0 12 1 2 1 2 45 | 42 100 0 0 12 1 2 1 2 46 | 43 100 10 0 12 1 2 1 2 47 | 44 110 -10 0 12 1 2 1 2 48 | 45 110 10 0 12 1 2 1 2 49 | 46 120 -10 0 12 1 2 1 2 50 | 47 120 0 0 12 1 2 1 2 51 | 48 120 10 0 12 1 2 1 2 52 | 49 90 -20 0 8 1 2 1 2 53 | 50 90 0 0 8 1 2 1 2 54 | 51 90 20 0 8 1 2 1 2 55 | 52 110 -20 0 8 1 2 1 2 56 | 53 110 20 0 8 1 2 1 2 57 | 54 130 -20 0 8 1 2 1 2 58 | 55 130 0 0 8 1 2 1 2 59 | 56 130 20 0 8 1 2 1 2 60 | 57 80 -30 0 4 1 2 1 2 61 | 58 80 0 0 4 1 2 1 2 62 | 59 80 30 0 4 1 2 1 2 63 | 60 110 -30 0 4 1 2 1 2 64 | 61 110 30 0 4 1 2 1 2 65 | 62 140 -30 0 4 1 2 1 2 66 | 63 140 0 0 4 1 2 1 2 67 | 64 140 30 0 4 1 2 1 2 68 | 65 70 -40 0 2 1 2 1 2 69 | 66 70 0 0 2 1 2 1 2 70 | 67 70 40 0 2 1 2 1 2 71 | 68 110 -40 0 2 1 2 1 2 72 | 69 110 40 0 2 1 2 1 2 73 | 70 150 -40 0 2 1 2 1 2 74 | 71 150 0 0 2 1 2 1 2 75 | 72 150 40 0 2 1 2 1 2 76 | 73 60 -50 0 1 1 2 1 2 77 | 74 60 0 0 1 1 2 1 2 78 | 75 60 50 0 1 1 2 1 2 79 | 76 110 -50 0 1 1 2 1 2 80 | 77 110 50 0 1 1 2 1 2 81 | 78 160 -50 0 1 1 2 1 2 82 | 79 160 0 0 1 1 2 1 2 83 | 80 160 50 0 1 1 2 1 2 84 | 81 0 0 0 0 0 0 85 | 82 110 0 0 0 0 0 86 | -------------------------------------------------------------------------------- /data/input/p14: -------------------------------------------------------------------------------- 1 | 2 5 80 2 2 | 180 60 3 | 180 60 4 | 1 -10 -10 0 12 1 2 1 2 5 | 2 -10 0 0 12 1 2 1 2 6 | 3 -10 10 0 12 1 2 1 2 7 | 4 0 -10 0 12 1 2 1 2 8 | 5 0 10 0 12 1 2 1 2 9 | 6 10 -10 0 12 1 2 1 2 10 | 7 10 0 0 12 1 2 1 2 11 | 8 10 10 0 12 1 2 1 2 12 | 9 -20 -20 0 8 1 2 1 2 13 | 10 -20 0 0 8 1 2 1 2 14 | 11 -20 20 0 8 1 2 1 2 15 | 12 0 -20 0 8 1 2 1 2 16 | 13 0 20 0 8 1 2 1 2 17 | 14 20 -20 0 8 1 2 1 2 18 | 15 20 0 0 8 1 2 1 2 19 | 16 20 20 0 8 1 2 1 2 20 | 17 -30 -30 0 4 1 2 1 2 21 | 18 -30 0 0 4 1 2 1 2 22 | 19 -30 30 0 4 1 2 1 2 23 | 20 0 -30 0 4 1 2 1 2 24 | 21 0 30 0 4 1 2 1 2 25 | 22 30 -30 0 4 1 2 1 2 26 | 23 30 0 0 4 1 2 1 2 27 | 24 30 30 0 4 1 2 1 2 28 | 25 -40 -40 0 2 1 2 1 2 29 | 26 -40 0 0 2 1 2 1 2 30 | 27 -40 40 0 2 1 2 1 2 31 | 28 0 -40 0 2 1 2 1 2 32 | 29 0 40 0 2 1 2 1 2 33 | 30 40 -40 0 2 1 2 1 2 34 | 31 40 0 0 2 1 2 1 2 35 | 32 40 40 0 2 1 2 1 2 36 | 33 -50 -50 0 1 1 2 1 2 37 | 34 -50 0 0 1 1 2 1 2 38 | 35 -50 50 0 1 1 2 1 2 39 | 36 0 -50 0 1 1 2 1 2 40 | 37 0 50 0 1 1 2 1 2 41 | 38 50 -50 0 1 1 2 1 2 42 | 39 50 0 0 1 1 2 1 2 43 | 40 50 50 0 1 1 2 1 2 44 | 41 100 -10 0 12 1 2 1 2 45 | 42 100 0 0 12 1 2 1 2 46 | 43 100 10 0 12 1 2 1 2 47 | 44 110 -10 0 12 1 2 1 2 48 | 45 110 10 0 12 1 2 1 2 49 | 46 120 -10 0 12 1 2 1 2 50 | 47 120 0 0 12 1 2 1 2 51 | 48 120 10 0 12 1 2 1 2 52 | 49 90 -20 0 8 1 2 1 2 53 | 50 90 0 0 8 1 2 1 2 54 | 51 90 20 0 8 1 2 1 2 55 | 52 110 -20 0 8 1 2 1 2 56 | 53 110 20 0 8 1 2 1 2 57 | 54 130 -20 0 8 1 2 1 2 58 | 55 130 0 0 8 1 2 1 2 59 | 56 130 20 0 8 1 2 1 2 60 | 57 80 -30 0 4 1 2 1 2 61 | 58 80 0 0 4 1 2 1 2 62 | 59 80 30 0 4 1 2 1 2 63 | 60 110 -30 0 4 1 2 1 2 64 | 61 110 30 0 4 1 2 1 2 65 | 62 140 -30 0 4 1 2 1 2 66 | 63 140 0 0 4 1 2 1 2 67 | 64 140 30 0 4 1 2 1 2 68 | 65 70 -40 0 2 1 2 1 2 69 | 66 70 0 0 2 1 2 1 2 70 | 67 70 40 0 2 1 2 1 2 71 | 68 110 -40 0 2 1 2 1 2 72 | 69 110 40 0 2 1 2 1 2 73 | 70 150 -40 0 2 1 2 1 2 74 | 71 150 0 0 2 1 2 1 2 75 | 72 150 40 0 2 1 2 1 2 76 | 73 60 -50 0 1 1 2 1 2 77 | 74 60 0 0 1 1 2 1 2 78 | 75 60 50 0 1 1 2 1 2 79 | 76 110 -50 0 1 1 2 1 2 80 | 77 110 50 0 1 1 2 1 2 81 | 78 160 -50 0 1 1 2 1 2 82 | 79 160 0 0 1 1 2 1 2 83 | 80 160 50 0 1 1 2 1 2 84 | 81 0 0 0 0 0 0 85 | 82 110 0 0 0 0 0 86 | -------------------------------------------------------------------------------- /data/result/p21.res: -------------------------------------------------------------------------------- 1 | 5474.84 2 | 1 1 233.14 60 0 11 19 27 35 240 232 224 216 215 223 231 239 34 26 18 10 0 3 | 1 2 233.14 60 0 9 17 25 33 315 307 299 291 293 301 309 317 36 28 20 12 0 4 | 1 3 54.14 48 0 3 2 1 4 0 5 | 1 4 54.14 48 0 6 7 8 5 0 6 | 1 5 233.14 60 0 13 21 29 37 156 148 140 132 134 142 150 158 40 32 24 16 0 7 | 2 1 221.42 60 0 52 60 68 76 357 349 336 344 352 360 78 70 62 54 46 0 8 | 2 2 188.93 55 0 48 56 64 72 118 80 79 71 63 55 47 0 9 | 2 3 233.14 60 0 50 58 66 74 39 31 23 15 14 22 30 38 73 65 57 49 0 10 | 2 4 233.14 60 0 53 61 69 77 116 108 100 92 89 97 105 113 75 67 59 51 0 11 | 2 5 60.00 60 0 45 43 42 41 44 0 12 | 3 1 86.50 60 0 84 81 82 90 98 83 0 13 | 3 2 147.80 53 0 87 95 103 111 119 110 102 94 86 0 14 | 3 3 170.71 54 0 88 96 104 112 120 117 109 101 93 85 0 15 | 4 1 60.00 60 0 122 121 124 126 127 0 16 | 4 2 221.42 60 0 128 136 144 152 160 115 107 99 91 106 114 159 151 143 135 0 17 | 4 3 233.14 60 0 129 137 145 153 198 190 182 174 175 183 191 199 154 146 138 130 0 18 | 4 4 188.93 55 0 123 131 139 147 200 155 157 149 141 133 125 0 19 | 5 1 147.80 53 0 168 176 184 192 197 189 181 173 165 0 20 | 5 2 86.50 60 0 161 164 172 180 166 167 0 21 | 5 3 170.71 54 0 163 171 179 187 195 194 186 178 170 162 0 22 | 6 1 233.14 60 0 212 220 228 236 277 269 261 253 256 264 272 280 238 230 222 214 0 23 | 6 2 221.42 60 0 213 221 229 237 196 188 169 177 185 193 235 227 219 211 203 0 24 | 6 3 60.00 60 0 204 206 207 208 205 0 25 | 6 4 147.80 53 0 201 209 217 225 234 226 218 210 202 0 26 | 7 1 86.50 60 0 245 248 247 255 263 246 0 27 | 7 2 188.93 55 0 242 250 258 266 274 275 233 267 259 251 243 0 28 | 7 3 170.71 54 0 241 249 257 265 273 276 268 260 252 244 0 29 | 8 1 233.14 60 0 295 303 311 319 354 346 338 330 331 339 347 355 320 312 304 296 0 30 | 8 2 221.42 60 0 290 298 306 314 279 271 254 262 270 278 313 305 297 289 281 0 31 | 8 3 60.00 60 0 287 288 285 283 282 0 32 | 8 4 188.93 55 0 286 294 302 310 353 318 316 308 300 292 284 0 33 | 9 1 170.71 54 0 326 334 342 350 358 359 351 343 335 327 0 34 | 9 2 147.80 53 0 321 329 337 345 356 348 340 332 324 0 35 | 9 3 86.50 60 0 328 341 333 325 323 322 0 36 | -------------------------------------------------------------------------------- /data/result/p22.res: -------------------------------------------------------------------------------- 1 | 5702.16 2 | 1 1 196.08 58 0 6 14 22 30 38 320 312 317 36 28 20 12 4 0 3 | 1 2 114.05 50 0 2 10 18 26 17 9 1 0 4 | 1 3 114.05 50 0 7 15 23 31 24 16 8 0 5 | 1 4 114.05 50 0 5 13 21 29 19 11 3 0 6 | 2 1 198.99 60 0 41 49 57 65 73 355 347 339 68 60 52 44 0 7 | 2 2 196.08 58 0 45 53 61 69 77 116 110 118 80 72 64 56 48 0 8 | 2 3 128.48 51 0 47 55 63 71 79 62 54 46 0 9 | 2 4 196.08 58 0 43 51 59 67 75 40 32 39 74 66 58 50 42 0 10 | 3 1 196.08 58 0 82 90 98 106 114 159 152 160 115 107 99 91 83 0 11 | 3 2 128.48 51 0 86 94 102 119 111 103 95 87 0 12 | 3 3 170.71 54 0 88 96 104 112 120 117 109 101 93 85 0 13 | 3 4 96.57 46 0 81 89 108 100 92 84 0 14 | 4 1 128.48 51 0 125 133 141 149 157 144 136 128 0 15 | 4 2 198.99 60 0 127 135 143 151 97 105 113 158 150 142 134 126 0 16 | 4 3 196.08 58 0 121 129 137 145 153 35 27 37 156 148 140 132 124 0 17 | 4 4 196.08 58 0 122 130 138 146 154 199 192 200 155 147 139 131 123 0 18 | 5 1 96.57 46 0 167 175 183 191 174 166 0 19 | 5 2 128.48 51 0 165 173 181 189 197 184 176 168 0 20 | 5 3 196.08 58 0 164 172 180 188 196 237 227 235 193 185 177 169 161 0 21 | 5 4 170.71 54 0 163 171 179 187 195 194 186 178 170 162 0 22 | 6 1 128.48 51 0 202 210 218 226 234 219 211 203 0 23 | 6 2 198.99 60 0 205 213 221 229 182 190 198 240 232 224 216 208 0 24 | 6 3 196.08 58 0 204 212 220 228 236 277 267 275 233 225 217 209 201 0 25 | 6 4 196.08 58 0 206 214 222 230 238 33 25 34 239 231 223 215 207 0 26 | 7 1 96.57 46 0 248 256 269 261 253 245 0 27 | 7 2 128.48 51 0 242 250 258 266 274 259 251 243 0 28 | 7 3 170.71 54 0 241 249 257 265 273 276 268 260 252 244 0 29 | 7 4 196.08 58 0 246 254 262 270 278 313 305 314 279 271 263 255 247 0 30 | 8 1 196.08 58 0 287 295 303 311 319 354 345 353 318 310 302 294 286 0 31 | 8 2 114.05 50 0 285 293 301 309 304 296 288 0 32 | 8 3 198.99 60 0 282 290 298 306 264 272 280 315 307 299 291 283 0 33 | 8 4 128.48 51 0 281 289 297 316 308 300 292 284 0 34 | 9 1 128.48 51 0 321 329 337 356 348 340 332 324 0 35 | 9 2 96.57 46 0 322 330 338 346 331 323 0 36 | 9 3 196.08 58 0 325 333 341 349 357 76 70 78 360 352 344 336 328 0 37 | 9 4 170.71 54 0 327 335 343 351 359 358 350 342 334 326 0 38 | -------------------------------------------------------------------------------- /data/result/p23.res: -------------------------------------------------------------------------------- 1 | 6095.46 2 | 1 1 174.56 54 0 8 16 24 32 40 158 29 21 13 5 0 3 | 1 2 170.71 54 0 3 11 19 27 35 34 26 18 10 2 0 4 | 1 3 161.29 54 0 1 9 17 25 317 36 28 20 12 4 0 5 | 1 4 174.56 54 0 6 14 22 30 38 73 31 23 15 7 0 6 | 2 1 161.29 54 0 41 49 57 65 39 74 66 58 50 42 0 7 | 2 2 161.29 54 0 46 54 62 70 357 76 68 60 52 44 0 8 | 2 3 170.71 54 0 48 56 64 72 80 79 71 63 55 47 0 9 | 2 4 174.56 54 0 43 51 59 67 75 113 69 61 53 45 0 10 | 3 1 170.71 54 0 88 96 104 112 120 117 109 101 93 85 0 11 | 3 2 174.56 54 0 83 91 99 107 115 160 106 98 90 82 0 12 | 3 3 161.29 54 0 81 89 97 105 77 116 108 100 92 84 0 13 | 3 4 170.71 54 0 86 94 102 110 118 119 111 103 95 87 0 14 | 4 1 161.29 54 0 126 134 142 150 37 156 148 140 132 124 0 15 | 4 2 161.29 54 0 128 136 144 152 114 159 151 143 135 127 0 16 | 4 3 170.71 54 0 123 131 139 147 155 157 149 141 133 125 0 17 | 4 4 170.71 54 0 121 129 137 145 153 154 146 138 130 122 0 18 | 5 1 161.29 54 0 166 174 182 190 237 196 188 180 172 164 0 19 | 5 2 170.71 54 0 168 176 184 192 200 199 191 183 175 167 0 20 | 5 3 170.71 54 0 163 171 179 187 195 197 189 181 173 165 0 21 | 5 4 170.71 54 0 161 169 177 185 193 194 186 178 170 162 0 22 | 6 1 170.71 54 0 206 214 222 230 238 239 231 223 215 207 0 23 | 6 2 174.56 54 0 208 216 224 232 240 198 229 221 213 205 0 24 | 6 3 170.71 54 0 203 211 219 227 235 234 226 218 210 202 0 25 | 6 4 170.71 54 0 201 209 217 225 233 236 228 220 212 204 0 26 | 7 1 174.56 54 0 246 254 262 270 278 313 271 263 255 247 0 27 | 7 2 170.71 54 0 248 256 264 272 280 277 269 261 253 245 0 28 | 7 3 170.71 54 0 243 251 259 267 275 274 266 258 250 242 0 29 | 7 4 170.71 54 0 241 249 257 265 273 276 268 260 252 244 0 30 | 8 1 161.29 54 0 281 289 297 305 279 314 306 298 290 282 0 31 | 8 2 170.71 54 0 286 294 302 310 318 316 308 300 292 284 0 32 | 8 3 161.29 54 0 288 296 304 312 354 319 311 303 295 287 0 33 | 8 4 174.56 54 0 283 291 299 307 315 33 309 301 293 285 0 34 | 9 1 174.56 54 0 323 331 339 347 355 320 346 338 330 322 0 35 | 9 2 170.71 54 0 321 329 337 345 353 356 348 340 332 324 0 36 | 9 3 170.71 54 0 326 334 342 350 358 359 351 343 335 327 0 37 | 9 4 174.56 54 0 328 336 344 352 360 78 349 341 333 325 0 38 | -------------------------------------------------------------------------------- /data/input/p03: -------------------------------------------------------------------------------- 1 | 2 3 75 5 2 | 0 140 3 | 0 140 4 | 0 140 5 | 0 140 6 | 0 140 7 | 1 22 22 0 18 1 5 1 2 4 8 16 8 | 2 36 26 0 26 1 5 1 2 4 8 16 9 | 3 21 45 0 11 1 5 1 2 4 8 16 10 | 4 45 35 0 30 1 5 1 2 4 8 16 11 | 5 55 20 0 21 1 5 1 2 4 8 16 12 | 6 33 34 0 19 1 5 1 2 4 8 16 13 | 7 50 50 0 15 1 5 1 2 4 8 16 14 | 8 55 45 0 16 1 5 1 2 4 8 16 15 | 9 26 59 0 29 1 5 1 2 4 8 16 16 | 10 40 66 0 26 1 5 1 2 4 8 16 17 | 11 55 65 0 37 1 5 1 2 4 8 16 18 | 12 35 51 0 16 1 5 1 2 4 8 16 19 | 13 62 35 0 12 1 5 1 2 4 8 16 20 | 14 62 57 0 31 1 5 1 2 4 8 16 21 | 15 62 24 0 8 1 5 1 2 4 8 16 22 | 16 21 36 0 19 1 5 1 2 4 8 16 23 | 17 33 44 0 20 1 5 1 2 4 8 16 24 | 18 9 56 0 13 1 5 1 2 4 8 16 25 | 19 62 48 0 15 1 5 1 2 4 8 16 26 | 20 66 14 0 22 1 5 1 2 4 8 16 27 | 21 44 13 0 28 1 5 1 2 4 8 16 28 | 22 26 13 0 12 1 5 1 2 4 8 16 29 | 23 11 28 0 6 1 5 1 2 4 8 16 30 | 24 7 43 0 27 1 5 1 2 4 8 16 31 | 25 17 64 0 14 1 5 1 2 4 8 16 32 | 26 41 46 0 18 1 5 1 2 4 8 16 33 | 27 55 34 0 17 1 5 1 2 4 8 16 34 | 28 35 16 0 29 1 5 1 2 4 8 16 35 | 29 52 26 0 13 1 5 1 2 4 8 16 36 | 30 43 26 0 22 1 5 1 2 4 8 16 37 | 31 31 76 0 25 1 5 1 2 4 8 16 38 | 32 22 53 0 28 1 5 1 2 4 8 16 39 | 33 26 29 0 27 1 5 1 2 4 8 16 40 | 34 50 40 0 19 1 5 1 2 4 8 16 41 | 35 55 50 0 10 1 5 1 2 4 8 16 42 | 36 54 10 0 12 1 5 1 2 4 8 16 43 | 37 60 15 0 14 1 5 1 2 4 8 16 44 | 38 47 66 0 24 1 5 1 2 4 8 16 45 | 39 30 60 0 16 1 5 1 2 4 8 16 46 | 40 30 50 0 33 1 5 1 2 4 8 16 47 | 41 12 17 0 15 1 5 1 2 4 8 16 48 | 42 15 14 0 11 1 5 1 2 4 8 16 49 | 43 16 19 0 18 1 5 1 2 4 8 16 50 | 44 21 48 0 17 1 5 1 2 4 8 16 51 | 45 50 30 0 21 1 5 1 2 4 8 16 52 | 46 51 42 0 27 1 5 1 2 4 8 16 53 | 47 50 15 0 19 1 5 1 2 4 8 16 54 | 48 48 21 0 20 1 5 1 2 4 8 16 55 | 49 12 38 0 5 1 5 1 2 4 8 16 56 | 50 15 56 0 22 1 5 1 2 4 8 16 57 | 51 29 39 0 12 1 5 1 2 4 8 16 58 | 52 54 38 0 19 1 5 1 2 4 8 16 59 | 53 55 57 0 22 1 5 1 2 4 8 16 60 | 54 67 41 0 16 1 5 1 2 4 8 16 61 | 55 10 70 0 7 1 5 1 2 4 8 16 62 | 56 6 25 0 26 1 5 1 2 4 8 16 63 | 57 65 27 0 14 1 5 1 2 4 8 16 64 | 58 40 60 0 21 1 5 1 2 4 8 16 65 | 59 70 64 0 24 1 5 1 2 4 8 16 66 | 60 64 4 0 13 1 5 1 2 4 8 16 67 | 61 36 6 0 15 1 5 1 2 4 8 16 68 | 62 30 20 0 18 1 5 1 2 4 8 16 69 | 63 20 30 0 11 1 5 1 2 4 8 16 70 | 64 15 5 0 28 1 5 1 2 4 8 16 71 | 65 50 70 0 9 1 5 1 2 4 8 16 72 | 66 57 72 0 37 1 5 1 2 4 8 16 73 | 67 45 42 0 30 1 5 1 2 4 8 16 74 | 68 38 33 0 10 1 5 1 2 4 8 16 75 | 69 50 4 0 8 1 5 1 2 4 8 16 76 | 70 66 8 0 11 1 5 1 2 4 8 16 77 | 71 59 5 0 3 1 5 1 2 4 8 16 78 | 72 35 60 0 1 1 5 1 2 4 8 16 79 | 73 27 24 0 6 1 5 1 2 4 8 16 80 | 74 40 20 0 10 1 5 1 2 4 8 16 81 | 75 40 37 0 20 1 5 1 2 4 8 16 82 | 76 40 40 0 0 0 0 83 | 77 50 22 0 0 0 0 84 | 78 55 55 0 0 0 0 85 | 79 25 45 0 0 0 0 86 | 80 20 20 0 0 0 0 87 | -------------------------------------------------------------------------------- /utils/io.py: -------------------------------------------------------------------------------- 1 | from utils.customer import Customer 2 | from utils.depot import Depot 3 | from utils.chromosome import Chromosome 4 | from utils.population import Population 5 | 6 | import os 7 | import re 8 | 9 | 10 | def chromosome_to_file(chromosome: Chromosome, path='chromosome.txt'): 11 | if not os.path.exists(path): 12 | path = 'chromosome.txt' 13 | 14 | line = str(chromosome.id)+' '+str(chromosome.fitness)+' '+str(chromosome.capacity)+'\n' 15 | file = open(path, 'w+') 16 | file.write(line) 17 | 18 | for d in chromosome: 19 | line = str(d.id)+' '+str(d.x)+' '+str(d.y)+'\n' 20 | file.write(line) 21 | for c in d: 22 | line = str(c.id)+' '+str(c.x)+' '+str(c.y)+' '+str(c.cost)+' '+str(c.null).lower()+'\n' 23 | file.write(line) 24 | file.close() 25 | 26 | 27 | def single_data_loader(input_path: str, result_path: str) -> (Population, Population): 28 | """ 29 | Takes a path to input file with defined structure and create a `Population` regarding that. Also, takes the second 30 | path to the result file with defined structure and creates a `Population` filled with result values. 31 | 32 | :param input_path: Path to 'p***' files as the input 33 | :param result_path: Path to 'p***.res` files as the result 34 | :return: A tuple (`Population`: input, `Population`: desired result to be compared) 35 | """ 36 | if not os.path.exists(input_path): 37 | raise Exception('{} does not exists.'.format(input_path)) 38 | if not os.path.exists(result_path): 39 | raise Exception('{} does not exists.'.format(result_path)) 40 | 41 | input_file = open(input_path) 42 | input_lines = input_file.read().split('\n') 43 | customer_count = int(input_lines[0].split(' ')[2]) 44 | depot_count = int(input_lines[0].split(' ')[3]) 45 | depot_capacities = [float(l.split(' ')[1]) for l in input_lines[1:depot_count + 1]] 46 | customers = [] 47 | for line in input_lines[depot_count + 1: depot_count+customer_count + 1]: 48 | line = re.sub(' +', ' ', line) 49 | attrs = line.split(' ') 50 | if line[0].isspace(): 51 | attrs = line[1:].split(' ') 52 | customer = Customer(int(attrs[0]), float(attrs[1]), float(attrs[2]), float(attrs[4]), False) 53 | customers.append(customer) 54 | 55 | depots = [] 56 | for line, c in zip(input_lines[depot_count+customer_count + 1:], depot_capacities): 57 | line = re.sub(' +', ' ', line) 58 | attrs = line.split(' ') 59 | if line[0].isspace(): 60 | attrs = line[1:].split(' ') 61 | depot = Depot(int(attrs[0]), float(attrs[1]), float(attrs[2]), c) 62 | depots.append(depot) 63 | 64 | return depots, customers 65 | -------------------------------------------------------------------------------- /data/input/p04: -------------------------------------------------------------------------------- 1 | 2 8 100 2 2 | 0 100 3 | 0 100 4 | 1 41 49 0 10 1 2 1 2 5 | 2 35 17 0 7 1 2 1 2 6 | 3 55 45 0 13 1 2 1 2 7 | 4 55 20 0 19 1 2 1 2 8 | 5 15 30 0 26 1 2 1 2 9 | 6 25 30 0 3 1 2 1 2 10 | 7 20 50 0 5 1 2 1 2 11 | 8 10 43 0 9 1 2 1 2 12 | 9 55 60 0 16 1 2 1 2 13 | 10 30 60 0 16 1 2 1 2 14 | 11 20 65 0 12 1 2 1 2 15 | 12 50 35 0 19 1 2 1 2 16 | 13 30 25 0 23 1 2 1 2 17 | 14 15 10 0 20 1 2 1 2 18 | 15 30 5 0 8 1 2 1 2 19 | 16 10 20 0 19 1 2 1 2 20 | 17 5 30 0 2 1 2 1 2 21 | 18 20 40 0 12 1 2 1 2 22 | 19 15 60 0 17 1 2 1 2 23 | 20 45 65 0 9 1 2 1 2 24 | 21 45 20 0 11 1 2 1 2 25 | 22 45 10 0 18 1 2 1 2 26 | 23 55 5 0 29 1 2 1 2 27 | 24 65 35 0 3 1 2 1 2 28 | 25 65 20 0 6 1 2 1 2 29 | 26 45 30 0 17 1 2 1 2 30 | 27 35 40 0 16 1 2 1 2 31 | 28 41 37 0 16 1 2 1 2 32 | 29 64 42 0 9 1 2 1 2 33 | 30 40 60 0 21 1 2 1 2 34 | 31 31 52 0 27 1 2 1 2 35 | 32 35 69 0 23 1 2 1 2 36 | 33 53 52 0 11 1 2 1 2 37 | 34 65 55 0 14 1 2 1 2 38 | 35 63 65 0 8 1 2 1 2 39 | 36 2 60 0 5 1 2 1 2 40 | 37 20 20 0 8 1 2 1 2 41 | 38 5 5 0 16 1 2 1 2 42 | 39 60 12 0 31 1 2 1 2 43 | 40 40 25 0 9 1 2 1 2 44 | 41 42 7 0 5 1 2 1 2 45 | 42 24 12 0 5 1 2 1 2 46 | 43 23 3 0 7 1 2 1 2 47 | 44 11 14 0 18 1 2 1 2 48 | 45 6 38 0 16 1 2 1 2 49 | 46 2 48 0 1 1 2 1 2 50 | 47 8 56 0 27 1 2 1 2 51 | 48 13 52 0 36 1 2 1 2 52 | 49 6 68 0 30 1 2 1 2 53 | 50 47 47 0 13 1 2 1 2 54 | 51 49 58 0 10 1 2 1 2 55 | 52 27 43 0 9 1 2 1 2 56 | 53 37 31 0 14 1 2 1 2 57 | 54 57 29 0 18 1 2 1 2 58 | 55 63 23 0 2 1 2 1 2 59 | 56 53 12 0 6 1 2 1 2 60 | 57 32 12 0 7 1 2 1 2 61 | 58 36 26 0 18 1 2 1 2 62 | 59 21 24 0 28 1 2 1 2 63 | 60 17 34 0 3 1 2 1 2 64 | 61 12 24 0 13 1 2 1 2 65 | 62 24 58 0 19 1 2 1 2 66 | 63 27 69 0 10 1 2 1 2 67 | 64 15 77 0 9 1 2 1 2 68 | 65 62 77 0 20 1 2 1 2 69 | 66 49 73 0 25 1 2 1 2 70 | 67 67 5 0 25 1 2 1 2 71 | 68 56 39 0 36 1 2 1 2 72 | 69 37 47 0 6 1 2 1 2 73 | 70 37 56 0 5 1 2 1 2 74 | 71 57 68 0 15 1 2 1 2 75 | 72 47 16 0 25 1 2 1 2 76 | 73 44 17 0 9 1 2 1 2 77 | 74 46 13 0 8 1 2 1 2 78 | 75 49 11 0 18 1 2 1 2 79 | 76 49 42 0 13 1 2 1 2 80 | 77 53 43 0 14 1 2 1 2 81 | 78 61 52 0 3 1 2 1 2 82 | 79 57 48 0 23 1 2 1 2 83 | 80 56 37 0 6 1 2 1 2 84 | 81 55 54 0 26 1 2 1 2 85 | 82 15 47 0 16 1 2 1 2 86 | 83 14 37 0 11 1 2 1 2 87 | 84 11 31 0 7 1 2 1 2 88 | 85 16 22 0 41 1 2 1 2 89 | 86 4 18 0 35 1 2 1 2 90 | 87 28 18 0 26 1 2 1 2 91 | 88 26 52 0 9 1 2 1 2 92 | 89 26 35 0 15 1 2 1 2 93 | 90 31 67 0 3 1 2 1 2 94 | 91 15 19 0 1 1 2 1 2 95 | 92 22 22 0 2 1 2 1 2 96 | 93 18 24 0 22 1 2 1 2 97 | 94 26 27 0 27 1 2 1 2 98 | 95 25 24 0 20 1 2 1 2 99 | 96 22 27 0 11 1 2 1 2 100 | 97 25 21 0 12 1 2 1 2 101 | 98 19 21 0 10 1 2 1 2 102 | 99 20 26 0 9 1 2 1 2 103 | 100 18 18 0 17 1 2 1 2 104 | 101 35 20 0 0 0 0 105 | 102 35 50 0 0 0 0 106 | -------------------------------------------------------------------------------- /data/input/p05: -------------------------------------------------------------------------------- 1 | 2 5 100 2 2 | 0 200 3 | 0 200 4 | 1 41 49 0 10 1 2 1 2 5 | 2 35 17 0 7 1 2 1 2 6 | 3 55 45 0 13 1 2 1 2 7 | 4 55 20 0 19 1 2 1 2 8 | 5 15 30 0 26 1 2 1 2 9 | 6 25 30 0 3 1 2 1 2 10 | 7 20 50 0 5 1 2 1 2 11 | 8 10 43 0 9 1 2 1 2 12 | 9 55 60 0 16 1 2 1 2 13 | 10 30 60 0 16 1 2 1 2 14 | 11 20 65 0 12 1 2 1 2 15 | 12 50 35 0 19 1 2 1 2 16 | 13 30 25 0 23 1 2 1 2 17 | 14 15 10 0 20 1 2 1 2 18 | 15 30 5 0 8 1 2 1 2 19 | 16 10 20 0 19 1 2 1 2 20 | 17 5 30 0 2 1 2 1 2 21 | 18 20 40 0 12 1 2 1 2 22 | 19 15 60 0 17 1 2 1 2 23 | 20 45 65 0 9 1 2 1 2 24 | 21 45 20 0 11 1 2 1 2 25 | 22 45 10 0 18 1 2 1 2 26 | 23 55 5 0 29 1 2 1 2 27 | 24 65 35 0 3 1 2 1 2 28 | 25 65 20 0 6 1 2 1 2 29 | 26 45 30 0 17 1 2 1 2 30 | 27 35 40 0 16 1 2 1 2 31 | 28 41 37 0 16 1 2 1 2 32 | 29 64 42 0 9 1 2 1 2 33 | 30 40 60 0 21 1 2 1 2 34 | 31 31 52 0 27 1 2 1 2 35 | 32 35 69 0 23 1 2 1 2 36 | 33 53 52 0 11 1 2 1 2 37 | 34 65 55 0 14 1 2 1 2 38 | 35 63 65 0 8 1 2 1 2 39 | 36 2 60 0 5 1 2 1 2 40 | 37 20 20 0 8 1 2 1 2 41 | 38 5 5 0 16 1 2 1 2 42 | 39 60 12 0 31 1 2 1 2 43 | 40 40 25 0 9 1 2 1 2 44 | 41 42 7 0 5 1 2 1 2 45 | 42 24 12 0 5 1 2 1 2 46 | 43 23 3 0 7 1 2 1 2 47 | 44 11 14 0 18 1 2 1 2 48 | 45 6 38 0 16 1 2 1 2 49 | 46 2 48 0 1 1 2 1 2 50 | 47 8 56 0 27 1 2 1 2 51 | 48 13 52 0 36 1 2 1 2 52 | 49 6 68 0 30 1 2 1 2 53 | 50 47 47 0 13 1 2 1 2 54 | 51 49 58 0 10 1 2 1 2 55 | 52 27 43 0 9 1 2 1 2 56 | 53 37 31 0 14 1 2 1 2 57 | 54 57 29 0 18 1 2 1 2 58 | 55 63 23 0 2 1 2 1 2 59 | 56 53 12 0 6 1 2 1 2 60 | 57 32 12 0 7 1 2 1 2 61 | 58 36 26 0 18 1 2 1 2 62 | 59 21 24 0 28 1 2 1 2 63 | 60 17 34 0 3 1 2 1 2 64 | 61 12 24 0 13 1 2 1 2 65 | 62 24 58 0 19 1 2 1 2 66 | 63 27 69 0 10 1 2 1 2 67 | 64 15 77 0 9 1 2 1 2 68 | 65 62 77 0 20 1 2 1 2 69 | 66 49 73 0 25 1 2 1 2 70 | 67 67 5 0 25 1 2 1 2 71 | 68 56 39 0 36 1 2 1 2 72 | 69 37 47 0 6 1 2 1 2 73 | 70 37 56 0 5 1 2 1 2 74 | 71 57 68 0 15 1 2 1 2 75 | 72 47 16 0 25 1 2 1 2 76 | 73 44 17 0 9 1 2 1 2 77 | 74 46 13 0 8 1 2 1 2 78 | 75 49 11 0 18 1 2 1 2 79 | 76 49 42 0 13 1 2 1 2 80 | 77 53 43 0 14 1 2 1 2 81 | 78 61 52 0 3 1 2 1 2 82 | 79 57 48 0 23 1 2 1 2 83 | 80 56 37 0 6 1 2 1 2 84 | 81 55 54 0 26 1 2 1 2 85 | 82 15 47 0 16 1 2 1 2 86 | 83 14 37 0 11 1 2 1 2 87 | 84 11 31 0 7 1 2 1 2 88 | 85 16 22 0 41 1 2 1 2 89 | 86 4 18 0 35 1 2 1 2 90 | 87 28 18 0 26 1 2 1 2 91 | 88 26 52 0 9 1 2 1 2 92 | 89 26 35 0 15 1 2 1 2 93 | 90 31 67 0 3 1 2 1 2 94 | 91 15 19 0 1 1 2 1 2 95 | 92 22 22 0 2 1 2 1 2 96 | 93 18 24 0 22 1 2 1 2 97 | 94 26 27 0 27 1 2 1 2 98 | 95 25 24 0 20 1 2 1 2 99 | 96 22 27 0 11 1 2 1 2 100 | 97 25 21 0 12 1 2 1 2 101 | 98 19 21 0 10 1 2 1 2 102 | 99 20 26 0 9 1 2 1 2 103 | 100 18 18 0 17 1 2 1 2 104 | 101 15 35 0 0 0 0 105 | 102 55 35 0 0 0 0 106 | -------------------------------------------------------------------------------- /data/input/p06: -------------------------------------------------------------------------------- 1 | 2 6 100 3 2 | 0 100 3 | 0 100 4 | 0 100 5 | 1 41 49 0 10 1 3 1 2 4 6 | 2 35 17 0 7 1 3 1 2 4 7 | 3 55 45 0 13 1 3 1 2 4 8 | 4 55 20 0 19 1 3 1 2 4 9 | 5 15 30 0 26 1 3 1 2 4 10 | 6 25 30 0 3 1 3 1 2 4 11 | 7 20 50 0 5 1 3 1 2 4 12 | 8 10 43 0 9 1 3 1 2 4 13 | 9 55 60 0 16 1 3 1 2 4 14 | 10 30 60 0 16 1 3 1 2 4 15 | 11 20 65 0 12 1 3 1 2 4 16 | 12 50 35 0 19 1 3 1 2 4 17 | 13 30 25 0 23 1 3 1 2 4 18 | 14 15 10 0 20 1 3 1 2 4 19 | 15 30 5 0 8 1 3 1 2 4 20 | 16 10 20 0 19 1 3 1 2 4 21 | 17 5 30 0 2 1 3 1 2 4 22 | 18 20 40 0 12 1 3 1 2 4 23 | 19 15 60 0 17 1 3 1 2 4 24 | 20 45 65 0 9 1 3 1 2 4 25 | 21 45 20 0 11 1 3 1 2 4 26 | 22 45 10 0 18 1 3 1 2 4 27 | 23 55 5 0 29 1 3 1 2 4 28 | 24 65 35 0 3 1 3 1 2 4 29 | 25 65 20 0 6 1 3 1 2 4 30 | 26 45 30 0 17 1 3 1 2 4 31 | 27 35 40 0 16 1 3 1 2 4 32 | 28 41 37 0 16 1 3 1 2 4 33 | 29 64 42 0 9 1 3 1 2 4 34 | 30 40 60 0 21 1 3 1 2 4 35 | 31 31 52 0 27 1 3 1 2 4 36 | 32 35 69 0 23 1 3 1 2 4 37 | 33 53 52 0 11 1 3 1 2 4 38 | 34 65 55 0 14 1 3 1 2 4 39 | 35 63 65 0 8 1 3 1 2 4 40 | 36 2 60 0 5 1 3 1 2 4 41 | 37 20 20 0 8 1 3 1 2 4 42 | 38 5 5 0 16 1 3 1 2 4 43 | 39 60 12 0 31 1 3 1 2 4 44 | 40 40 25 0 9 1 3 1 2 4 45 | 41 42 7 0 5 1 3 1 2 4 46 | 42 24 12 0 5 1 3 1 2 4 47 | 43 23 3 0 7 1 3 1 2 4 48 | 44 11 14 0 18 1 3 1 2 4 49 | 45 6 38 0 16 1 3 1 2 4 50 | 46 2 48 0 1 1 3 1 2 4 51 | 47 8 56 0 27 1 3 1 2 4 52 | 48 13 52 0 36 1 3 1 2 4 53 | 49 6 68 0 30 1 3 1 2 4 54 | 50 47 47 0 13 1 3 1 2 4 55 | 51 49 58 0 10 1 3 1 2 4 56 | 52 27 43 0 9 1 3 1 2 4 57 | 53 37 31 0 14 1 3 1 2 4 58 | 54 57 29 0 18 1 3 1 2 4 59 | 55 63 23 0 2 1 3 1 2 4 60 | 56 53 12 0 6 1 3 1 2 4 61 | 57 32 12 0 7 1 3 1 2 4 62 | 58 36 26 0 18 1 3 1 2 4 63 | 59 21 24 0 28 1 3 1 2 4 64 | 60 17 34 0 3 1 3 1 2 4 65 | 61 12 24 0 13 1 3 1 2 4 66 | 62 24 58 0 19 1 3 1 2 4 67 | 63 27 69 0 10 1 3 1 2 4 68 | 64 15 77 0 9 1 3 1 2 4 69 | 65 62 77 0 20 1 3 1 2 4 70 | 66 49 73 0 25 1 3 1 2 4 71 | 67 67 5 0 25 1 3 1 2 4 72 | 68 56 39 0 36 1 3 1 2 4 73 | 69 37 47 0 6 1 3 1 2 4 74 | 70 37 56 0 5 1 3 1 2 4 75 | 71 57 68 0 15 1 3 1 2 4 76 | 72 47 16 0 25 1 3 1 2 4 77 | 73 44 17 0 9 1 3 1 2 4 78 | 74 46 13 0 8 1 3 1 2 4 79 | 75 49 11 0 18 1 3 1 2 4 80 | 76 49 42 0 13 1 3 1 2 4 81 | 77 53 43 0 14 1 3 1 2 4 82 | 78 61 52 0 3 1 3 1 2 4 83 | 79 57 48 0 23 1 3 1 2 4 84 | 80 56 37 0 6 1 3 1 2 4 85 | 81 55 54 0 26 1 3 1 2 4 86 | 82 15 47 0 16 1 3 1 2 4 87 | 83 14 37 0 11 1 3 1 2 4 88 | 84 11 31 0 7 1 3 1 2 4 89 | 85 16 22 0 41 1 3 1 2 4 90 | 86 4 18 0 35 1 3 1 2 4 91 | 87 28 18 0 26 1 3 1 2 4 92 | 88 26 52 0 9 1 3 1 2 4 93 | 89 26 35 0 15 1 3 1 2 4 94 | 90 31 67 0 3 1 3 1 2 4 95 | 91 15 19 0 1 1 3 1 2 4 96 | 92 22 22 0 2 1 3 1 2 4 97 | 93 18 24 0 22 1 3 1 2 4 98 | 94 26 27 0 27 1 3 1 2 4 99 | 95 25 24 0 20 1 3 1 2 4 100 | 96 22 27 0 11 1 3 1 2 4 101 | 97 25 21 0 12 1 3 1 2 4 102 | 98 19 21 0 10 1 3 1 2 4 103 | 99 20 26 0 9 1 3 1 2 4 104 | 100 18 18 0 17 1 3 1 2 4 105 | 101 15 20 0 0 0 0 106 | 102 50 20 0 0 0 0 107 | 103 35 55 0 0 0 0 108 | -------------------------------------------------------------------------------- /data/input/p07: -------------------------------------------------------------------------------- 1 | 2 4 100 4 2 | 0 100 3 | 0 100 4 | 0 100 5 | 0 100 6 | 1 41 49 0 10 1 4 1 2 4 8 7 | 2 35 17 0 7 1 4 1 2 4 8 8 | 3 55 45 0 13 1 4 1 2 4 8 9 | 4 55 20 0 19 1 4 1 2 4 8 10 | 5 15 30 0 26 1 4 1 2 4 8 11 | 6 25 30 0 3 1 4 1 2 4 8 12 | 7 20 50 0 5 1 4 1 2 4 8 13 | 8 10 43 0 9 1 4 1 2 4 8 14 | 9 55 60 0 16 1 4 1 2 4 8 15 | 10 30 60 0 16 1 4 1 2 4 8 16 | 11 20 65 0 12 1 4 1 2 4 8 17 | 12 50 35 0 19 1 4 1 2 4 8 18 | 13 30 25 0 23 1 4 1 2 4 8 19 | 14 15 10 0 20 1 4 1 2 4 8 20 | 15 30 5 0 8 1 4 1 2 4 8 21 | 16 10 20 0 19 1 4 1 2 4 8 22 | 17 5 30 0 2 1 4 1 2 4 8 23 | 18 20 40 0 12 1 4 1 2 4 8 24 | 19 15 60 0 17 1 4 1 2 4 8 25 | 20 45 65 0 9 1 4 1 2 4 8 26 | 21 45 20 0 11 1 4 1 2 4 8 27 | 22 45 10 0 18 1 4 1 2 4 8 28 | 23 55 5 0 29 1 4 1 2 4 8 29 | 24 65 35 0 3 1 4 1 2 4 8 30 | 25 65 20 0 6 1 4 1 2 4 8 31 | 26 45 30 0 17 1 4 1 2 4 8 32 | 27 35 40 0 16 1 4 1 2 4 8 33 | 28 41 37 0 16 1 4 1 2 4 8 34 | 29 64 42 0 9 1 4 1 2 4 8 35 | 30 40 60 0 21 1 4 1 2 4 8 36 | 31 31 52 0 27 1 4 1 2 4 8 37 | 32 35 69 0 23 1 4 1 2 4 8 38 | 33 53 52 0 11 1 4 1 2 4 8 39 | 34 65 55 0 14 1 4 1 2 4 8 40 | 35 63 65 0 8 1 4 1 2 4 8 41 | 36 2 60 0 5 1 4 1 2 4 8 42 | 37 20 20 0 8 1 4 1 2 4 8 43 | 38 5 5 0 16 1 4 1 2 4 8 44 | 39 60 12 0 31 1 4 1 2 4 8 45 | 40 40 25 0 9 1 4 1 2 4 8 46 | 41 42 7 0 5 1 4 1 2 4 8 47 | 42 24 12 0 5 1 4 1 2 4 8 48 | 43 23 3 0 7 1 4 1 2 4 8 49 | 44 11 14 0 18 1 4 1 2 4 8 50 | 45 6 38 0 16 1 4 1 2 4 8 51 | 46 2 48 0 1 1 4 1 2 4 8 52 | 47 8 56 0 27 1 4 1 2 4 8 53 | 48 13 52 0 36 1 4 1 2 4 8 54 | 49 6 68 0 30 1 4 1 2 4 8 55 | 50 47 47 0 13 1 4 1 2 4 8 56 | 51 49 58 0 10 1 4 1 2 4 8 57 | 52 27 43 0 9 1 4 1 2 4 8 58 | 53 37 31 0 14 1 4 1 2 4 8 59 | 54 57 29 0 18 1 4 1 2 4 8 60 | 55 63 23 0 2 1 4 1 2 4 8 61 | 56 53 12 0 6 1 4 1 2 4 8 62 | 57 32 12 0 7 1 4 1 2 4 8 63 | 58 36 26 0 18 1 4 1 2 4 8 64 | 59 21 24 0 28 1 4 1 2 4 8 65 | 60 17 34 0 3 1 4 1 2 4 8 66 | 61 12 24 0 13 1 4 1 2 4 8 67 | 62 24 58 0 19 1 4 1 2 4 8 68 | 63 27 69 0 10 1 4 1 2 4 8 69 | 64 15 77 0 9 1 4 1 2 4 8 70 | 65 62 77 0 20 1 4 1 2 4 8 71 | 66 49 73 0 25 1 4 1 2 4 8 72 | 67 67 5 0 25 1 4 1 2 4 8 73 | 68 56 39 0 36 1 4 1 2 4 8 74 | 69 37 47 0 6 1 4 1 2 4 8 75 | 70 37 56 0 5 1 4 1 2 4 8 76 | 71 57 68 0 15 1 4 1 2 4 8 77 | 72 47 16 0 25 1 4 1 2 4 8 78 | 73 44 17 0 9 1 4 1 2 4 8 79 | 74 46 13 0 8 1 4 1 2 4 8 80 | 75 49 11 0 18 1 4 1 2 4 8 81 | 76 49 42 0 13 1 4 1 2 4 8 82 | 77 53 43 0 14 1 4 1 2 4 8 83 | 78 61 52 0 3 1 4 1 2 4 8 84 | 79 57 48 0 23 1 4 1 2 4 8 85 | 80 56 37 0 6 1 4 1 2 4 8 86 | 81 55 54 0 26 1 4 1 2 4 8 87 | 82 15 47 0 16 1 4 1 2 4 8 88 | 83 14 37 0 11 1 4 1 2 4 8 89 | 84 11 31 0 7 1 4 1 2 4 8 90 | 85 16 22 0 41 1 4 1 2 4 8 91 | 86 4 18 0 35 1 4 1 2 4 8 92 | 87 28 18 0 26 1 4 1 2 4 8 93 | 88 26 52 0 9 1 4 1 2 4 8 94 | 89 26 35 0 15 1 4 1 2 4 8 95 | 90 31 67 0 3 1 4 1 2 4 8 96 | 91 15 19 0 1 1 4 1 2 4 8 97 | 92 22 22 0 2 1 4 1 2 4 8 98 | 93 18 24 0 22 1 4 1 2 4 8 99 | 94 26 27 0 27 1 4 1 2 4 8 100 | 95 25 24 0 20 1 4 1 2 4 8 101 | 96 22 27 0 11 1 4 1 2 4 8 102 | 97 25 21 0 12 1 4 1 2 4 8 103 | 98 19 21 0 10 1 4 1 2 4 8 104 | 99 20 26 0 9 1 4 1 2 4 8 105 | 100 18 18 0 17 1 4 1 2 4 8 106 | 101 15 35 0 0 0 0 107 | 102 55 35 0 0 0 0 108 | 103 35 20 0 0 0 0 109 | 104 35 50 0 0 0 0 110 | -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | # Contributor Covenant Code of Conduct 2 | 3 | ## Our Pledge 4 | 5 | In the interest of fostering an open and welcoming environment, we as 6 | contributors and maintainers pledge to making participation in our project and 7 | our community a harassment-free experience for everyone, regardless of age, body 8 | size, disability, ethnicity, sex characteristics, gender identity and expression, 9 | level of experience, education, socio-economic status, nationality, personal 10 | appearance, race, religion, or sexual identity and orientation. 11 | 12 | ## Our Standards 13 | 14 | Examples of behavior that contributes to creating a positive environment 15 | include: 16 | 17 | * Using welcoming and inclusive language 18 | * Being respectful of differing viewpoints and experiences 19 | * Gracefully accepting constructive criticism 20 | * Focusing on what is best for the community 21 | * Showing empathy towards other community members 22 | 23 | Examples of unacceptable behavior by participants include: 24 | 25 | * The use of sexualized language or imagery and unwelcome sexual attention or 26 | advances 27 | * Trolling, insulting/derogatory comments, and personal or political attacks 28 | * Public or private harassment 29 | * Publishing others' private information, such as a physical or electronic 30 | address, without explicit permission 31 | * Other conduct which could reasonably be considered inappropriate in a 32 | professional setting 33 | 34 | ## Our Responsibilities 35 | 36 | Project maintainers are responsible for clarifying the standards of acceptable 37 | behavior and are expected to take appropriate and fair corrective action in 38 | response to any instances of unacceptable behavior. 39 | 40 | Project maintainers have the right and responsibility to remove, edit, or 41 | reject comments, commits, code, wiki edits, issues, and other contributions 42 | that are not aligned to this Code of Conduct, or to ban temporarily or 43 | permanently any contributor for other behaviors that they deem inappropriate, 44 | threatening, offensive, or harmful. 45 | 46 | ## Scope 47 | 48 | This Code of Conduct applies both within project spaces and in public spaces 49 | when an individual is representing the project or its community. Examples of 50 | representing a project or community include using an official project e-mail 51 | address, posting via an official social media account, or acting as an appointed 52 | representative at an online or offline event. Representation of a project may be 53 | further defined and clarified by project maintainers. 54 | 55 | ## Enforcement 56 | 57 | Instances of abusive, harassing, or otherwise unacceptable behavior may be 58 | reported by contacting the project team at nikan.doosti@outlook.com. All 59 | complaints will be reviewed and investigated and will result in a response that 60 | is deemed necessary and appropriate to the circumstances. The project team is 61 | obligated to maintain confidentiality with regard to the reporter of an incident. 62 | Further details of specific enforcement policies may be posted separately. 63 | 64 | Project maintainers who do not follow or enforce the Code of Conduct in good 65 | faith may face temporary or permanent repercussions as determined by other 66 | members of the project's leadership. 67 | 68 | ## Attribution 69 | 70 | This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, 71 | available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html 72 | 73 | [homepage]: https://www.contributor-covenant.org 74 | 75 | For answers to common questions about this code of conduct, see 76 | https://www.contributor-covenant.org/faq 77 | -------------------------------------------------------------------------------- /data/input/pr07: -------------------------------------------------------------------------------- 1 | 2 1 72 6 2 | 500 200 3 | 500 200 4 | 500 200 5 | 500 200 6 | 500 200 7 | 500 200 8 | 1 -92.700 -59.180 8 20 1 6 1 2 4 8 16 32 9 | 2 71.179 12.543 15 6 1 6 1 2 4 8 16 32 10 | 3 31.537 66.638 20 19 1 6 1 2 4 8 16 32 11 | 4 -4.694 25.537 7 10 1 6 1 2 4 8 16 32 12 | 5 -30.194 67.773 13 18 1 6 1 2 4 8 16 32 13 | 6 12.677 -57.471 6 1 1 6 1 2 4 8 16 32 14 | 7 -32.355 -20.966 5 15 1 6 1 2 4 8 16 32 15 | 8 19.910 48.975 1 23 1 6 1 2 4 8 16 32 16 | 9 13.202 -19.135 12 13 1 6 1 2 4 8 16 32 17 | 10 54.877 -41.168 18 12 1 6 1 2 4 8 16 32 18 | 11 15.063 -25.171 25 7 1 6 1 2 4 8 16 32 19 | 12 -50.598 -16.418 14 25 1 6 1 2 4 8 16 32 20 | 13 -29.730 17.078 18 5 1 6 1 2 4 8 16 32 21 | 14 17.542 1.575 13 1 1 6 1 2 4 8 16 32 22 | 15 11.127 77.216 6 25 1 6 1 2 4 8 16 32 23 | 16 33.752 71.259 14 10 1 6 1 2 4 8 16 32 24 | 17 -56.012 -10.394 10 2 1 6 1 2 4 8 16 32 25 | 18 57.874 -16.290 18 7 1 6 1 2 4 8 16 32 26 | 19 10.718 -18.787 8 11 1 6 1 2 4 8 16 32 27 | 20 53.088 -18.750 6 4 1 6 1 2 4 8 16 32 28 | 21 1.569 7.532 2 6 1 6 1 2 4 8 16 32 29 | 22 31.531 48.944 4 15 1 6 1 2 4 8 16 32 30 | 23 -66.833 -37.854 4 7 1 6 1 2 4 8 16 32 31 | 24 -70.740 62.244 23 8 1 6 1 2 4 8 16 32 32 | 25 32.538 23.096 12 10 1 6 1 2 4 8 16 32 33 | 26 -51.453 -36.444 24 9 1 6 1 2 4 8 16 32 34 | 27 36.456 -22.638 17 4 1 6 1 2 4 8 16 32 35 | 28 -31.207 43.494 18 6 1 6 1 2 4 8 16 32 36 | 29 -10.388 34.491 25 22 1 6 1 2 4 8 16 32 37 | 30 14.722 -10.834 22 17 1 6 1 2 4 8 16 32 38 | 31 47.095 -21.387 10 9 1 6 1 2 4 8 16 32 39 | 32 43.781 34.766 25 25 1 6 1 2 4 8 16 32 40 | 33 53.546 -67.487 21 10 1 6 1 2 4 8 16 32 41 | 34 26.801 46.515 21 18 1 6 1 2 4 8 16 32 42 | 35 63.385 11.981 16 21 1 6 1 2 4 8 16 32 43 | 36 47.192 -5.475 23 10 1 6 1 2 4 8 16 32 44 | 37 -16.315 -11.267 21 23 1 6 1 2 4 8 16 32 45 | 38 78.900 17.651 15 23 1 6 1 2 4 8 16 32 46 | 39 79.822 22.272 7 11 1 6 1 2 4 8 16 32 47 | 40 12.878 16.919 20 1 1 6 1 2 4 8 16 32 48 | 41 -67.981 -3.754 6 23 1 6 1 2 4 8 16 32 49 | 42 9.198 -18.597 16 16 1 6 1 2 4 8 16 32 50 | 43 -35.950 -19.141 10 10 1 6 1 2 4 8 16 32 51 | 44 28.766 45.276 7 12 1 6 1 2 4 8 16 32 52 | 45 11.469 68.231 20 12 1 6 1 2 4 8 16 32 53 | 46 -22.760 45.496 9 3 1 6 1 2 4 8 16 32 54 | 47 -65.674 -23.120 12 22 1 6 1 2 4 8 16 32 55 | 48 7.239 1.599 10 21 1 6 1 2 4 8 16 32 56 | 49 -29.785 -11.285 19 13 1 6 1 2 4 8 16 32 57 | 50 -89.050 16.211 6 15 1 6 1 2 4 8 16 32 58 | 51 -46.887 -3.363 14 13 1 6 1 2 4 8 16 32 59 | 52 -14.972 30.621 23 20 1 6 1 2 4 8 16 32 60 | 53 -17.035 49.774 8 10 1 6 1 2 4 8 16 32 61 | 54 31.635 53.619 10 25 1 6 1 2 4 8 16 32 62 | 55 -3.577 13.342 14 7 1 6 1 2 4 8 16 32 63 | 56 33.008 58.960 3 15 1 6 1 2 4 8 16 32 64 | 57 -92.950 63.263 25 2 1 6 1 2 4 8 16 32 65 | 58 -9.137 -22.931 21 23 1 6 1 2 4 8 16 32 66 | 59 -39.960 6.195 5 5 1 6 1 2 4 8 16 32 67 | 60 28.430 -19.214 2 25 1 6 1 2 4 8 16 32 68 | 61 -28.540 -3.485 3 9 1 6 1 2 4 8 16 32 69 | 62 31.415 36.859 21 2 1 6 1 2 4 8 16 32 70 | 63 -49.426 60.602 1 24 1 6 1 2 4 8 16 32 71 | 64 -72.827 -27.765 25 13 1 6 1 2 4 8 16 32 72 | 65 60.083 -45.905 21 20 1 6 1 2 4 8 16 32 73 | 66 10.870 -3.900 21 13 1 6 1 2 4 8 16 32 74 | 67 25.122 7.672 25 15 1 6 1 2 4 8 16 32 75 | 68 -46.997 -17.474 14 4 1 6 1 2 4 8 16 32 76 | 69 16.058 33.020 20 20 1 6 1 2 4 8 16 32 77 | 70 25.409 -11.700 14 8 1 6 1 2 4 8 16 32 78 | 71 68.323 -5.145 11 19 1 6 1 2 4 8 16 32 79 | 72 -13.104 62.158 25 20 1 6 1 2 4 8 16 32 80 | 73 42.395 -8.344 0 0 0 0 81 | 74 -42.175 -14.554 0 0 0 0 82 | 75 16.034 40.726 0 0 0 0 83 | 76 -14.639 29.633 0 0 0 0 84 | 77 16.049 -3.934 0 0 0 0 85 | 78 46.112 12.430 0 0 0 0 86 | -------------------------------------------------------------------------------- /utils/population.py: -------------------------------------------------------------------------------- 1 | from utils.chromosome import Chromosome 2 | 3 | from typing import List 4 | from copy import deepcopy 5 | 6 | 7 | class Population: 8 | """ 9 | A List of `Chromosome`s as a population represents different sizes. 10 | """ 11 | 12 | def __init__(self, id: int, chromosomes: List[Chromosome] = None): 13 | """ 14 | 15 | :param id: Unique int ID for demonstration purposes 16 | :param chromosomes: A `List` of `Chromosome`s 17 | """ 18 | if chromosomes is None: 19 | chromosomes = [] 20 | self.id = id 21 | self.chromosomes = chromosomes 22 | self.size = self.chromosomes.__len__() 23 | 24 | def len(self) -> int: 25 | """ 26 | Number of `Chromosomes`s in the `Population` 27 | :return: An int number 28 | """ 29 | return self.chromosomes.__len__() 30 | 31 | def get_all(self) -> List[Chromosome]: 32 | """ 33 | Returns all `Chromosome`s as a list independently using deep copy 34 | :return: A list 35 | """ 36 | return deepcopy(self.chromosomes) 37 | 38 | def add(self, chromosome: Chromosome): 39 | """ 40 | Adds a `Chromosome` to the `Population` 41 | :param chromosome: `Chromosome` class instance 42 | :return: None 43 | """ 44 | self.chromosomes.append(chromosome) 45 | 46 | def clear(self): 47 | """ 48 | Clear the `Population` from `Chromosome`s 49 | :return: None 50 | """ 51 | self.chromosomes.clear() 52 | 53 | def contains(self, chromosome: Chromosome) -> bool: 54 | """ 55 | Looks for the `Chromosome` in the `Population` and returns if it exist 56 | :param chromosome: A 'Chromosome` class instance 57 | :return: Bool true or false 58 | """ 59 | return self.chromosomes.__contains__(chromosome) 60 | 61 | def copy(self) -> List[Chromosome]: 62 | """ 63 | A shallow copy of the `Chromosome`s in the `Population` using builtin `Copy` method 64 | :return: a list 65 | """ 66 | return self.chromosomes.copy() 67 | 68 | def index(self, chromosome: Chromosome) -> int: 69 | """ 70 | Returns the index of the `Chromosome` in the `Population` 71 | :param chromosome: A `Chromosome` class instance 72 | :return: A int number as the index 73 | """ 74 | return self.chromosomes.index(chromosome) 75 | 76 | def insert(self, index: int, chromosome: Chromosome): 77 | """ 78 | Inserts a new `Chromosome` at a specific `index` 79 | :param index: The index of insertion 80 | :param chromosome: A `Chromosome` class instance 81 | :return: None 82 | """ 83 | return self.chromosomes.insert(index, chromosome) 84 | 85 | def remove(self, chromosome: Chromosome) -> bool: 86 | """ 87 | Removes a `Chromosome` from the `Population` 88 | :param chromosome: a `Chromosome` class instance 89 | :return: bool, if `Chromosome` does not exist returns False, else True 90 | """ 91 | if self.contains(chromosome): 92 | self.chromosomes.remove(chromosome) 93 | return True 94 | return False 95 | 96 | def remove_at(self, index: int) -> bool: 97 | """ 98 | Remove a `Chromosome` at defined `index` from `Population` 99 | :param index: an int number 100 | :return: bool, if `Chromosome` does not exist returns False, else True 101 | """ 102 | if index <= self.len(): 103 | self.chromosomes.remove(self.chromosomes[index]) 104 | return True 105 | return False 106 | 107 | def __getitem__(self, index: int) -> Chromosome: 108 | """ 109 | Makes the class itself subscribable 110 | :param index: The index to List 111 | :return: A `Chromosome` class from `Population`. 112 | """ 113 | return self.chromosomes[index] 114 | 115 | # TODO add describe method 116 | -------------------------------------------------------------------------------- /data/input/pr02: -------------------------------------------------------------------------------- 1 | 2 2 96 4 2 | 480 195 3 | 480 195 4 | 480 195 5 | 480 195 6 | 1 33.588 30.750 12 4 1 4 1 2 4 8 7 | 2 48.828 65.314 1 12 1 4 1 2 4 8 8 | 3 86.176 59.344 1 3 1 4 1 2 4 8 9 | 4 39.270 -33.057 15 15 1 4 1 2 4 8 10 | 5 -23.370 86.853 10 13 1 4 1 2 4 8 11 | 6 48.132 95.593 12 20 1 4 1 2 4 8 12 | 7 -16.357 93.311 15 21 1 4 1 2 4 8 13 | 8 -57.703 -65.601 16 4 1 4 1 2 4 8 14 | 9 7.147 32.684 18 25 1 4 1 2 4 8 15 | 10 42.950 68.701 9 21 1 4 1 2 4 8 16 | 11 37.085 -2.112 5 7 1 4 1 2 4 8 17 | 12 77.759 55.817 19 3 1 4 1 2 4 8 18 | 13 -17.462 -56.567 11 9 1 4 1 2 4 8 19 | 14 58.575 59.888 12 5 1 4 1 2 4 8 20 | 15 57.776 15.344 13 20 1 4 1 2 4 8 21 | 16 -22.327 36.072 8 21 1 4 1 2 4 8 22 | 17 -7.080 30.493 14 19 1 4 1 2 4 8 23 | 18 55.658 60.425 9 2 1 4 1 2 4 8 24 | 19 -14.307 11.456 2 16 1 4 1 2 4 8 25 | 20 -29.724 24.268 25 18 1 4 1 2 4 8 26 | 21 43.219 0.739 6 24 1 4 1 2 4 8 27 | 22 45.184 35.474 16 24 1 4 1 2 4 8 28 | 23 64.484 2.240 18 8 1 4 1 2 4 8 29 | 24 55.078 72.241 4 16 1 4 1 2 4 8 30 | 25 16.925 15.741 17 19 1 4 1 2 4 8 31 | 26 45.038 -3.723 4 12 1 4 1 2 4 8 32 | 27 -76.782 5.939 22 9 1 4 1 2 4 8 33 | 28 36.169 0.256 12 3 1 4 1 2 4 8 34 | 29 29.218 8.936 13 15 1 4 1 2 4 8 35 | 30 65.057 5.225 5 4 1 4 1 2 4 8 36 | 31 42.175 -22.284 24 24 1 4 1 2 4 8 37 | 32 25.574 31.726 12 22 1 4 1 2 4 8 38 | 33 31.561 37.262 16 14 1 4 1 2 4 8 39 | 34 66.498 -54.169 8 11 1 4 1 2 4 8 40 | 35 46.576 -17.938 10 20 1 4 1 2 4 8 41 | 36 65.063 40.875 15 5 1 4 1 2 4 8 42 | 37 -2.716 24.768 21 11 1 4 1 2 4 8 43 | 38 -40.002 3.870 5 12 1 4 1 2 4 8 44 | 39 -73.505 57.043 9 7 1 4 1 2 4 8 45 | 40 81.146 -25.714 5 1 1 4 1 2 4 8 46 | 41 12.006 -7.965 9 23 1 4 1 2 4 8 47 | 42 42.761 38.092 20 13 1 4 1 2 4 8 48 | 43 3.857 -23.181 14 4 1 4 1 2 4 8 49 | 44 -7.367 24.390 24 23 1 4 1 2 4 8 50 | 45 35.944 -11.835 23 17 1 4 1 2 4 8 51 | 46 52.075 9.692 12 13 1 4 1 2 4 8 52 | 47 30.725 30.701 13 9 1 4 1 2 4 8 53 | 48 41.223 77.924 19 10 1 4 1 2 4 8 54 | 49 68.884 -40.546 21 22 1 4 1 2 4 8 55 | 50 76.312 86.670 5 21 1 4 1 2 4 8 56 | 51 63.934 78.540 9 13 1 4 1 2 4 8 57 | 52 29.150 -9.961 23 25 1 4 1 2 4 8 58 | 53 85.522 39.954 8 8 1 4 1 2 4 8 59 | 54 31.775 3.870 5 20 1 4 1 2 4 8 60 | 55 -20.544 19.086 8 3 1 4 1 2 4 8 61 | 56 55.353 43.817 10 4 1 4 1 2 4 8 62 | 57 35.406 10.278 9 13 1 4 1 2 4 8 63 | 58 25.464 -0.287 21 18 1 4 1 2 4 8 64 | 59 12.396 0.244 12 1 1 4 1 2 4 8 65 | 60 18.359 20.917 8 10 1 4 1 2 4 8 66 | 61 27.960 -15.039 4 16 1 4 1 2 4 8 67 | 62 -3.192 19.879 14 9 1 4 1 2 4 8 68 | 63 9.332 -41.351 19 13 1 4 1 2 4 8 69 | 64 -20.581 38.177 23 23 1 4 1 2 4 8 70 | 65 27.820 28.729 4 14 1 4 1 2 4 8 71 | 66 59.027 42.310 9 5 1 4 1 2 4 8 72 | 67 56.311 58.734 1 1 1 4 1 2 4 8 73 | 68 -51.654 -0.342 21 6 1 4 1 2 4 8 74 | 69 2.576 32.721 20 20 1 4 1 2 4 8 75 | 70 15.131 -3.046 24 10 1 4 1 2 4 8 76 | 71 66.595 34.937 22 19 1 4 1 2 4 8 77 | 72 19.476 20.142 25 24 1 4 1 2 4 8 78 | 73 -1.172 20.648 19 3 1 4 1 2 4 8 79 | 74 -21.204 13.660 14 5 1 4 1 2 4 8 80 | 75 98.846 1.257 11 13 1 4 1 2 4 8 81 | 76 82.593 72.003 22 5 1 4 1 2 4 8 82 | 77 30.017 -30.896 25 4 1 4 1 2 4 8 83 | 78 33.228 41.663 5 12 1 4 1 2 4 8 84 | 79 39.490 -8.539 10 11 1 4 1 2 4 8 85 | 80 54.498 70.813 4 20 1 4 1 2 4 8 86 | 81 3.058 10.248 4 13 1 4 1 2 4 8 87 | 82 51.831 -16.870 6 1 1 4 1 2 4 8 88 | 83 76.416 11.346 22 3 1 4 1 2 4 8 89 | 84 5.243 0.238 17 2 1 4 1 2 4 8 90 | 85 50.592 34.247 22 23 1 4 1 2 4 8 91 | 86 -5.231 -2.081 3 8 1 4 1 2 4 8 92 | 87 24.194 25.836 25 25 1 4 1 2 4 8 93 | 88 33.630 37.585 22 18 1 4 1 2 4 8 94 | 89 31.445 -7.001 23 4 1 4 1 2 4 8 95 | 90 30.707 -28.168 16 5 1 4 1 2 4 8 96 | 91 49.860 1.038 13 21 1 4 1 2 4 8 97 | 92 -35.767 14.142 23 23 1 4 1 2 4 8 98 | 93 -29.309 4.889 1 19 1 4 1 2 4 8 99 | 94 19.049 41.974 11 2 1 4 1 2 4 8 100 | 95 27.600 13.934 19 21 1 4 1 2 4 8 101 | 96 52.832 50.684 21 10 1 4 1 2 4 8 102 | 97 6.229 10.590 0 0 0 0 103 | 98 32.663 44.730 0 0 0 0 104 | 99 48.807 48.792 0 0 0 0 105 | 100 33.179 -4.968 0 0 0 0 106 | -------------------------------------------------------------------------------- /data/input/p15: -------------------------------------------------------------------------------- 1 | 2 5 160 4 2 | 0 60 3 | 0 60 4 | 0 60 5 | 0 60 6 | 1 -10 -10 0 12 1 4 1 2 4 8 7 | 2 -10 0 0 12 1 4 1 2 4 8 8 | 3 -10 10 0 12 1 4 1 2 4 8 9 | 4 0 -10 0 12 1 4 1 2 4 8 10 | 5 0 10 0 12 1 4 1 2 4 8 11 | 6 10 -10 0 12 1 4 1 2 4 8 12 | 7 10 0 0 12 1 4 1 2 4 8 13 | 8 10 10 0 12 1 4 1 2 4 8 14 | 9 -20 -20 0 8 1 4 1 2 4 8 15 | 10 -20 0 0 8 1 4 1 2 4 8 16 | 11 -20 20 0 8 1 4 1 2 4 8 17 | 12 0 -20 0 8 1 4 1 2 4 8 18 | 13 0 20 0 8 1 4 1 2 4 8 19 | 14 20 -20 0 8 1 4 1 2 4 8 20 | 15 20 0 0 8 1 4 1 2 4 8 21 | 16 20 20 0 8 1 4 1 2 4 8 22 | 17 -30 -30 0 4 1 4 1 2 4 8 23 | 18 -30 0 0 4 1 4 1 2 4 8 24 | 19 -30 30 0 4 1 4 1 2 4 8 25 | 20 0 -30 0 4 1 4 1 2 4 8 26 | 21 0 30 0 4 1 4 1 2 4 8 27 | 22 30 -30 0 4 1 4 1 2 4 8 28 | 23 30 0 0 4 1 4 1 2 4 8 29 | 24 30 30 0 4 1 4 1 2 4 8 30 | 25 -40 -40 0 2 1 4 1 2 4 8 31 | 26 -40 0 0 2 1 4 1 2 4 8 32 | 27 -40 40 0 2 1 4 1 2 4 8 33 | 28 0 -40 0 2 1 4 1 2 4 8 34 | 29 0 40 0 2 1 4 1 2 4 8 35 | 30 40 -40 0 2 1 4 1 2 4 8 36 | 31 40 0 0 2 1 4 1 2 4 8 37 | 32 40 40 0 2 1 4 1 2 4 8 38 | 33 -50 -50 0 1 1 4 1 2 4 8 39 | 34 -50 0 0 1 1 4 1 2 4 8 40 | 35 -50 50 0 1 1 4 1 2 4 8 41 | 36 0 -50 0 1 1 4 1 2 4 8 42 | 37 0 50 0 1 1 4 1 2 4 8 43 | 38 50 -50 0 1 1 4 1 2 4 8 44 | 39 50 0 0 1 1 4 1 2 4 8 45 | 40 50 50 0 1 1 4 1 2 4 8 46 | 41 100 -10 0 12 1 4 1 2 4 8 47 | 42 100 0 0 12 1 4 1 2 4 8 48 | 43 100 10 0 12 1 4 1 2 4 8 49 | 44 110 -10 0 12 1 4 1 2 4 8 50 | 45 110 10 0 12 1 4 1 2 4 8 51 | 46 120 -10 0 12 1 4 1 2 4 8 52 | 47 120 0 0 12 1 4 1 2 4 8 53 | 48 120 10 0 12 1 4 1 2 4 8 54 | 49 90 -20 0 8 1 4 1 2 4 8 55 | 50 90 0 0 8 1 4 1 2 4 8 56 | 51 90 20 0 8 1 4 1 2 4 8 57 | 52 110 -20 0 8 1 4 1 2 4 8 58 | 53 110 20 0 8 1 4 1 2 4 8 59 | 54 130 -20 0 8 1 4 1 2 4 8 60 | 55 130 0 0 8 1 4 1 2 4 8 61 | 56 130 20 0 8 1 4 1 2 4 8 62 | 57 80 -30 0 4 1 4 1 2 4 8 63 | 58 80 0 0 4 1 4 1 2 4 8 64 | 59 80 30 0 4 1 4 1 2 4 8 65 | 60 110 -30 0 4 1 4 1 2 4 8 66 | 61 110 30 0 4 1 4 1 2 4 8 67 | 62 140 -30 0 4 1 4 1 2 4 8 68 | 63 140 0 0 4 1 4 1 2 4 8 69 | 64 140 30 0 4 1 4 1 2 4 8 70 | 65 70 -40 0 2 1 4 1 2 4 8 71 | 66 70 0 0 2 1 4 1 2 4 8 72 | 67 70 40 0 2 1 4 1 2 4 8 73 | 68 110 -40 0 2 1 4 1 2 4 8 74 | 69 110 40 0 2 1 4 1 2 4 8 75 | 70 150 -40 0 2 1 4 1 2 4 8 76 | 71 150 0 0 2 1 4 1 2 4 8 77 | 72 150 40 0 2 1 4 1 2 4 8 78 | 73 60 -50 0 1 1 4 1 2 4 8 79 | 74 60 0 0 1 1 4 1 2 4 8 80 | 75 60 50 0 1 1 4 1 2 4 8 81 | 76 110 -50 0 1 1 4 1 2 4 8 82 | 77 110 50 0 1 1 4 1 2 4 8 83 | 78 160 -50 0 1 1 4 1 2 4 8 84 | 79 160 0 0 1 1 4 1 2 4 8 85 | 80 160 50 0 1 1 4 1 2 4 8 86 | 81 100 100 0 12 1 4 1 2 4 8 87 | 82 100 110 0 12 1 4 1 2 4 8 88 | 83 100 120 0 12 1 4 1 2 4 8 89 | 84 110 100 0 12 1 4 1 2 4 8 90 | 85 110 120 0 12 1 4 1 2 4 8 91 | 86 120 100 0 12 1 4 1 2 4 8 92 | 87 120 110 0 12 1 4 1 2 4 8 93 | 88 120 120 0 12 1 4 1 2 4 8 94 | 89 90 90 0 8 1 4 1 2 4 8 95 | 90 90 110 0 8 1 4 1 2 4 8 96 | 91 90 130 0 8 1 4 1 2 4 8 97 | 92 110 90 0 8 1 4 1 2 4 8 98 | 93 110 130 0 8 1 4 1 2 4 8 99 | 94 130 90 0 8 1 4 1 2 4 8 100 | 95 130 110 0 8 1 4 1 2 4 8 101 | 96 130 130 0 8 1 4 1 2 4 8 102 | 97 80 80 0 4 1 4 1 2 4 8 103 | 98 80 110 0 4 1 4 1 2 4 8 104 | 99 80 140 0 4 1 4 1 2 4 8 105 | 100 110 80 0 4 1 4 1 2 4 8 106 | 101 110 140 0 4 1 4 1 2 4 8 107 | 102 140 80 0 4 1 4 1 2 4 8 108 | 103 140 110 0 4 1 4 1 2 4 8 109 | 104 140 140 0 4 1 4 1 2 4 8 110 | 105 70 70 0 2 1 4 1 2 4 8 111 | 106 70 110 0 2 1 4 1 2 4 8 112 | 107 70 150 0 2 1 4 1 2 4 8 113 | 108 110 70 0 2 1 4 1 2 4 8 114 | 109 110 150 0 2 1 4 1 2 4 8 115 | 110 150 70 0 2 1 4 1 2 4 8 116 | 111 150 110 0 2 1 4 1 2 4 8 117 | 112 150 150 0 2 1 4 1 2 4 8 118 | 113 60 60 0 1 1 4 1 2 4 8 119 | 114 60 110 0 1 1 4 1 2 4 8 120 | 115 60 160 0 1 1 4 1 2 4 8 121 | 116 110 60 0 1 1 4 1 2 4 8 122 | 117 110 160 0 1 1 4 1 2 4 8 123 | 118 160 60 0 1 1 4 1 2 4 8 124 | 119 160 110 0 1 1 4 1 2 4 8 125 | 120 160 160 0 1 1 4 1 2 4 8 126 | 121 -10 100 0 12 1 4 1 2 4 8 127 | 122 -10 110 0 12 1 4 1 2 4 8 128 | 123 -10 120 0 12 1 4 1 2 4 8 129 | 124 0 100 0 12 1 4 1 2 4 8 130 | 125 0 120 0 12 1 4 1 2 4 8 131 | 126 10 100 0 12 1 4 1 2 4 8 132 | 127 10 110 0 12 1 4 1 2 4 8 133 | 128 10 120 0 12 1 4 1 2 4 8 134 | 129 -20 90 0 8 1 4 1 2 4 8 135 | 130 -20 110 0 8 1 4 1 2 4 8 136 | 131 -20 130 0 8 1 4 1 2 4 8 137 | 132 0 90 0 8 1 4 1 2 4 8 138 | 133 0 130 0 8 1 4 1 2 4 8 139 | 134 20 90 0 8 1 4 1 2 4 8 140 | 135 20 110 0 8 1 4 1 2 4 8 141 | 136 20 130 0 8 1 4 1 2 4 8 142 | 137 -30 80 0 4 1 4 1 2 4 8 143 | 138 -30 110 0 4 1 4 1 2 4 8 144 | 139 -30 140 0 4 1 4 1 2 4 8 145 | 140 0 80 0 4 1 4 1 2 4 8 146 | 141 0 140 0 4 1 4 1 2 4 8 147 | 142 30 80 0 4 1 4 1 2 4 8 148 | 143 30 110 0 4 1 4 1 2 4 8 149 | 144 30 140 0 4 1 4 1 2 4 8 150 | 145 -40 70 0 2 1 4 1 2 4 8 151 | 146 -40 110 0 2 1 4 1 2 4 8 152 | 147 -40 150 0 2 1 4 1 2 4 8 153 | 148 0 70 0 2 1 4 1 2 4 8 154 | 149 0 150 0 2 1 4 1 2 4 8 155 | 150 40 70 0 2 1 4 1 2 4 8 156 | 151 40 110 0 2 1 4 1 2 4 8 157 | 152 40 150 0 2 1 4 1 2 4 8 158 | 153 -50 60 0 1 1 4 1 2 4 8 159 | 154 -50 110 0 1 1 4 1 2 4 8 160 | 155 -50 160 0 1 1 4 1 2 4 8 161 | 156 0 60 0 1 1 4 1 2 4 8 162 | 157 0 160 0 1 1 4 1 2 4 8 163 | 158 50 60 0 1 1 4 1 2 4 8 164 | 159 50 110 0 1 1 4 1 2 4 8 165 | 160 50 160 0 1 1 4 1 2 4 8 166 | 161 0 0 0 0 0 0 167 | 162 110 0 0 0 0 0 168 | 163 110 110 0 0 0 0 169 | 164 0 110 0 0 0 0 170 | -------------------------------------------------------------------------------- /data/input/p16: -------------------------------------------------------------------------------- 1 | 2 5 160 4 2 | 200 60 3 | 200 60 4 | 200 60 5 | 200 60 6 | 1 -10 -10 0 12 1 4 1 2 4 8 7 | 2 -10 0 0 12 1 4 1 2 4 8 8 | 3 -10 10 0 12 1 4 1 2 4 8 9 | 4 0 -10 0 12 1 4 1 2 4 8 10 | 5 0 10 0 12 1 4 1 2 4 8 11 | 6 10 -10 0 12 1 4 1 2 4 8 12 | 7 10 0 0 12 1 4 1 2 4 8 13 | 8 10 10 0 12 1 4 1 2 4 8 14 | 9 -20 -20 0 8 1 4 1 2 4 8 15 | 10 -20 0 0 8 1 4 1 2 4 8 16 | 11 -20 20 0 8 1 4 1 2 4 8 17 | 12 0 -20 0 8 1 4 1 2 4 8 18 | 13 0 20 0 8 1 4 1 2 4 8 19 | 14 20 -20 0 8 1 4 1 2 4 8 20 | 15 20 0 0 8 1 4 1 2 4 8 21 | 16 20 20 0 8 1 4 1 2 4 8 22 | 17 -30 -30 0 4 1 4 1 2 4 8 23 | 18 -30 0 0 4 1 4 1 2 4 8 24 | 19 -30 30 0 4 1 4 1 2 4 8 25 | 20 0 -30 0 4 1 4 1 2 4 8 26 | 21 0 30 0 4 1 4 1 2 4 8 27 | 22 30 -30 0 4 1 4 1 2 4 8 28 | 23 30 0 0 4 1 4 1 2 4 8 29 | 24 30 30 0 4 1 4 1 2 4 8 30 | 25 -40 -40 0 2 1 4 1 2 4 8 31 | 26 -40 0 0 2 1 4 1 2 4 8 32 | 27 -40 40 0 2 1 4 1 2 4 8 33 | 28 0 -40 0 2 1 4 1 2 4 8 34 | 29 0 40 0 2 1 4 1 2 4 8 35 | 30 40 -40 0 2 1 4 1 2 4 8 36 | 31 40 0 0 2 1 4 1 2 4 8 37 | 32 40 40 0 2 1 4 1 2 4 8 38 | 33 -50 -50 0 1 1 4 1 2 4 8 39 | 34 -50 0 0 1 1 4 1 2 4 8 40 | 35 -50 50 0 1 1 4 1 2 4 8 41 | 36 0 -50 0 1 1 4 1 2 4 8 42 | 37 0 50 0 1 1 4 1 2 4 8 43 | 38 50 -50 0 1 1 4 1 2 4 8 44 | 39 50 0 0 1 1 4 1 2 4 8 45 | 40 50 50 0 1 1 4 1 2 4 8 46 | 41 100 -10 0 12 1 4 1 2 4 8 47 | 42 100 0 0 12 1 4 1 2 4 8 48 | 43 100 10 0 12 1 4 1 2 4 8 49 | 44 110 -10 0 12 1 4 1 2 4 8 50 | 45 110 10 0 12 1 4 1 2 4 8 51 | 46 120 -10 0 12 1 4 1 2 4 8 52 | 47 120 0 0 12 1 4 1 2 4 8 53 | 48 120 10 0 12 1 4 1 2 4 8 54 | 49 90 -20 0 8 1 4 1 2 4 8 55 | 50 90 0 0 8 1 4 1 2 4 8 56 | 51 90 20 0 8 1 4 1 2 4 8 57 | 52 110 -20 0 8 1 4 1 2 4 8 58 | 53 110 20 0 8 1 4 1 2 4 8 59 | 54 130 -20 0 8 1 4 1 2 4 8 60 | 55 130 0 0 8 1 4 1 2 4 8 61 | 56 130 20 0 8 1 4 1 2 4 8 62 | 57 80 -30 0 4 1 4 1 2 4 8 63 | 58 80 0 0 4 1 4 1 2 4 8 64 | 59 80 30 0 4 1 4 1 2 4 8 65 | 60 110 -30 0 4 1 4 1 2 4 8 66 | 61 110 30 0 4 1 4 1 2 4 8 67 | 62 140 -30 0 4 1 4 1 2 4 8 68 | 63 140 0 0 4 1 4 1 2 4 8 69 | 64 140 30 0 4 1 4 1 2 4 8 70 | 65 70 -40 0 2 1 4 1 2 4 8 71 | 66 70 0 0 2 1 4 1 2 4 8 72 | 67 70 40 0 2 1 4 1 2 4 8 73 | 68 110 -40 0 2 1 4 1 2 4 8 74 | 69 110 40 0 2 1 4 1 2 4 8 75 | 70 150 -40 0 2 1 4 1 2 4 8 76 | 71 150 0 0 2 1 4 1 2 4 8 77 | 72 150 40 0 2 1 4 1 2 4 8 78 | 73 60 -50 0 1 1 4 1 2 4 8 79 | 74 60 0 0 1 1 4 1 2 4 8 80 | 75 60 50 0 1 1 4 1 2 4 8 81 | 76 110 -50 0 1 1 4 1 2 4 8 82 | 77 110 50 0 1 1 4 1 2 4 8 83 | 78 160 -50 0 1 1 4 1 2 4 8 84 | 79 160 0 0 1 1 4 1 2 4 8 85 | 80 160 50 0 1 1 4 1 2 4 8 86 | 81 100 100 0 12 1 4 1 2 4 8 87 | 82 100 110 0 12 1 4 1 2 4 8 88 | 83 100 120 0 12 1 4 1 2 4 8 89 | 84 110 100 0 12 1 4 1 2 4 8 90 | 85 110 120 0 12 1 4 1 2 4 8 91 | 86 120 100 0 12 1 4 1 2 4 8 92 | 87 120 110 0 12 1 4 1 2 4 8 93 | 88 120 120 0 12 1 4 1 2 4 8 94 | 89 90 90 0 8 1 4 1 2 4 8 95 | 90 90 110 0 8 1 4 1 2 4 8 96 | 91 90 130 0 8 1 4 1 2 4 8 97 | 92 110 90 0 8 1 4 1 2 4 8 98 | 93 110 130 0 8 1 4 1 2 4 8 99 | 94 130 90 0 8 1 4 1 2 4 8 100 | 95 130 110 0 8 1 4 1 2 4 8 101 | 96 130 130 0 8 1 4 1 2 4 8 102 | 97 80 80 0 4 1 4 1 2 4 8 103 | 98 80 110 0 4 1 4 1 2 4 8 104 | 99 80 140 0 4 1 4 1 2 4 8 105 | 100 110 80 0 4 1 4 1 2 4 8 106 | 101 110 140 0 4 1 4 1 2 4 8 107 | 102 140 80 0 4 1 4 1 2 4 8 108 | 103 140 110 0 4 1 4 1 2 4 8 109 | 104 140 140 0 4 1 4 1 2 4 8 110 | 105 70 70 0 2 1 4 1 2 4 8 111 | 106 70 110 0 2 1 4 1 2 4 8 112 | 107 70 150 0 2 1 4 1 2 4 8 113 | 108 110 70 0 2 1 4 1 2 4 8 114 | 109 110 150 0 2 1 4 1 2 4 8 115 | 110 150 70 0 2 1 4 1 2 4 8 116 | 111 150 110 0 2 1 4 1 2 4 8 117 | 112 150 150 0 2 1 4 1 2 4 8 118 | 113 60 60 0 1 1 4 1 2 4 8 119 | 114 60 110 0 1 1 4 1 2 4 8 120 | 115 60 160 0 1 1 4 1 2 4 8 121 | 116 110 60 0 1 1 4 1 2 4 8 122 | 117 110 160 0 1 1 4 1 2 4 8 123 | 118 160 60 0 1 1 4 1 2 4 8 124 | 119 160 110 0 1 1 4 1 2 4 8 125 | 120 160 160 0 1 1 4 1 2 4 8 126 | 121 -10 100 0 12 1 4 1 2 4 8 127 | 122 -10 110 0 12 1 4 1 2 4 8 128 | 123 -10 120 0 12 1 4 1 2 4 8 129 | 124 0 100 0 12 1 4 1 2 4 8 130 | 125 0 120 0 12 1 4 1 2 4 8 131 | 126 10 100 0 12 1 4 1 2 4 8 132 | 127 10 110 0 12 1 4 1 2 4 8 133 | 128 10 120 0 12 1 4 1 2 4 8 134 | 129 -20 90 0 8 1 4 1 2 4 8 135 | 130 -20 110 0 8 1 4 1 2 4 8 136 | 131 -20 130 0 8 1 4 1 2 4 8 137 | 132 0 90 0 8 1 4 1 2 4 8 138 | 133 0 130 0 8 1 4 1 2 4 8 139 | 134 20 90 0 8 1 4 1 2 4 8 140 | 135 20 110 0 8 1 4 1 2 4 8 141 | 136 20 130 0 8 1 4 1 2 4 8 142 | 137 -30 80 0 4 1 4 1 2 4 8 143 | 138 -30 110 0 4 1 4 1 2 4 8 144 | 139 -30 140 0 4 1 4 1 2 4 8 145 | 140 0 80 0 4 1 4 1 2 4 8 146 | 141 0 140 0 4 1 4 1 2 4 8 147 | 142 30 80 0 4 1 4 1 2 4 8 148 | 143 30 110 0 4 1 4 1 2 4 8 149 | 144 30 140 0 4 1 4 1 2 4 8 150 | 145 -40 70 0 2 1 4 1 2 4 8 151 | 146 -40 110 0 2 1 4 1 2 4 8 152 | 147 -40 150 0 2 1 4 1 2 4 8 153 | 148 0 70 0 2 1 4 1 2 4 8 154 | 149 0 150 0 2 1 4 1 2 4 8 155 | 150 40 70 0 2 1 4 1 2 4 8 156 | 151 40 110 0 2 1 4 1 2 4 8 157 | 152 40 150 0 2 1 4 1 2 4 8 158 | 153 -50 60 0 1 1 4 1 2 4 8 159 | 154 -50 110 0 1 1 4 1 2 4 8 160 | 155 -50 160 0 1 1 4 1 2 4 8 161 | 156 0 60 0 1 1 4 1 2 4 8 162 | 157 0 160 0 1 1 4 1 2 4 8 163 | 158 50 60 0 1 1 4 1 2 4 8 164 | 159 50 110 0 1 1 4 1 2 4 8 165 | 160 50 160 0 1 1 4 1 2 4 8 166 | 161 0 0 0 0 0 0 167 | 162 110 0 0 0 0 0 168 | 163 110 110 0 0 0 0 169 | 164 0 110 0 0 0 0 170 | -------------------------------------------------------------------------------- /data/input/p17: -------------------------------------------------------------------------------- 1 | 2 5 160 4 2 | 180 60 3 | 180 60 4 | 180 60 5 | 180 60 6 | 1 -10 -10 0 12 1 4 1 2 4 8 7 | 2 -10 0 0 12 1 4 1 2 4 8 8 | 3 -10 10 0 12 1 4 1 2 4 8 9 | 4 0 -10 0 12 1 4 1 2 4 8 10 | 5 0 10 0 12 1 4 1 2 4 8 11 | 6 10 -10 0 12 1 4 1 2 4 8 12 | 7 10 0 0 12 1 4 1 2 4 8 13 | 8 10 10 0 12 1 4 1 2 4 8 14 | 9 -20 -20 0 8 1 4 1 2 4 8 15 | 10 -20 0 0 8 1 4 1 2 4 8 16 | 11 -20 20 0 8 1 4 1 2 4 8 17 | 12 0 -20 0 8 1 4 1 2 4 8 18 | 13 0 20 0 8 1 4 1 2 4 8 19 | 14 20 -20 0 8 1 4 1 2 4 8 20 | 15 20 0 0 8 1 4 1 2 4 8 21 | 16 20 20 0 8 1 4 1 2 4 8 22 | 17 -30 -30 0 4 1 4 1 2 4 8 23 | 18 -30 0 0 4 1 4 1 2 4 8 24 | 19 -30 30 0 4 1 4 1 2 4 8 25 | 20 0 -30 0 4 1 4 1 2 4 8 26 | 21 0 30 0 4 1 4 1 2 4 8 27 | 22 30 -30 0 4 1 4 1 2 4 8 28 | 23 30 0 0 4 1 4 1 2 4 8 29 | 24 30 30 0 4 1 4 1 2 4 8 30 | 25 -40 -40 0 2 1 4 1 2 4 8 31 | 26 -40 0 0 2 1 4 1 2 4 8 32 | 27 -40 40 0 2 1 4 1 2 4 8 33 | 28 0 -40 0 2 1 4 1 2 4 8 34 | 29 0 40 0 2 1 4 1 2 4 8 35 | 30 40 -40 0 2 1 4 1 2 4 8 36 | 31 40 0 0 2 1 4 1 2 4 8 37 | 32 40 40 0 2 1 4 1 2 4 8 38 | 33 -50 -50 0 1 1 4 1 2 4 8 39 | 34 -50 0 0 1 1 4 1 2 4 8 40 | 35 -50 50 0 1 1 4 1 2 4 8 41 | 36 0 -50 0 1 1 4 1 2 4 8 42 | 37 0 50 0 1 1 4 1 2 4 8 43 | 38 50 -50 0 1 1 4 1 2 4 8 44 | 39 50 0 0 1 1 4 1 2 4 8 45 | 40 50 50 0 1 1 4 1 2 4 8 46 | 41 100 -10 0 12 1 4 1 2 4 8 47 | 42 100 0 0 12 1 4 1 2 4 8 48 | 43 100 10 0 12 1 4 1 2 4 8 49 | 44 110 -10 0 12 1 4 1 2 4 8 50 | 45 110 10 0 12 1 4 1 2 4 8 51 | 46 120 -10 0 12 1 4 1 2 4 8 52 | 47 120 0 0 12 1 4 1 2 4 8 53 | 48 120 10 0 12 1 4 1 2 4 8 54 | 49 90 -20 0 8 1 4 1 2 4 8 55 | 50 90 0 0 8 1 4 1 2 4 8 56 | 51 90 20 0 8 1 4 1 2 4 8 57 | 52 110 -20 0 8 1 4 1 2 4 8 58 | 53 110 20 0 8 1 4 1 2 4 8 59 | 54 130 -20 0 8 1 4 1 2 4 8 60 | 55 130 0 0 8 1 4 1 2 4 8 61 | 56 130 20 0 8 1 4 1 2 4 8 62 | 57 80 -30 0 4 1 4 1 2 4 8 63 | 58 80 0 0 4 1 4 1 2 4 8 64 | 59 80 30 0 4 1 4 1 2 4 8 65 | 60 110 -30 0 4 1 4 1 2 4 8 66 | 61 110 30 0 4 1 4 1 2 4 8 67 | 62 140 -30 0 4 1 4 1 2 4 8 68 | 63 140 0 0 4 1 4 1 2 4 8 69 | 64 140 30 0 4 1 4 1 2 4 8 70 | 65 70 -40 0 2 1 4 1 2 4 8 71 | 66 70 0 0 2 1 4 1 2 4 8 72 | 67 70 40 0 2 1 4 1 2 4 8 73 | 68 110 -40 0 2 1 4 1 2 4 8 74 | 69 110 40 0 2 1 4 1 2 4 8 75 | 70 150 -40 0 2 1 4 1 2 4 8 76 | 71 150 0 0 2 1 4 1 2 4 8 77 | 72 150 40 0 2 1 4 1 2 4 8 78 | 73 60 -50 0 1 1 4 1 2 4 8 79 | 74 60 0 0 1 1 4 1 2 4 8 80 | 75 60 50 0 1 1 4 1 2 4 8 81 | 76 110 -50 0 1 1 4 1 2 4 8 82 | 77 110 50 0 1 1 4 1 2 4 8 83 | 78 160 -50 0 1 1 4 1 2 4 8 84 | 79 160 0 0 1 1 4 1 2 4 8 85 | 80 160 50 0 1 1 4 1 2 4 8 86 | 81 100 100 0 12 1 4 1 2 4 8 87 | 82 100 110 0 12 1 4 1 2 4 8 88 | 83 100 120 0 12 1 4 1 2 4 8 89 | 84 110 100 0 12 1 4 1 2 4 8 90 | 85 110 120 0 12 1 4 1 2 4 8 91 | 86 120 100 0 12 1 4 1 2 4 8 92 | 87 120 110 0 12 1 4 1 2 4 8 93 | 88 120 120 0 12 1 4 1 2 4 8 94 | 89 90 90 0 8 1 4 1 2 4 8 95 | 90 90 110 0 8 1 4 1 2 4 8 96 | 91 90 130 0 8 1 4 1 2 4 8 97 | 92 110 90 0 8 1 4 1 2 4 8 98 | 93 110 130 0 8 1 4 1 2 4 8 99 | 94 130 90 0 8 1 4 1 2 4 8 100 | 95 130 110 0 8 1 4 1 2 4 8 101 | 96 130 130 0 8 1 4 1 2 4 8 102 | 97 80 80 0 4 1 4 1 2 4 8 103 | 98 80 110 0 4 1 4 1 2 4 8 104 | 99 80 140 0 4 1 4 1 2 4 8 105 | 100 110 80 0 4 1 4 1 2 4 8 106 | 101 110 140 0 4 1 4 1 2 4 8 107 | 102 140 80 0 4 1 4 1 2 4 8 108 | 103 140 110 0 4 1 4 1 2 4 8 109 | 104 140 140 0 4 1 4 1 2 4 8 110 | 105 70 70 0 2 1 4 1 2 4 8 111 | 106 70 110 0 2 1 4 1 2 4 8 112 | 107 70 150 0 2 1 4 1 2 4 8 113 | 108 110 70 0 2 1 4 1 2 4 8 114 | 109 110 150 0 2 1 4 1 2 4 8 115 | 110 150 70 0 2 1 4 1 2 4 8 116 | 111 150 110 0 2 1 4 1 2 4 8 117 | 112 150 150 0 2 1 4 1 2 4 8 118 | 113 60 60 0 1 1 4 1 2 4 8 119 | 114 60 110 0 1 1 4 1 2 4 8 120 | 115 60 160 0 1 1 4 1 2 4 8 121 | 116 110 60 0 1 1 4 1 2 4 8 122 | 117 110 160 0 1 1 4 1 2 4 8 123 | 118 160 60 0 1 1 4 1 2 4 8 124 | 119 160 110 0 1 1 4 1 2 4 8 125 | 120 160 160 0 1 1 4 1 2 4 8 126 | 121 -10 100 0 12 1 4 1 2 4 8 127 | 122 -10 110 0 12 1 4 1 2 4 8 128 | 123 -10 120 0 12 1 4 1 2 4 8 129 | 124 0 100 0 12 1 4 1 2 4 8 130 | 125 0 120 0 12 1 4 1 2 4 8 131 | 126 10 100 0 12 1 4 1 2 4 8 132 | 127 10 110 0 12 1 4 1 2 4 8 133 | 128 10 120 0 12 1 4 1 2 4 8 134 | 129 -20 90 0 8 1 4 1 2 4 8 135 | 130 -20 110 0 8 1 4 1 2 4 8 136 | 131 -20 130 0 8 1 4 1 2 4 8 137 | 132 0 90 0 8 1 4 1 2 4 8 138 | 133 0 130 0 8 1 4 1 2 4 8 139 | 134 20 90 0 8 1 4 1 2 4 8 140 | 135 20 110 0 8 1 4 1 2 4 8 141 | 136 20 130 0 8 1 4 1 2 4 8 142 | 137 -30 80 0 4 1 4 1 2 4 8 143 | 138 -30 110 0 4 1 4 1 2 4 8 144 | 139 -30 140 0 4 1 4 1 2 4 8 145 | 140 0 80 0 4 1 4 1 2 4 8 146 | 141 0 140 0 4 1 4 1 2 4 8 147 | 142 30 80 0 4 1 4 1 2 4 8 148 | 143 30 110 0 4 1 4 1 2 4 8 149 | 144 30 140 0 4 1 4 1 2 4 8 150 | 145 -40 70 0 2 1 4 1 2 4 8 151 | 146 -40 110 0 2 1 4 1 2 4 8 152 | 147 -40 150 0 2 1 4 1 2 4 8 153 | 148 0 70 0 2 1 4 1 2 4 8 154 | 149 0 150 0 2 1 4 1 2 4 8 155 | 150 40 70 0 2 1 4 1 2 4 8 156 | 151 40 110 0 2 1 4 1 2 4 8 157 | 152 40 150 0 2 1 4 1 2 4 8 158 | 153 -50 60 0 1 1 4 1 2 4 8 159 | 154 -50 110 0 1 1 4 1 2 4 8 160 | 155 -50 160 0 1 1 4 1 2 4 8 161 | 156 0 60 0 1 1 4 1 2 4 8 162 | 157 0 160 0 1 1 4 1 2 4 8 163 | 158 50 60 0 1 1 4 1 2 4 8 164 | 159 50 110 0 1 1 4 1 2 4 8 165 | 160 50 160 0 1 1 4 1 2 4 8 166 | 161 0 0 0 0 0 0 167 | 162 110 0 0 0 0 0 168 | 163 110 110 0 0 0 0 169 | 164 0 110 0 0 0 0 170 | -------------------------------------------------------------------------------- /data/input/pr03: -------------------------------------------------------------------------------- 1 | 2 3 144 4 2 | 460 190 3 | 460 190 4 | 460 190 5 | 460 190 6 | 1 -55.280 -24.371 25 9 1 4 1 2 4 8 7 | 2 -48.297 53.314 13 22 1 4 1 2 4 8 8 | 3 -49.072 -38.489 20 10 1 4 1 2 4 8 9 | 4 25.311 -18.561 16 24 1 4 1 2 4 8 10 | 5 -24.469 -3.815 4 25 1 4 1 2 4 8 11 | 6 24.591 -17.896 2 6 1 4 1 2 4 8 12 | 7 -10.419 60.364 7 22 1 4 1 2 4 8 13 | 8 38.177 -35.175 15 1 1 4 1 2 4 8 14 | 9 -68.280 93.073 10 19 1 4 1 2 4 8 15 | 10 -30.792 -57.336 4 19 1 4 1 2 4 8 16 | 11 -37.061 -12.122 19 5 1 4 1 2 4 8 17 | 12 -15.741 -47.638 10 9 1 4 1 2 4 8 18 | 13 -63.379 -22.919 15 8 1 4 1 2 4 8 19 | 14 -43.109 -43.439 4 14 1 4 1 2 4 8 20 | 15 -25.623 13.599 17 4 1 4 1 2 4 8 21 | 16 -2.625 16.632 4 7 1 4 1 2 4 8 22 | 17 -41.577 -28.497 3 10 1 4 1 2 4 8 23 | 18 2.081 12.885 9 22 1 4 1 2 4 8 24 | 19 3.925 -47.845 25 17 1 4 1 2 4 8 25 | 20 -83.295 26.324 14 10 1 4 1 2 4 8 26 | 21 -6.458 26.355 23 8 1 4 1 2 4 8 27 | 22 3.290 6.732 7 14 1 4 1 2 4 8 28 | 23 -34.869 30.426 7 12 1 4 1 2 4 8 29 | 24 15.546 -36.273 1 17 1 4 1 2 4 8 30 | 25 12.842 5.127 10 19 1 4 1 2 4 8 31 | 26 -48.450 -24.426 15 25 1 4 1 2 4 8 32 | 27 -88.538 -10.461 1 25 1 4 1 2 4 8 33 | 28 -29.773 0.995 2 6 1 4 1 2 4 8 34 | 29 9.827 38.416 9 21 1 4 1 2 4 8 35 | 30 1.410 92.938 10 3 1 4 1 2 4 8 36 | 31 -79.303 15.381 2 19 1 4 1 2 4 8 37 | 32 -30.652 40.063 23 16 1 4 1 2 4 8 38 | 33 18.927 21.637 15 21 1 4 1 2 4 8 39 | 34 45.087 -59.906 13 17 1 4 1 2 4 8 40 | 35 -34.949 -3.815 16 19 1 4 1 2 4 8 41 | 36 81.201 -74.744 21 6 1 4 1 2 4 8 42 | 37 15.594 -28.455 1 10 1 4 1 2 4 8 43 | 38 -72.192 29.547 18 22 1 4 1 2 4 8 44 | 39 -42.914 -22.675 17 17 1 4 1 2 4 8 45 | 40 -76.392 -57.489 13 16 1 4 1 2 4 8 46 | 41 -28.540 12.073 5 5 1 4 1 2 4 8 47 | 42 -61.389 26.526 23 1 1 4 1 2 4 8 48 | 43 -8.472 12.616 20 21 1 4 1 2 4 8 49 | 44 -61.475 33.392 1 20 1 4 1 2 4 8 50 | 45 -34.674 -27.588 2 6 1 4 1 2 4 8 51 | 46 10.315 -12.518 15 1 1 4 1 2 4 8 52 | 47 -83.014 77.002 20 11 1 4 1 2 4 8 53 | 48 -40.417 49.988 9 22 1 4 1 2 4 8 54 | 49 83.832 33.905 13 25 1 4 1 2 4 8 55 | 50 -20.563 -75.830 4 18 1 4 1 2 4 8 56 | 51 15.442 -18.719 15 9 1 4 1 2 4 8 57 | 52 -59.937 -65.802 5 23 1 4 1 2 4 8 58 | 53 5.151 47.815 8 17 1 4 1 2 4 8 59 | 54 46.008 14.990 19 4 1 4 1 2 4 8 60 | 55 82.977 -1.660 16 1 1 4 1 2 4 8 61 | 56 39.893 -38.916 11 14 1 4 1 2 4 8 62 | 57 90.839 -83.539 23 11 1 4 1 2 4 8 63 | 58 7.068 0.067 14 7 1 4 1 2 4 8 64 | 59 18.958 40.088 24 21 1 4 1 2 4 8 65 | 60 -80.487 58.209 5 3 1 4 1 2 4 8 66 | 61 64.459 -62.946 5 18 1 4 1 2 4 8 67 | 62 -43.616 -26.117 23 5 1 4 1 2 4 8 68 | 63 -18.408 10.303 3 6 1 4 1 2 4 8 69 | 64 -43.921 63.251 10 22 1 4 1 2 4 8 70 | 65 11.353 26.221 23 13 1 4 1 2 4 8 71 | 66 -6.995 38.239 23 17 1 4 1 2 4 8 72 | 67 74.084 -34.216 20 5 1 4 1 2 4 8 73 | 68 14.301 -0.800 5 7 1 4 1 2 4 8 74 | 69 -94.141 -48.779 14 1 1 4 1 2 4 8 75 | 70 15.332 -42.169 1 3 1 4 1 2 4 8 76 | 71 -46.637 -16.461 10 10 1 4 1 2 4 8 77 | 72 -0.958 -81.000 3 5 1 4 1 2 4 8 78 | 73 -37.445 -42.505 4 1 1 4 1 2 4 8 79 | 74 -3.680 -69.073 23 17 1 4 1 2 4 8 80 | 75 34.894 -20.898 21 14 1 4 1 2 4 8 81 | 76 45.544 51.410 3 4 1 4 1 2 4 8 82 | 77 -31.927 88.239 21 10 1 4 1 2 4 8 83 | 78 -13.580 -26.959 25 25 1 4 1 2 4 8 84 | 79 12.653 -48.340 5 11 1 4 1 2 4 8 85 | 80 -46.179 -38.269 11 16 1 4 1 2 4 8 86 | 81 -29.620 35.083 10 25 1 4 1 2 4 8 87 | 82 13.696 43.988 5 20 1 4 1 2 4 8 88 | 83 38.342 -46.338 3 3 1 4 1 2 4 8 89 | 84 -26.227 24.506 13 7 1 4 1 2 4 8 90 | 85 90.009 -43.640 19 2 1 4 1 2 4 8 91 | 86 -6.995 22.522 13 6 1 4 1 2 4 8 92 | 87 -29.993 -28.851 8 14 1 4 1 2 4 8 93 | 88 -56.268 -64.740 13 14 1 4 1 2 4 8 94 | 89 -87.415 90.796 15 2 1 4 1 2 4 8 95 | 90 -5.762 54.034 10 15 1 4 1 2 4 8 96 | 91 -34.845 -27.185 4 22 1 4 1 2 4 8 97 | 92 -16.479 16.180 23 4 1 4 1 2 4 8 98 | 93 23.712 29.492 23 22 1 4 1 2 4 8 99 | 94 -40.991 46.594 14 19 1 4 1 2 4 8 100 | 95 -53.516 -21.619 20 5 1 4 1 2 4 8 101 | 96 -17.560 37.494 3 10 1 4 1 2 4 8 102 | 97 -37.311 56.836 5 4 1 4 1 2 4 8 103 | 98 71.515 22.510 16 7 1 4 1 2 4 8 104 | 99 -41.864 27.710 21 11 1 4 1 2 4 8 105 | 100 14.819 -82.117 4 14 1 4 1 2 4 8 106 | 101 30.316 -55.322 2 2 1 4 1 2 4 8 107 | 102 -39.172 47.998 11 12 1 4 1 2 4 8 108 | 103 -94.415 15.192 15 12 1 4 1 2 4 8 109 | 104 -7.806 11.273 16 24 1 4 1 2 4 8 110 | 105 28.571 -49.908 3 8 1 4 1 2 4 8 111 | 106 -20.654 24.554 21 4 1 4 1 2 4 8 112 | 107 -30.963 -18.903 21 25 1 4 1 2 4 8 113 | 108 1.721 -20.447 25 6 1 4 1 2 4 8 114 | 109 -31.012 -21.106 12 9 1 4 1 2 4 8 115 | 110 -85.718 -28.015 21 23 1 4 1 2 4 8 116 | 111 58.826 -63.043 6 15 1 4 1 2 4 8 117 | 112 -15.753 -52.686 2 7 1 4 1 2 4 8 118 | 113 -71.661 51.184 24 6 1 4 1 2 4 8 119 | 114 -92.633 -6.598 21 5 1 4 1 2 4 8 120 | 115 33.508 -49.255 24 12 1 4 1 2 4 8 121 | 116 59.314 54.095 11 3 1 4 1 2 4 8 122 | 117 30.737 -28.436 12 22 1 4 1 2 4 8 123 | 118 -55.896 18.457 22 18 1 4 1 2 4 8 124 | 119 -89.960 -39.532 19 16 1 4 1 2 4 8 125 | 120 36.438 20.819 8 5 1 4 1 2 4 8 126 | 121 -53.674 -56.427 9 1 1 4 1 2 4 8 127 | 122 -31.866 32.538 10 8 1 4 1 2 4 8 128 | 123 5.658 12.756 5 20 1 4 1 2 4 8 129 | 124 -52.905 42.804 14 17 1 4 1 2 4 8 130 | 125 47.131 -45.465 7 11 1 4 1 2 4 8 131 | 126 30.792 9.869 5 8 1 4 1 2 4 8 132 | 127 -45.209 -56.293 22 15 1 4 1 2 4 8 133 | 128 10.919 13.306 5 16 1 4 1 2 4 8 134 | 129 -32.990 -34.003 1 6 1 4 1 2 4 8 135 | 130 -40.869 30.579 9 24 1 4 1 2 4 8 136 | 131 -69.348 80.408 16 10 1 4 1 2 4 8 137 | 132 -58.966 -29.541 14 4 1 4 1 2 4 8 138 | 133 -36.847 -33.710 21 10 1 4 1 2 4 8 139 | 134 -21.820 65.369 8 17 1 4 1 2 4 8 140 | 135 22.980 -41.010 7 5 1 4 1 2 4 8 141 | 136 -77.557 59.814 24 14 1 4 1 2 4 8 142 | 137 -47.205 67.725 24 16 1 4 1 2 4 8 143 | 138 -21.606 35.168 16 11 1 4 1 2 4 8 144 | 139 -55.676 -31.384 4 25 1 4 1 2 4 8 145 | 140 -85.229 88.788 7 4 1 4 1 2 4 8 146 | 141 -3.918 -63.525 13 12 1 4 1 2 4 8 147 | 142 -58.557 59.375 25 19 1 4 1 2 4 8 148 | 143 -24.542 14.935 10 6 1 4 1 2 4 8 149 | 144 -48.779 16.968 24 23 1 4 1 2 4 8 150 | 145 -40.082 -24.780 0 0 0 0 151 | 146 24.292 -27.704 0 0 0 0 152 | 147 -45.877 41.092 0 0 0 0 153 | 148 -11.896 15.875 0 0 0 0 154 | -------------------------------------------------------------------------------- /utils/depot.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | from typing import List 3 | from copy import deepcopy 4 | 5 | from utils.customer import Customer 6 | 7 | 8 | class Depot: 9 | """ 10 | Depot class represents a list of nodes assigned to this depot which we call a route. 11 | This class is going to be filled by `Customers` class. 12 | """ 13 | 14 | def __init__(self, id, x, y, capacity, depot_customers: List[Customer] = None): 15 | """ 16 | :param id: ID assigned to node for tracking 17 | :param x: X coordinate of depot 18 | :param y: Y coordinate of depot 19 | :param capacity: The maximum capacity of the Depot 20 | (in this project, it is filled by 'weight' of `Customers`. In other words, it indicates vehicles weight limit) 21 | :param depot_customers: A list of `Customer`s 22 | 23 | :return: A list of `Customers` assigned to this depot 24 | """ 25 | if depot_customers is None: 26 | depot_customers = [] 27 | self.id = id 28 | self.x = x 29 | self.y = y 30 | self.capacity = capacity 31 | self.depot_customers = depot_customers 32 | self.routes_ending_indices = [] 33 | if depot_customers is not None: 34 | for i, c in enumerate(depot_customers): 35 | if c.null: 36 | self.routes_ending_indices.append(i) 37 | self.size = self.depot_customers.__len__() 38 | 39 | def route_ending_index(self) -> List[int]: 40 | """ 41 | Sorts then returns the list of indices corresponding to the the index of null customer representing the end 42 | of a route in a `Depot`. 43 | :return: A sorted list of ints indices 44 | """ 45 | return sorted(self.routes_ending_indices) 46 | 47 | def used_capacity(self) -> float: 48 | """ 49 | Returns a float number that demonstrates how much of the capacity of the `Depot` has been used. 50 | 51 | :return: A float number 52 | """ 53 | return sum([customer.cost for customer in self]) 54 | 55 | def get_all(self) -> List[Customer]: 56 | """ 57 | Returns all `Customer`s as a list independently using deep copy 58 | :return: A list 59 | """ 60 | return deepcopy(self.depot_customers) 61 | 62 | def add(self, customer: Customer): 63 | """ 64 | Adds a `Customer` to the `Depot` 65 | :param customer: Customer class instance 66 | :return: None 67 | """ 68 | if customer.null == True: 69 | self.routes_ending_indices.insert(self.routes_ending_indices.__len__() - 1, self.len()) 70 | 71 | self.depot_customers.append(customer) 72 | 73 | def clear(self): 74 | """ 75 | Clear the `Depot` from `Customer`s 76 | :return: None 77 | """ 78 | self.routes_ending_indices = [] 79 | self.depot_customers.clear() 80 | 81 | def len(self) -> int: 82 | """ 83 | Return the number of `Customer`s in the `Depot` 84 | :return: int depot size 85 | """ 86 | return self.depot_customers.__len__() 87 | 88 | def contains(self, customer: Customer) -> bool: 89 | """ 90 | Looks for the `Customer` in the `Depot` and returns if it exist 91 | :param customer: A 'Customer` class instance 92 | :return: Bool true or false 93 | """ 94 | return self.depot_customers.__contains__(customer) 95 | 96 | def copy(self) -> List[Customer]: 97 | """ 98 | A shallow copy of the `Customer`s in the `Depot` using builtin `Copy` method 99 | :return: a list 100 | """ 101 | return self.depot_customers.copy() 102 | 103 | def index(self, customer: Customer) -> int: 104 | """ 105 | Returns the index of the `Customer` in the `Depot` 106 | :param customer: A `Customer` class instance 107 | :return: A int number as the index 108 | """ 109 | return self.depot_customers.index(customer) 110 | 111 | def insert(self, index: int, customer: Customer): 112 | """ 113 | Insterts a new `Customer` into a specific `index` 114 | :param customer: A `Customer` class instance 115 | :return: None 116 | """ 117 | if customer.null == True: 118 | self.routes_ending_indices.insert(self.routes_ending_indices.__len__() - 1, index) 119 | 120 | return self.depot_customers.insert(index, customer) 121 | 122 | def remove(self, customer: Customer) -> bool: 123 | """ 124 | Removes a `Customer` from the `Depot` 125 | :param customer: a `Customer` class instance 126 | :return: bool, if `Customer` does not exist returns False, else True 127 | """ 128 | if self.contains(customer): 129 | if customer.null == True: 130 | self.routes_ending_indices.remove(self.index(customer)) 131 | self.depot_customers.remove(customer) 132 | return True 133 | return False 134 | 135 | def remove_at(self, index: int) -> bool: 136 | """ 137 | Remove a `Customer` at defined `index` from `Depot` 138 | :param index: an int number 139 | :return: bool, if `Customer` does not exist returns False, else True 140 | """ 141 | if index <= self.len(): 142 | if self.depot_customers[index].null == True: 143 | self.routes_ending_indices.remove(index) 144 | self.depot_customers.remove(self.depot_customers[index]) 145 | return True 146 | return False 147 | 148 | def __getitem__(self, index: int): 149 | """ 150 | Makes the class itself subscribable 151 | :param index: The index to List 152 | :return: A `Customer` class from List of `Customer`s. 153 | """ 154 | return self.depot_customers[index] 155 | 156 | def describe(self, print_members=False, verbosity=False): 157 | """ 158 | Print the specifics of the `Depot` 159 | 160 | :param print_members: Whether or not print the specifics of the `Customer`s in the `Depot` 161 | :param verbosity: if True, it prints all information of all members, otherwise, only IDs 162 | :return: 163 | """ 164 | print('-=-=-=-=-=-=-=-=-=-=-=- Depot: STARTED -=-=-=-=-=-=-=-=-=-=-=-') 165 | if verbosity: 166 | print('ID:{}, coordinate=[{}, {}], capacity={}, size={}'.format( 167 | self.id, self.x, self.y, self.capacity, self.size)) 168 | if print_members: 169 | print('Members: ') 170 | for c in self.depot_customers: 171 | c.describe() 172 | else: 173 | print('ID={}, capacity={}/{}'.format(self.id, self.used_capacity(), self.capacity), sep='') 174 | print('Members IDs=') 175 | print([c.id for c in self]) 176 | print('-=-=-=-=-=-=-=-=-=-=-=- Depot: Finished -=-=-=-=-=-=-=-=-=-=-=-') 177 | -------------------------------------------------------------------------------- /data/input/pr08: -------------------------------------------------------------------------------- 1 | 2 2 144 6 2 | 475 190 3 | 475 190 4 | 475 190 5 | 475 190 6 | 475 190 7 | 475 190 8 | 1 -40.289 -42.303 6 20 1 6 1 2 4 8 16 32 9 | 2 -64.709 -17.389 3 10 1 6 1 2 4 8 16 32 10 | 3 5.060 -14.349 23 8 1 6 1 2 4 8 16 32 11 | 4 72.095 20.233 1 6 1 6 1 2 4 8 16 32 12 | 5 2.594 -15.002 18 1 1 6 1 2 4 8 16 32 13 | 6 -24.176 -72.894 8 19 1 6 1 2 4 8 16 32 14 | 7 -13.190 66.498 2 13 1 6 1 2 4 8 16 32 15 | 8 33.191 13.690 9 24 1 6 1 2 4 8 16 32 16 | 9 66.827 -30.554 1 15 1 6 1 2 4 8 16 32 17 | 10 19.934 35.883 20 13 1 6 1 2 4 8 16 32 18 | 11 -27.771 32.269 23 10 1 6 1 2 4 8 16 32 19 | 12 51.154 -16.827 22 4 1 6 1 2 4 8 16 32 20 | 13 -19.214 23.749 24 12 1 6 1 2 4 8 16 32 21 | 14 -46.643 -52.954 21 21 1 6 1 2 4 8 16 32 22 | 15 -10.590 -16.626 18 2 1 6 1 2 4 8 16 32 23 | 16 35.150 12.622 21 10 1 6 1 2 4 8 16 32 24 | 17 -37.378 12.256 7 20 1 6 1 2 4 8 16 32 25 | 18 82.794 25.836 4 9 1 6 1 2 4 8 16 32 26 | 19 8.936 -3.723 21 24 1 6 1 2 4 8 16 32 27 | 20 -56.659 25.555 13 19 1 6 1 2 4 8 16 32 28 | 21 -52.020 -40.137 18 13 1 6 1 2 4 8 16 32 29 | 22 39.270 12.787 4 14 1 6 1 2 4 8 16 32 30 | 23 19.757 21.228 3 17 1 6 1 2 4 8 16 32 31 | 24 -23.071 -12.659 12 25 1 6 1 2 4 8 16 32 32 | 25 15.686 52.374 5 1 1 6 1 2 4 8 16 32 33 | 26 58.771 -7.056 8 9 1 6 1 2 4 8 16 32 34 | 27 -33.087 72.266 14 12 1 6 1 2 4 8 16 32 35 | 28 2.551 46.851 10 22 1 6 1 2 4 8 16 32 36 | 29 -18.719 73.126 14 2 1 6 1 2 4 8 16 32 37 | 30 -67.627 -20.679 19 21 1 6 1 2 4 8 16 32 38 | 31 -76.862 -11.365 20 8 1 6 1 2 4 8 16 32 39 | 32 -24.194 -38.263 21 19 1 6 1 2 4 8 16 32 40 | 33 -20.374 -31.903 11 24 1 6 1 2 4 8 16 32 41 | 34 9.290 39.618 14 24 1 6 1 2 4 8 16 32 42 | 35 26.044 35.974 6 2 1 6 1 2 4 8 16 32 43 | 36 -57.385 -45.264 7 20 1 6 1 2 4 8 16 32 44 | 37 1.489 -62.592 3 20 1 6 1 2 4 8 16 32 45 | 38 34.937 13.672 22 5 1 6 1 2 4 8 16 32 46 | 39 -22.290 45.648 21 17 1 6 1 2 4 8 16 32 47 | 40 -5.920 44.061 12 4 1 6 1 2 4 8 16 32 48 | 41 -38.446 -23.541 1 21 1 6 1 2 4 8 16 32 49 | 42 28.894 33.936 11 3 1 6 1 2 4 8 16 32 50 | 43 -35.388 -5.341 12 16 1 6 1 2 4 8 16 32 51 | 44 -19.501 13.519 19 14 1 6 1 2 4 8 16 32 52 | 45 -9.216 -30.988 8 6 1 6 1 2 4 8 16 32 53 | 46 -22.131 -17.065 11 5 1 6 1 2 4 8 16 32 54 | 47 -22.827 36.810 18 12 1 6 1 2 4 8 16 32 55 | 48 -61.365 -18.463 6 23 1 6 1 2 4 8 16 32 56 | 49 50.128 -66.046 3 12 1 6 1 2 4 8 16 32 57 | 50 25.647 24.139 6 18 1 6 1 2 4 8 16 32 58 | 51 65.521 42.810 10 24 1 6 1 2 4 8 16 32 59 | 52 -60.956 -47.925 7 3 1 6 1 2 4 8 16 32 60 | 53 -9.070 42.798 17 3 1 6 1 2 4 8 16 32 61 | 54 -19.061 4.480 12 25 1 6 1 2 4 8 16 32 62 | 55 -54.071 -3.870 11 22 1 6 1 2 4 8 16 32 63 | 56 -25.598 -18.866 15 25 1 6 1 2 4 8 16 32 64 | 57 -18.707 84.296 6 15 1 6 1 2 4 8 16 32 65 | 58 -70.184 -39.166 13 18 1 6 1 2 4 8 16 32 66 | 59 -14.636 -0.446 3 8 1 6 1 2 4 8 16 32 67 | 60 -76.465 -38.922 23 20 1 6 1 2 4 8 16 32 68 | 61 44.092 12.433 24 18 1 6 1 2 4 8 16 32 69 | 62 -22.772 -50.867 22 5 1 6 1 2 4 8 16 32 70 | 63 19.104 44.672 11 25 1 6 1 2 4 8 16 32 71 | 64 -44.019 -39.935 24 16 1 6 1 2 4 8 16 32 72 | 65 -2.972 -4.059 8 14 1 6 1 2 4 8 16 32 73 | 66 -24.261 35.907 22 1 1 6 1 2 4 8 16 32 74 | 67 -61.877 -73.901 11 15 1 6 1 2 4 8 16 32 75 | 68 -5.640 -26.721 6 22 1 6 1 2 4 8 16 32 76 | 69 45.844 -36.835 10 6 1 6 1 2 4 8 16 32 77 | 70 -51.746 -79.840 10 24 1 6 1 2 4 8 16 32 78 | 71 -33.008 10.992 20 19 1 6 1 2 4 8 16 32 79 | 72 -25.653 -0.372 2 12 1 6 1 2 4 8 16 32 80 | 73 -21.497 61.487 18 13 1 6 1 2 4 8 16 32 81 | 74 2.032 26.727 8 10 1 6 1 2 4 8 16 32 82 | 75 -26.758 14.807 13 12 1 6 1 2 4 8 16 32 83 | 76 -37.256 -44.861 8 13 1 6 1 2 4 8 16 32 84 | 77 -0.861 -16.418 8 25 1 6 1 2 4 8 16 32 85 | 78 -51.160 34.967 18 12 1 6 1 2 4 8 16 32 86 | 79 -41.266 -76.886 17 2 1 6 1 2 4 8 16 32 87 | 80 -30.255 74.701 10 11 1 6 1 2 4 8 16 32 88 | 81 -46.368 -1.514 23 10 1 6 1 2 4 8 16 32 89 | 82 -71.619 73.077 3 9 1 6 1 2 4 8 16 32 90 | 83 -46.606 -39.948 25 21 1 6 1 2 4 8 16 32 91 | 84 -30.243 67.102 4 14 1 6 1 2 4 8 16 32 92 | 85 -40.997 -43.036 25 15 1 6 1 2 4 8 16 32 93 | 86 -74.286 -52.307 5 6 1 6 1 2 4 8 16 32 94 | 87 -17.609 -71.851 9 25 1 6 1 2 4 8 16 32 95 | 88 2.350 -81.805 18 14 1 6 1 2 4 8 16 32 96 | 89 -85.486 -54.059 16 17 1 6 1 2 4 8 16 32 97 | 90 23.822 10.571 16 8 1 6 1 2 4 8 16 32 98 | 91 -24.530 -31.726 22 4 1 6 1 2 4 8 16 32 99 | 92 -42.474 -15.009 2 17 1 6 1 2 4 8 16 32 100 | 93 -33.624 50.330 22 23 1 6 1 2 4 8 16 32 101 | 94 -81.458 -41.565 11 4 1 6 1 2 4 8 16 32 102 | 95 -73.505 -48.279 24 4 1 6 1 2 4 8 16 32 103 | 96 -3.052 70.898 17 9 1 6 1 2 4 8 16 32 104 | 97 0.946 25.458 12 9 1 6 1 2 4 8 16 32 105 | 98 -54.144 13.525 1 19 1 6 1 2 4 8 16 32 106 | 99 -30.634 7.526 23 12 1 6 1 2 4 8 16 32 107 | 100 -68.335 -34.277 4 25 1 6 1 2 4 8 16 32 108 | 101 7.178 57.935 15 8 1 6 1 2 4 8 16 32 109 | 102 4.712 48.669 15 13 1 6 1 2 4 8 16 32 110 | 103 58.087 26.379 12 3 1 6 1 2 4 8 16 32 111 | 104 18.347 34.784 21 6 1 6 1 2 4 8 16 32 112 | 105 -44.629 -61.975 21 11 1 6 1 2 4 8 16 32 113 | 106 5.231 26.068 15 24 1 6 1 2 4 8 16 32 114 | 107 -48.065 -36.755 21 16 1 6 1 2 4 8 16 32 115 | 108 -3.589 -27.734 19 21 1 6 1 2 4 8 16 32 116 | 109 9.808 36.896 11 25 1 6 1 2 4 8 16 32 117 | 110 59.460 1.233 3 10 1 6 1 2 4 8 16 32 118 | 111 -47.522 19.873 12 2 1 6 1 2 4 8 16 32 119 | 112 -48.431 -50.317 4 13 1 6 1 2 4 8 16 32 120 | 113 44.666 20.953 2 14 1 6 1 2 4 8 16 32 121 | 114 -19.226 32.770 9 19 1 6 1 2 4 8 16 32 122 | 115 -15.662 17.462 21 16 1 6 1 2 4 8 16 32 123 | 116 -91.669 77.722 17 23 1 6 1 2 4 8 16 32 124 | 117 -30.035 -78.284 22 13 1 6 1 2 4 8 16 32 125 | 118 73.663 32.941 24 24 1 6 1 2 4 8 16 32 126 | 119 22.400 -60.083 2 17 1 6 1 2 4 8 16 32 127 | 120 61.206 -13.501 25 8 1 6 1 2 4 8 16 32 128 | 121 22.131 -50.012 21 12 1 6 1 2 4 8 16 32 129 | 122 -6.317 56.665 11 6 1 6 1 2 4 8 16 32 130 | 123 -20.471 12.885 23 20 1 6 1 2 4 8 16 32 131 | 124 -61.084 -44.769 4 20 1 6 1 2 4 8 16 32 132 | 125 -9.576 -19.366 1 24 1 6 1 2 4 8 16 32 133 | 126 5.627 -88.501 15 10 1 6 1 2 4 8 16 32 134 | 127 -2.618 22.131 20 18 1 6 1 2 4 8 16 32 135 | 128 40.497 32.343 8 10 1 6 1 2 4 8 16 32 136 | 129 -3.296 36.774 4 15 1 6 1 2 4 8 16 32 137 | 130 -50.995 19.781 12 12 1 6 1 2 4 8 16 32 138 | 131 -70.520 -3.809 23 22 1 6 1 2 4 8 16 32 139 | 132 4.205 0.812 25 11 1 6 1 2 4 8 16 32 140 | 133 9.955 26.337 5 14 1 6 1 2 4 8 16 32 141 | 134 13.538 -21.313 15 9 1 6 1 2 4 8 16 32 142 | 135 -21.869 -18.768 2 6 1 6 1 2 4 8 16 32 143 | 136 -37.158 -30.768 22 23 1 6 1 2 4 8 16 32 144 | 137 -86.975 10.345 16 8 1 6 1 2 4 8 16 32 145 | 138 -47.272 -46.326 23 22 1 6 1 2 4 8 16 32 146 | 139 4.095 -19.354 13 7 1 6 1 2 4 8 16 32 147 | 140 4.205 30.292 7 15 1 6 1 2 4 8 16 32 148 | 141 -42.017 53.986 20 22 1 6 1 2 4 8 16 32 149 | 142 35.095 -10.895 25 7 1 6 1 2 4 8 16 32 150 | 143 61.188 -59.875 12 14 1 6 1 2 4 8 16 32 151 | 144 -34.674 -1.337 9 21 1 6 1 2 4 8 16 32 152 | 145 -3.799 44.290 0 0 0 0 153 | 146 14.233 21.173 0 0 0 0 154 | 147 -23.334 -28.397 0 0 0 0 155 | 148 10.065 1.822 0 0 0 0 156 | 149 -49.115 -43.549 0 0 0 0 157 | 150 -21.054 4.144 0 0 0 0 158 | -------------------------------------------------------------------------------- /utils/chromosome.py: -------------------------------------------------------------------------------- 1 | from utils.customer import Customer 2 | from utils.depot import Depot 3 | from utils import functional as F 4 | 5 | from typing import List 6 | from copy import deepcopy 7 | 8 | 9 | class Chromosome: 10 | """ 11 | Chromosome data structure is a List of Lists. 12 | The outer scope List is `Depot`s and the inner scope List is a List of `Customer` for each `Depot` 13 | """ 14 | 15 | def __init__(self, id: int, capacity: float, fitness: float = -1, chromosome: List[Depot] = None): 16 | """ 17 | A empty chromosome regarding provided number of `Depot`s and capacity. 18 | :param id: Unique int ID for demonstration purposes 19 | :param capacity: The capacity of the `Depot`s which is same for all `Depot`s in a `Chromosome` 20 | :param chromosome: The content of the chromosome which a List of `Depot`s 21 | """ 22 | if chromosome is None: 23 | chromosome = [] 24 | self.id = id 25 | self.capacity = capacity 26 | for d in chromosome: 27 | d.capacity = self.capacity 28 | self.chromosome = chromosome 29 | self.size = self.chromosome.__len__() 30 | self.fitness = fitness 31 | 32 | def fitness_value(self, weight=None) -> float: 33 | """ 34 | The fitness value of the Chromosome will be calculated based on the defined criteria below: 35 | 1. Calculate how many routes a `Chromosome` has aliased as route_count 36 | 2. Calculate the distance in a route by summing up the distances between all members of route sequentially 37 | using `euclidean_distance` function aliases as distance. 38 | 3. Fitness = w1*route_count + w2*distance (The C# source code, uses [1, 1] weights.) 39 | 40 | :return: A float value regarding metric 41 | """ 42 | if weight is None: 43 | weight = [100, 0.001] 44 | distance = 0 45 | route_count = 0 46 | for depot in self: 47 | for route_idx in range(depot.route_ending_index().__len__()): 48 | route, _, _ = F.extract_route_from_depot(depot, route_idx) 49 | temp_depot = Customer(0, depot.x, depot.y, 0, False) 50 | route.insert(0, temp_depot) 51 | distance += sum([F.euclidean_distance(route[i - 1], route[i]) for i, _ in enumerate(route)]) 52 | route.remove(temp_depot) 53 | route_count += depot.route_ending_index().__len__() 54 | self.fitness = weight[0]*distance + weight[1]*route_count 55 | return self.fitness 56 | 57 | def used_capacity(self) -> List[float]: 58 | """ 59 | Returns a list of float number that demonstrates how much of the capacity of each `Depot` have been used. 60 | 61 | :return: A list of float number 62 | """ 63 | return [d.used_capacity() for d in self] 64 | 65 | def len(self) -> int: 66 | """ 67 | Number of `Depot`s in the `chromosome` 68 | :return: An int number 69 | """ 70 | return self.chromosome.__len__() 71 | 72 | def get_all(self) -> List[Depot]: 73 | """ 74 | Returns all `Depot`s as a list independently using deep copy 75 | :return: A list 76 | """ 77 | return deepcopy(self.chromosome) 78 | 79 | def add(self, depot: Depot): 80 | """ 81 | Adds a `Depot` to the `Chromosome` 82 | :param depot: Depot class instance 83 | :return: None 84 | """ 85 | self.chromosome.append(depot) 86 | 87 | def clear(self): 88 | """ 89 | Clear the `Chromosome` from `Depot`s 90 | :return: None 91 | """ 92 | self.chromosome.clear() 93 | 94 | def contains(self, depot: Depot) -> bool: 95 | """ 96 | Looks for the `Depot` in the `Chromosome` and returns if it exist 97 | :param depot: A 'Depot` class instance 98 | :return: Bool true or false 99 | """ 100 | return self.chromosome.__contains__(depot) 101 | 102 | def copy(self) -> List[Depot]: 103 | """ 104 | A shallow copy of the `Depot`s in the `Chromosome` using builtin `Copy` method 105 | :return: a list 106 | """ 107 | return self.chromosome.copy() 108 | 109 | def index(self, depot: Depot) -> int: 110 | """ 111 | Returns the index of the `Depot` in the `Chromosome` 112 | :param depot: A `Depot` class instance 113 | :return: A int number as the index 114 | """ 115 | return self.chromosome.index(depot) 116 | 117 | def insert(self, index: int, depot: Depot): 118 | """ 119 | Inserts a new `Depot` at a specific `index` 120 | :param index: The index of insertion 121 | :param depot: A `Depot` class instance 122 | :return: None 123 | """ 124 | return self.chromosome.insert(index, depot) 125 | 126 | def remove(self, depot: Depot) -> bool: 127 | """ 128 | Removes a `Depot` from the `Chromosome` 129 | :param depot: a `Depot` class instance 130 | :return: bool, if `Depot` does not exist returns False, else True 131 | """ 132 | if self.contains(depot): 133 | self.chromosome.remove(depot) 134 | return True 135 | return False 136 | 137 | def remove_at(self, index: int) -> bool: 138 | """ 139 | Remove a `Depot` at defined `index` from `Chromosome` 140 | :param index: an int number 141 | :return: bool, if `Depot` does not exist returns False, else True 142 | """ 143 | if index <= self.len(): 144 | self.chromosome.remove(self.chromosome[index]) 145 | return True 146 | return False 147 | 148 | def __getitem__(self, index: int): 149 | """ 150 | Makes the class itself subscribable 151 | :param index: The index to List 152 | :return: A `Depot` class from List of `Depot`s. 153 | """ 154 | return self.chromosome[index] 155 | 156 | def describe(self, print_members=False, verbosity=True): 157 | """ 158 | Print the specifics of the `Chromosome` 159 | 160 | :param print_members: Whether or not print the specifics of the `Customer`s and the `Depot`s. 161 | :param verbosity: if True, it prints all information of all members, otherwise, only IDs 162 | :return: Standard Console text 163 | """ 164 | print('-=-=-=-=-=-=-=-=-=-=-=- Chromosome: STARTED -=-=-=-=-=-=-=-=-=-=-=-') 165 | if verbosity: 166 | print('ID={}, fitness={}, used capacity={}/{}, size={}'.format( 167 | self.id, self.fitness, self.used_capacity(), self.capacity, self.len())) 168 | if print_members: 169 | print('Members: ') 170 | for i, dpt in enumerate(self.chromosome): 171 | print('Depot #{} Customers:'.format(i + 1)) 172 | for c in dpt: 173 | c.describe() 174 | else: 175 | print('ID={}, fitness:{}, used capacity={}, '. 176 | format(self.id, self.fitness, self.used_capacity()), sep='') 177 | print('Members IDs=') 178 | for d in self: 179 | print([c.id for c in d]) 180 | print('-=-=-=-=-=-=-=-=-=-=-=- Chromosome: Finished -=-=-=-=-=-=-=-=-=-=-=-') 181 | -------------------------------------------------------------------------------- /data/input/p08: -------------------------------------------------------------------------------- 1 | 2 14 249 2 2 | 310 500 3 | 310 500 4 | 1 -99 -97 0 6 1 2 1 2 5 | 2 -59 50 0 72 1 2 1 2 6 | 3 0 14 0 93 1 2 1 2 7 | 4 -17 -66 0 28 1 2 1 2 8 | 5 -69 -19 0 5 1 2 1 2 9 | 6 31 12 0 43 1 2 1 2 10 | 7 5 -41 0 1 1 2 1 2 11 | 8 -12 10 0 36 1 2 1 2 12 | 9 -64 70 0 53 1 2 1 2 13 | 10 -12 85 0 63 1 2 1 2 14 | 11 -18 64 0 25 1 2 1 2 15 | 12 -77 -16 0 50 1 2 1 2 16 | 13 -53 88 0 57 1 2 1 2 17 | 14 83 -24 0 1 1 2 1 2 18 | 15 24 41 0 66 1 2 1 2 19 | 16 17 21 0 37 1 2 1 2 20 | 17 42 96 0 51 1 2 1 2 21 | 18 -65 0 0 47 1 2 1 2 22 | 19 -47 -26 0 88 1 2 1 2 23 | 20 85 36 0 75 1 2 1 2 24 | 21 -35 -54 0 48 1 2 1 2 25 | 22 54 -21 0 40 1 2 1 2 26 | 23 64 -17 0 8 1 2 1 2 27 | 24 55 89 0 69 1 2 1 2 28 | 25 17 -25 0 93 1 2 1 2 29 | 26 -61 66 0 29 1 2 1 2 30 | 27 -61 26 0 5 1 2 1 2 31 | 28 17 -72 0 53 1 2 1 2 32 | 29 79 38 0 8 1 2 1 2 33 | 30 -62 -2 0 24 1 2 1 2 34 | 31 -90 -68 0 53 1 2 1 2 35 | 32 52 66 0 13 1 2 1 2 36 | 33 -54 -50 0 47 1 2 1 2 37 | 34 8 -84 0 57 1 2 1 2 38 | 35 37 -90 0 9 1 2 1 2 39 | 36 -83 49 0 74 1 2 1 2 40 | 37 35 -1 0 83 1 2 1 2 41 | 38 7 59 0 96 1 2 1 2 42 | 39 12 48 0 42 1 2 1 2 43 | 40 57 95 0 80 1 2 1 2 44 | 41 92 28 0 22 1 2 1 2 45 | 42 -3 97 0 56 1 2 1 2 46 | 43 -7 52 0 43 1 2 1 2 47 | 44 42 -15 0 12 1 2 1 2 48 | 45 77 -43 0 73 1 2 1 2 49 | 46 59 -49 0 32 1 2 1 2 50 | 47 25 91 0 8 1 2 1 2 51 | 48 69 -19 0 79 1 2 1 2 52 | 49 -82 -14 0 79 1 2 1 2 53 | 50 74 -70 0 4 1 2 1 2 54 | 51 69 59 0 14 1 2 1 2 55 | 52 29 33 0 17 1 2 1 2 56 | 53 -97 9 0 19 1 2 1 2 57 | 54 -58 9 0 44 1 2 1 2 58 | 55 28 93 0 5 1 2 1 2 59 | 56 7 73 0 37 1 2 1 2 60 | 57 -28 73 0 100 1 2 1 2 61 | 58 -76 55 0 62 1 2 1 2 62 | 59 41 42 0 90 1 2 1 2 63 | 60 92 40 0 57 1 2 1 2 64 | 61 -84 -29 0 44 1 2 1 2 65 | 62 -12 42 0 37 1 2 1 2 66 | 63 51 -45 0 80 1 2 1 2 67 | 64 -37 46 0 60 1 2 1 2 68 | 65 -97 35 0 95 1 2 1 2 69 | 66 14 89 0 56 1 2 1 2 70 | 67 60 58 0 56 1 2 1 2 71 | 68 -63 -75 0 9 1 2 1 2 72 | 69 -18 34 0 39 1 2 1 2 73 | 70 -46 -82 0 15 1 2 1 2 74 | 71 -86 -79 0 4 1 2 1 2 75 | 72 -43 -30 0 58 1 2 1 2 76 | 73 -44 7 0 73 1 2 1 2 77 | 74 -3 -20 0 5 1 2 1 2 78 | 75 36 41 0 12 1 2 1 2 79 | 76 -30 -94 0 3 1 2 1 2 80 | 77 79 -62 0 8 1 2 1 2 81 | 78 51 70 0 31 1 2 1 2 82 | 79 -61 -26 0 48 1 2 1 2 83 | 80 6 94 0 3 1 2 1 2 84 | 81 -19 -62 0 52 1 2 1 2 85 | 82 -20 51 0 99 1 2 1 2 86 | 83 -81 37 0 29 1 2 1 2 87 | 84 7 31 0 12 1 2 1 2 88 | 85 52 12 0 50 1 2 1 2 89 | 86 83 -91 0 98 1 2 1 2 90 | 87 -7 -92 0 4 1 2 1 2 91 | 88 82 -74 0 56 1 2 1 2 92 | 89 -70 85 0 24 1 2 1 2 93 | 90 -83 -30 0 33 1 2 1 2 94 | 91 71 -61 0 45 1 2 1 2 95 | 92 85 11 0 98 1 2 1 2 96 | 93 66 -48 0 4 1 2 1 2 97 | 94 78 -87 0 36 1 2 1 2 98 | 95 9 -79 0 72 1 2 1 2 99 | 96 -36 4 0 26 1 2 1 2 100 | 97 66 39 0 71 1 2 1 2 101 | 98 92 -17 0 84 1 2 1 2 102 | 99 -46 -79 0 21 1 2 1 2 103 | 100 -30 -63 0 99 1 2 1 2 104 | 101 -42 63 0 33 1 2 1 2 105 | 102 20 42 0 84 1 2 1 2 106 | 103 15 98 0 74 1 2 1 2 107 | 104 1 -17 0 93 1 2 1 2 108 | 105 64 20 0 25 1 2 1 2 109 | 106 -96 85 0 39 1 2 1 2 110 | 107 93 -29 0 42 1 2 1 2 111 | 108 -40 -84 0 77 1 2 1 2 112 | 109 86 35 0 68 1 2 1 2 113 | 110 91 36 0 50 1 2 1 2 114 | 111 62 -8 0 42 1 2 1 2 115 | 112 -24 4 0 71 1 2 1 2 116 | 113 11 96 0 85 1 2 1 2 117 | 114 -53 62 0 78 1 2 1 2 118 | 115 -28 -71 0 64 1 2 1 2 119 | 116 7 -4 0 5 1 2 1 2 120 | 117 95 -9 0 93 1 2 1 2 121 | 118 -3 17 0 18 1 2 1 2 122 | 119 53 -90 0 38 1 2 1 2 123 | 120 58 -19 0 29 1 2 1 2 124 | 121 -83 84 0 81 1 2 1 2 125 | 122 -1 49 0 4 1 2 1 2 126 | 123 -4 17 0 23 1 2 1 2 127 | 124 -82 -3 0 11 1 2 1 2 128 | 125 -43 47 0 86 1 2 1 2 129 | 126 6 -6 0 2 1 2 1 2 130 | 127 70 99 0 31 1 2 1 2 131 | 128 68 -29 0 54 1 2 1 2 132 | 129 -94 -30 0 87 1 2 1 2 133 | 130 -94 -20 0 17 1 2 1 2 134 | 131 -21 77 0 81 1 2 1 2 135 | 132 64 37 0 72 1 2 1 2 136 | 133 -70 -19 0 10 1 2 1 2 137 | 134 88 65 0 50 1 2 1 2 138 | 135 2 29 0 25 1 2 1 2 139 | 136 33 57 0 71 1 2 1 2 140 | 137 -70 6 0 85 1 2 1 2 141 | 138 -38 -56 0 51 1 2 1 2 142 | 139 -80 -95 0 29 1 2 1 2 143 | 140 -5 -39 0 55 1 2 1 2 144 | 141 8 -22 0 45 1 2 1 2 145 | 142 -61 -76 0 100 1 2 1 2 146 | 143 76 -22 0 38 1 2 1 2 147 | 144 49 -71 0 11 1 2 1 2 148 | 145 -30 -68 0 82 1 2 1 2 149 | 146 1 34 0 50 1 2 1 2 150 | 147 77 79 0 39 1 2 1 2 151 | 148 -58 64 0 6 1 2 1 2 152 | 149 82 -97 0 87 1 2 1 2 153 | 150 -80 55 0 83 1 2 1 2 154 | 151 81 -86 0 22 1 2 1 2 155 | 152 39 -49 0 24 1 2 1 2 156 | 153 -67 72 0 69 1 2 1 2 157 | 154 -25 -89 0 97 1 2 1 2 158 | 155 -44 -95 0 65 1 2 1 2 159 | 156 32 -68 0 97 1 2 1 2 160 | 157 -17 49 0 79 1 2 1 2 161 | 158 93 49 0 79 1 2 1 2 162 | 159 99 81 0 46 1 2 1 2 163 | 160 10 -49 0 52 1 2 1 2 164 | 161 63 -41 0 39 1 2 1 2 165 | 162 38 39 0 94 1 2 1 2 166 | 163 -28 39 0 97 1 2 1 2 167 | 164 -2 -47 0 18 1 2 1 2 168 | 165 38 8 0 3 1 2 1 2 169 | 166 -42 -6 0 23 1 2 1 2 170 | 167 -67 88 0 19 1 2 1 2 171 | 168 19 93 0 40 1 2 1 2 172 | 169 40 27 0 49 1 2 1 2 173 | 170 -61 56 0 96 1 2 1 2 174 | 171 43 33 0 58 1 2 1 2 175 | 172 -18 -39 0 15 1 2 1 2 176 | 173 -69 19 0 21 1 2 1 2 177 | 174 75 -18 0 56 1 2 1 2 178 | 175 31 85 0 67 1 2 1 2 179 | 176 25 58 0 10 1 2 1 2 180 | 177 -16 36 0 36 1 2 1 2 181 | 178 91 15 0 84 1 2 1 2 182 | 179 60 -39 0 59 1 2 1 2 183 | 180 49 -47 0 85 1 2 1 2 184 | 181 42 33 0 60 1 2 1 2 185 | 182 16 -81 0 33 1 2 1 2 186 | 183 -78 53 0 62 1 2 1 2 187 | 184 53 -80 0 70 1 2 1 2 188 | 185 -46 -26 0 79 1 2 1 2 189 | 186 -25 -54 0 98 1 2 1 2 190 | 187 69 -46 0 99 1 2 1 2 191 | 188 0 -78 0 18 1 2 1 2 192 | 189 -84 74 0 55 1 2 1 2 193 | 190 -16 16 0 75 1 2 1 2 194 | 191 -63 -14 0 94 1 2 1 2 195 | 192 51 -77 0 89 1 2 1 2 196 | 193 -39 61 0 13 1 2 1 2 197 | 194 5 97 0 19 1 2 1 2 198 | 195 -55 39 0 19 1 2 1 2 199 | 196 70 -14 0 90 1 2 1 2 200 | 197 0 95 0 35 1 2 1 2 201 | 198 -45 7 0 76 1 2 1 2 202 | 199 38 -24 0 3 1 2 1 2 203 | 200 50 -37 0 11 1 2 1 2 204 | 201 59 71 0 98 1 2 1 2 205 | 202 -73 -96 0 92 1 2 1 2 206 | 203 -29 72 0 1 1 2 1 2 207 | 204 -47 12 0 2 1 2 1 2 208 | 205 -88 -61 0 63 1 2 1 2 209 | 206 -88 36 0 57 1 2 1 2 210 | 207 -46 -3 0 50 1 2 1 2 211 | 208 26 -37 0 19 1 2 1 2 212 | 209 -39 -67 0 24 1 2 1 2 213 | 210 92 27 0 14 1 2 1 2 214 | 211 -80 -31 0 18 1 2 1 2 215 | 212 93 -50 0 77 1 2 1 2 216 | 213 -20 -5 0 28 1 2 1 2 217 | 214 -22 73 0 72 1 2 1 2 218 | 215 -4 -7 0 49 1 2 1 2 219 | 216 54 -48 0 58 1 2 1 2 220 | 217 -70 39 0 84 1 2 1 2 221 | 218 54 -82 0 58 1 2 1 2 222 | 219 29 41 0 41 1 2 1 2 223 | 220 -87 51 0 98 1 2 1 2 224 | 221 -96 -36 0 77 1 2 1 2 225 | 222 49 8 0 57 1 2 1 2 226 | 223 -5 54 0 39 1 2 1 2 227 | 224 -26 43 0 99 1 2 1 2 228 | 225 -11 60 0 83 1 2 1 2 229 | 226 40 61 0 54 1 2 1 2 230 | 227 82 35 0 86 1 2 1 2 231 | 228 -92 12 0 2 1 2 1 2 232 | 229 -93 -86 0 14 1 2 1 2 233 | 230 -66 63 0 42 1 2 1 2 234 | 231 -72 -87 0 14 1 2 1 2 235 | 232 -57 -84 0 55 1 2 1 2 236 | 233 23 52 0 2 1 2 1 2 237 | 234 -56 -62 0 18 1 2 1 2 238 | 235 -19 59 0 17 1 2 1 2 239 | 236 63 -14 0 22 1 2 1 2 240 | 237 -13 38 0 28 1 2 1 2 241 | 238 -19 87 0 3 1 2 1 2 242 | 239 44 -84 0 96 1 2 1 2 243 | 240 98 -17 0 53 1 2 1 2 244 | 241 -16 62 0 15 1 2 1 2 245 | 242 3 66 0 36 1 2 1 2 246 | 243 26 22 0 98 1 2 1 2 247 | 244 -38 -81 0 78 1 2 1 2 248 | 245 70 -80 0 92 1 2 1 2 249 | 246 17 -35 0 65 1 2 1 2 250 | 247 96 -83 0 64 1 2 1 2 251 | 248 -77 80 0 43 1 2 1 2 252 | 249 -14 44 0 50 1 2 1 2 253 | 250 -33 33 0 0 0 0 254 | 251 33 -33 0 0 0 0 255 | -------------------------------------------------------------------------------- /data/input/p09: -------------------------------------------------------------------------------- 1 | 2 12 249 3 2 | 310 500 3 | 310 500 4 | 310 500 5 | 1 -99 -97 0 6 1 3 1 2 4 6 | 2 -59 50 0 72 1 3 1 2 4 7 | 3 0 14 0 93 1 3 1 2 4 8 | 4 -17 -66 0 28 1 3 1 2 4 9 | 5 -69 -19 0 5 1 3 1 2 4 10 | 6 31 12 0 43 1 3 1 2 4 11 | 7 5 -41 0 1 1 3 1 2 4 12 | 8 -12 10 0 36 1 3 1 2 4 13 | 9 -64 70 0 53 1 3 1 2 4 14 | 10 -12 85 0 63 1 3 1 2 4 15 | 11 -18 64 0 25 1 3 1 2 4 16 | 12 -77 -16 0 50 1 3 1 2 4 17 | 13 -53 88 0 57 1 3 1 2 4 18 | 14 83 -24 0 1 1 3 1 2 4 19 | 15 24 41 0 66 1 3 1 2 4 20 | 16 17 21 0 37 1 3 1 2 4 21 | 17 42 96 0 51 1 3 1 2 4 22 | 18 -65 0 0 47 1 3 1 2 4 23 | 19 -47 -26 0 88 1 3 1 2 4 24 | 20 85 36 0 75 1 3 1 2 4 25 | 21 -35 -54 0 48 1 3 1 2 4 26 | 22 54 -21 0 40 1 3 1 2 4 27 | 23 64 -17 0 8 1 3 1 2 4 28 | 24 55 89 0 69 1 3 1 2 4 29 | 25 17 -25 0 93 1 3 1 2 4 30 | 26 -61 66 0 29 1 3 1 2 4 31 | 27 -61 26 0 5 1 3 1 2 4 32 | 28 17 -72 0 53 1 3 1 2 4 33 | 29 79 38 0 8 1 3 1 2 4 34 | 30 -62 -2 0 24 1 3 1 2 4 35 | 31 -90 -68 0 53 1 3 1 2 4 36 | 32 52 66 0 13 1 3 1 2 4 37 | 33 -54 -50 0 47 1 3 1 2 4 38 | 34 8 -84 0 57 1 3 1 2 4 39 | 35 37 -90 0 9 1 3 1 2 4 40 | 36 -83 49 0 74 1 3 1 2 4 41 | 37 35 -1 0 83 1 3 1 2 4 42 | 38 7 59 0 96 1 3 1 2 4 43 | 39 12 48 0 42 1 3 1 2 4 44 | 40 57 95 0 80 1 3 1 2 4 45 | 41 92 28 0 22 1 3 1 2 4 46 | 42 -3 97 0 56 1 3 1 2 4 47 | 43 -7 52 0 43 1 3 1 2 4 48 | 44 42 -15 0 12 1 3 1 2 4 49 | 45 77 -43 0 73 1 3 1 2 4 50 | 46 59 -49 0 32 1 3 1 2 4 51 | 47 25 91 0 8 1 3 1 2 4 52 | 48 69 -19 0 79 1 3 1 2 4 53 | 49 -82 -14 0 79 1 3 1 2 4 54 | 50 74 -70 0 4 1 3 1 2 4 55 | 51 69 59 0 14 1 3 1 2 4 56 | 52 29 33 0 17 1 3 1 2 4 57 | 53 -97 9 0 19 1 3 1 2 4 58 | 54 -58 9 0 44 1 3 1 2 4 59 | 55 28 93 0 5 1 3 1 2 4 60 | 56 7 73 0 37 1 3 1 2 4 61 | 57 -28 73 0 100 1 3 1 2 4 62 | 58 -76 55 0 62 1 3 1 2 4 63 | 59 41 42 0 90 1 3 1 2 4 64 | 60 92 40 0 57 1 3 1 2 4 65 | 61 -84 -29 0 44 1 3 1 2 4 66 | 62 -12 42 0 37 1 3 1 2 4 67 | 63 51 -45 0 80 1 3 1 2 4 68 | 64 -37 46 0 60 1 3 1 2 4 69 | 65 -97 35 0 95 1 3 1 2 4 70 | 66 14 89 0 56 1 3 1 2 4 71 | 67 60 58 0 56 1 3 1 2 4 72 | 68 -63 -75 0 9 1 3 1 2 4 73 | 69 -18 34 0 39 1 3 1 2 4 74 | 70 -46 -82 0 15 1 3 1 2 4 75 | 71 -86 -79 0 4 1 3 1 2 4 76 | 72 -43 -30 0 58 1 3 1 2 4 77 | 73 -44 7 0 73 1 3 1 2 4 78 | 74 -3 -20 0 5 1 3 1 2 4 79 | 75 36 41 0 12 1 3 1 2 4 80 | 76 -30 -94 0 3 1 3 1 2 4 81 | 77 79 -62 0 8 1 3 1 2 4 82 | 78 51 70 0 31 1 3 1 2 4 83 | 79 -61 -26 0 48 1 3 1 2 4 84 | 80 6 94 0 3 1 3 1 2 4 85 | 81 -19 -62 0 52 1 3 1 2 4 86 | 82 -20 51 0 99 1 3 1 2 4 87 | 83 -81 37 0 29 1 3 1 2 4 88 | 84 7 31 0 12 1 3 1 2 4 89 | 85 52 12 0 50 1 3 1 2 4 90 | 86 83 -91 0 98 1 3 1 2 4 91 | 87 -7 -92 0 4 1 3 1 2 4 92 | 88 82 -74 0 56 1 3 1 2 4 93 | 89 -70 85 0 24 1 3 1 2 4 94 | 90 -83 -30 0 33 1 3 1 2 4 95 | 91 71 -61 0 45 1 3 1 2 4 96 | 92 85 11 0 98 1 3 1 2 4 97 | 93 66 -48 0 4 1 3 1 2 4 98 | 94 78 -87 0 36 1 3 1 2 4 99 | 95 9 -79 0 72 1 3 1 2 4 100 | 96 -36 4 0 26 1 3 1 2 4 101 | 97 66 39 0 71 1 3 1 2 4 102 | 98 92 -17 0 84 1 3 1 2 4 103 | 99 -46 -79 0 21 1 3 1 2 4 104 | 100 -30 -63 0 99 1 3 1 2 4 105 | 101 -42 63 0 33 1 3 1 2 4 106 | 102 20 42 0 84 1 3 1 2 4 107 | 103 15 98 0 74 1 3 1 2 4 108 | 104 1 -17 0 93 1 3 1 2 4 109 | 105 64 20 0 25 1 3 1 2 4 110 | 106 -96 85 0 39 1 3 1 2 4 111 | 107 93 -29 0 42 1 3 1 2 4 112 | 108 -40 -84 0 77 1 3 1 2 4 113 | 109 86 35 0 68 1 3 1 2 4 114 | 110 91 36 0 50 1 3 1 2 4 115 | 111 62 -8 0 42 1 3 1 2 4 116 | 112 -24 4 0 71 1 3 1 2 4 117 | 113 11 96 0 85 1 3 1 2 4 118 | 114 -53 62 0 78 1 3 1 2 4 119 | 115 -28 -71 0 64 1 3 1 2 4 120 | 116 7 -4 0 5 1 3 1 2 4 121 | 117 95 -9 0 93 1 3 1 2 4 122 | 118 -3 17 0 18 1 3 1 2 4 123 | 119 53 -90 0 38 1 3 1 2 4 124 | 120 58 -19 0 29 1 3 1 2 4 125 | 121 -83 84 0 81 1 3 1 2 4 126 | 122 -1 49 0 4 1 3 1 2 4 127 | 123 -4 17 0 23 1 3 1 2 4 128 | 124 -82 -3 0 11 1 3 1 2 4 129 | 125 -43 47 0 86 1 3 1 2 4 130 | 126 6 -6 0 2 1 3 1 2 4 131 | 127 70 99 0 31 1 3 1 2 4 132 | 128 68 -29 0 54 1 3 1 2 4 133 | 129 -94 -30 0 87 1 3 1 2 4 134 | 130 -94 -20 0 17 1 3 1 2 4 135 | 131 -21 77 0 81 1 3 1 2 4 136 | 132 64 37 0 72 1 3 1 2 4 137 | 133 -70 -19 0 10 1 3 1 2 4 138 | 134 88 65 0 50 1 3 1 2 4 139 | 135 2 29 0 25 1 3 1 2 4 140 | 136 33 57 0 71 1 3 1 2 4 141 | 137 -70 6 0 85 1 3 1 2 4 142 | 138 -38 -56 0 51 1 3 1 2 4 143 | 139 -80 -95 0 29 1 3 1 2 4 144 | 140 -5 -39 0 55 1 3 1 2 4 145 | 141 8 -22 0 45 1 3 1 2 4 146 | 142 -61 -76 0 100 1 3 1 2 4 147 | 143 76 -22 0 38 1 3 1 2 4 148 | 144 49 -71 0 11 1 3 1 2 4 149 | 145 -30 -68 0 82 1 3 1 2 4 150 | 146 1 34 0 50 1 3 1 2 4 151 | 147 77 79 0 39 1 3 1 2 4 152 | 148 -58 64 0 6 1 3 1 2 4 153 | 149 82 -97 0 87 1 3 1 2 4 154 | 150 -80 55 0 83 1 3 1 2 4 155 | 151 81 -86 0 22 1 3 1 2 4 156 | 152 39 -49 0 24 1 3 1 2 4 157 | 153 -67 72 0 69 1 3 1 2 4 158 | 154 -25 -89 0 97 1 3 1 2 4 159 | 155 -44 -95 0 65 1 3 1 2 4 160 | 156 32 -68 0 97 1 3 1 2 4 161 | 157 -17 49 0 79 1 3 1 2 4 162 | 158 93 49 0 79 1 3 1 2 4 163 | 159 99 81 0 46 1 3 1 2 4 164 | 160 10 -49 0 52 1 3 1 2 4 165 | 161 63 -41 0 39 1 3 1 2 4 166 | 162 38 39 0 94 1 3 1 2 4 167 | 163 -28 39 0 97 1 3 1 2 4 168 | 164 -2 -47 0 18 1 3 1 2 4 169 | 165 38 8 0 3 1 3 1 2 4 170 | 166 -42 -6 0 23 1 3 1 2 4 171 | 167 -67 88 0 19 1 3 1 2 4 172 | 168 19 93 0 40 1 3 1 2 4 173 | 169 40 27 0 49 1 3 1 2 4 174 | 170 -61 56 0 96 1 3 1 2 4 175 | 171 43 33 0 58 1 3 1 2 4 176 | 172 -18 -39 0 15 1 3 1 2 4 177 | 173 -69 19 0 21 1 3 1 2 4 178 | 174 75 -18 0 56 1 3 1 2 4 179 | 175 31 85 0 67 1 3 1 2 4 180 | 176 25 58 0 10 1 3 1 2 4 181 | 177 -16 36 0 36 1 3 1 2 4 182 | 178 91 15 0 84 1 3 1 2 4 183 | 179 60 -39 0 59 1 3 1 2 4 184 | 180 49 -47 0 85 1 3 1 2 4 185 | 181 42 33 0 60 1 3 1 2 4 186 | 182 16 -81 0 33 1 3 1 2 4 187 | 183 -78 53 0 62 1 3 1 2 4 188 | 184 53 -80 0 70 1 3 1 2 4 189 | 185 -46 -26 0 79 1 3 1 2 4 190 | 186 -25 -54 0 98 1 3 1 2 4 191 | 187 69 -46 0 99 1 3 1 2 4 192 | 188 0 -78 0 18 1 3 1 2 4 193 | 189 -84 74 0 55 1 3 1 2 4 194 | 190 -16 16 0 75 1 3 1 2 4 195 | 191 -63 -14 0 94 1 3 1 2 4 196 | 192 51 -77 0 89 1 3 1 2 4 197 | 193 -39 61 0 13 1 3 1 2 4 198 | 194 5 97 0 19 1 3 1 2 4 199 | 195 -55 39 0 19 1 3 1 2 4 200 | 196 70 -14 0 90 1 3 1 2 4 201 | 197 0 95 0 35 1 3 1 2 4 202 | 198 -45 7 0 76 1 3 1 2 4 203 | 199 38 -24 0 3 1 3 1 2 4 204 | 200 50 -37 0 11 1 3 1 2 4 205 | 201 59 71 0 98 1 3 1 2 4 206 | 202 -73 -96 0 92 1 3 1 2 4 207 | 203 -29 72 0 1 1 3 1 2 4 208 | 204 -47 12 0 2 1 3 1 2 4 209 | 205 -88 -61 0 63 1 3 1 2 4 210 | 206 -88 36 0 57 1 3 1 2 4 211 | 207 -46 -3 0 50 1 3 1 2 4 212 | 208 26 -37 0 19 1 3 1 2 4 213 | 209 -39 -67 0 24 1 3 1 2 4 214 | 210 92 27 0 14 1 3 1 2 4 215 | 211 -80 -31 0 18 1 3 1 2 4 216 | 212 93 -50 0 77 1 3 1 2 4 217 | 213 -20 -5 0 28 1 3 1 2 4 218 | 214 -22 73 0 72 1 3 1 2 4 219 | 215 -4 -7 0 49 1 3 1 2 4 220 | 216 54 -48 0 58 1 3 1 2 4 221 | 217 -70 39 0 84 1 3 1 2 4 222 | 218 54 -82 0 58 1 3 1 2 4 223 | 219 29 41 0 41 1 3 1 2 4 224 | 220 -87 51 0 98 1 3 1 2 4 225 | 221 -96 -36 0 77 1 3 1 2 4 226 | 222 49 8 0 57 1 3 1 2 4 227 | 223 -5 54 0 39 1 3 1 2 4 228 | 224 -26 43 0 99 1 3 1 2 4 229 | 225 -11 60 0 83 1 3 1 2 4 230 | 226 40 61 0 54 1 3 1 2 4 231 | 227 82 35 0 86 1 3 1 2 4 232 | 228 -92 12 0 2 1 3 1 2 4 233 | 229 -93 -86 0 14 1 3 1 2 4 234 | 230 -66 63 0 42 1 3 1 2 4 235 | 231 -72 -87 0 14 1 3 1 2 4 236 | 232 -57 -84 0 55 1 3 1 2 4 237 | 233 23 52 0 2 1 3 1 2 4 238 | 234 -56 -62 0 18 1 3 1 2 4 239 | 235 -19 59 0 17 1 3 1 2 4 240 | 236 63 -14 0 22 1 3 1 2 4 241 | 237 -13 38 0 28 1 3 1 2 4 242 | 238 -19 87 0 3 1 3 1 2 4 243 | 239 44 -84 0 96 1 3 1 2 4 244 | 240 98 -17 0 53 1 3 1 2 4 245 | 241 -16 62 0 15 1 3 1 2 4 246 | 242 3 66 0 36 1 3 1 2 4 247 | 243 26 22 0 98 1 3 1 2 4 248 | 244 -38 -81 0 78 1 3 1 2 4 249 | 245 70 -80 0 92 1 3 1 2 4 250 | 246 17 -35 0 65 1 3 1 2 4 251 | 247 96 -83 0 64 1 3 1 2 4 252 | 248 -77 80 0 43 1 3 1 2 4 253 | 249 -14 44 0 50 1 3 1 2 4 254 | 250 70 0 0 0 0 0 255 | 251 -50 60 0 0 0 0 256 | 252 -50 -60 0 0 0 0 257 | -------------------------------------------------------------------------------- /data/input/pr04: -------------------------------------------------------------------------------- 1 | 2 4 192 4 2 | 440 185 3 | 440 185 4 | 440 185 5 | 440 185 6 | 1 -44.629 -55.640 6 11 1 4 1 2 4 8 7 | 2 36.096 64.935 16 11 1 4 1 2 4 8 8 | 3 -25.470 44.580 7 23 1 4 1 2 4 8 9 | 4 -33.954 -73.059 20 16 1 4 1 2 4 8 10 | 5 45.654 35.730 7 16 1 4 1 2 4 8 11 | 6 14.954 -36.719 8 2 1 4 1 2 4 8 12 | 7 -1.477 47.205 4 1 1 4 1 2 4 8 13 | 8 2.155 -40.912 23 25 1 4 1 2 4 8 14 | 9 22.992 1.398 4 24 1 4 1 2 4 8 15 | 10 -28.857 5.957 5 14 1 4 1 2 4 8 16 | 11 -48.120 94.116 15 6 1 4 1 2 4 8 17 | 12 7.239 17.322 12 20 1 4 1 2 4 8 18 | 13 4.614 27.051 12 10 1 4 1 2 4 8 19 | 14 -13.971 28.198 18 11 1 4 1 2 4 8 20 | 15 12.946 -11.688 19 2 1 4 1 2 4 8 21 | 16 -36.670 23.102 17 22 1 4 1 2 4 8 22 | 17 -4.224 -49.310 2 2 1 4 1 2 4 8 23 | 18 1.093 -7.135 15 12 1 4 1 2 4 8 24 | 19 -56.958 27.905 10 9 1 4 1 2 4 8 25 | 20 -80.994 -77.686 3 21 1 4 1 2 4 8 26 | 21 72.260 59.027 24 10 1 4 1 2 4 8 27 | 22 -21.655 1.636 1 13 1 4 1 2 4 8 28 | 23 -20.154 -62.415 22 25 1 4 1 2 4 8 29 | 24 -48.157 6.287 22 9 1 4 1 2 4 8 30 | 25 -5.078 61.597 17 19 1 4 1 2 4 8 31 | 26 17.145 -47.046 7 22 1 4 1 2 4 8 32 | 27 -16.064 8.557 11 4 1 4 1 2 4 8 33 | 28 6.683 -27.069 4 4 1 4 1 2 4 8 34 | 29 15.027 -34.979 15 7 1 4 1 2 4 8 35 | 30 37.946 73.914 15 20 1 4 1 2 4 8 36 | 31 -41.199 -43.018 9 17 1 4 1 2 4 8 37 | 32 32.538 11.786 15 19 1 4 1 2 4 8 38 | 33 -20.306 -20.239 1 12 1 4 1 2 4 8 39 | 34 -35.480 19.135 13 2 1 4 1 2 4 8 40 | 35 58.038 56.659 17 13 1 4 1 2 4 8 41 | 36 -36.694 -6.256 17 24 1 4 1 2 4 8 42 | 37 0.446 -46.735 25 22 1 4 1 2 4 8 43 | 38 -19.690 38.977 5 17 1 4 1 2 4 8 44 | 39 -47.339 20.911 25 19 1 4 1 2 4 8 45 | 40 -79.236 -57.678 2 4 1 4 1 2 4 8 46 | 41 5.597 -34.076 9 12 1 4 1 2 4 8 47 | 42 34.454 -8.289 7 22 1 4 1 2 4 8 48 | 43 18.500 -51.154 5 2 1 4 1 2 4 8 49 | 44 -4.346 -44.525 3 19 1 4 1 2 4 8 50 | 45 -14.148 -74.164 17 3 1 4 1 2 4 8 51 | 46 19.867 77.515 12 5 1 4 1 2 4 8 52 | 47 -50.079 17.871 21 22 1 4 1 2 4 8 53 | 48 42.786 -79.883 18 6 1 4 1 2 4 8 54 | 49 1.520 -29.034 8 9 1 4 1 2 4 8 55 | 50 14.728 -3.436 14 8 1 4 1 2 4 8 56 | 51 -26.166 -48.999 22 24 1 4 1 2 4 8 57 | 52 -63.873 -5.273 16 15 1 4 1 2 4 8 58 | 53 -54.138 7.086 21 16 1 4 1 2 4 8 59 | 54 17.932 -34.094 7 9 1 4 1 2 4 8 60 | 55 -98.706 34.552 12 1 1 4 1 2 4 8 61 | 56 28.802 -8.582 2 18 1 4 1 2 4 8 62 | 57 2.716 90.594 5 17 1 4 1 2 4 8 63 | 58 -31.024 48.938 3 18 1 4 1 2 4 8 64 | 59 -46.545 42.316 11 2 1 4 1 2 4 8 65 | 60 27.289 58.179 2 25 1 4 1 2 4 8 66 | 61 28.815 -28.027 7 21 1 4 1 2 4 8 67 | 62 -26.099 11.328 20 19 1 4 1 2 4 8 68 | 63 0.537 -26.221 7 10 1 4 1 2 4 8 69 | 64 -50.458 7.812 11 2 1 4 1 2 4 8 70 | 65 30.005 19.092 24 21 1 4 1 2 4 8 71 | 66 -12.604 22.058 15 20 1 4 1 2 4 8 72 | 67 22.009 -8.636 5 21 1 4 1 2 4 8 73 | 68 8.942 2.875 25 2 1 4 1 2 4 8 74 | 69 -19.812 0.922 12 6 1 4 1 2 4 8 75 | 70 -4.230 31.250 22 2 1 4 1 2 4 8 76 | 71 17.975 -0.409 11 12 1 4 1 2 4 8 77 | 72 -2.350 42.938 16 12 1 4 1 2 4 8 78 | 73 -16.516 68.085 10 5 1 4 1 2 4 8 79 | 74 -1.190 42.023 3 5 1 4 1 2 4 8 80 | 75 56.635 -44.019 10 8 1 4 1 2 4 8 81 | 76 57.483 35.504 17 15 1 4 1 2 4 8 82 | 77 -26.099 7.477 2 8 1 4 1 2 4 8 83 | 78 7.489 -57.239 21 7 1 4 1 2 4 8 84 | 79 -22.095 55.780 16 14 1 4 1 2 4 8 85 | 80 19.867 38.824 6 18 1 4 1 2 4 8 86 | 81 5.310 49.219 12 17 1 4 1 2 4 8 87 | 82 15.155 6.299 23 5 1 4 1 2 4 8 88 | 83 5.481 -31.500 23 6 1 4 1 2 4 8 89 | 84 7.959 -28.662 18 9 1 4 1 2 4 8 90 | 85 -75.812 4.010 18 24 1 4 1 2 4 8 91 | 86 -43.671 -61.646 14 13 1 4 1 2 4 8 92 | 87 -2.576 -62.140 2 5 1 4 1 2 4 8 93 | 88 -18.842 -36.884 11 4 1 4 1 2 4 8 94 | 89 20.844 21.167 24 22 1 4 1 2 4 8 95 | 90 3.137 -19.220 14 24 1 4 1 2 4 8 96 | 91 -20.361 18.878 3 25 1 4 1 2 4 8 97 | 92 -0.897 -54.938 21 9 1 4 1 2 4 8 98 | 93 -29.553 9.277 8 8 1 4 1 2 4 8 99 | 94 5.048 -35.046 19 8 1 4 1 2 4 8 100 | 95 27.759 48.712 7 25 1 4 1 2 4 8 101 | 96 12.079 -42.346 19 7 1 4 1 2 4 8 102 | 97 -51.270 41.144 23 24 1 4 1 2 4 8 103 | 98 -29.077 4.291 8 16 1 4 1 2 4 8 104 | 99 -18.555 -14.819 18 15 1 4 1 2 4 8 105 | 100 7.855 -49.451 7 7 1 4 1 2 4 8 106 | 101 -19.116 -32.086 1 17 1 4 1 2 4 8 107 | 102 17.651 -52.271 9 9 1 4 1 2 4 8 108 | 103 16.907 -62.964 5 14 1 4 1 2 4 8 109 | 104 18.988 6.219 23 20 1 4 1 2 4 8 110 | 105 -68.878 -64.539 18 6 1 4 1 2 4 8 111 | 106 -13.361 20.264 5 17 1 4 1 2 4 8 112 | 107 -44.440 63.721 17 23 1 4 1 2 4 8 113 | 108 -6.500 71.436 9 14 1 4 1 2 4 8 114 | 109 -51.978 25.409 19 19 1 4 1 2 4 8 115 | 110 -0.739 59.491 20 21 1 4 1 2 4 8 116 | 111 -64.679 83.038 1 6 1 4 1 2 4 8 117 | 112 -11.273 -35.944 18 1 1 4 1 2 4 8 118 | 113 -16.864 7.776 15 22 1 4 1 2 4 8 119 | 114 19.843 -49.805 10 7 1 4 1 2 4 8 120 | 115 -16.284 -2.936 8 14 1 4 1 2 4 8 121 | 116 8.356 67.041 14 7 1 4 1 2 4 8 122 | 117 30.878 24.316 15 25 1 4 1 2 4 8 123 | 118 93.524 -20.233 17 17 1 4 1 2 4 8 124 | 119 -9.332 -56.177 9 10 1 4 1 2 4 8 125 | 120 -34.442 -63.312 13 23 1 4 1 2 4 8 126 | 121 20.941 -5.646 18 22 1 4 1 2 4 8 127 | 122 -3.418 89.594 20 3 1 4 1 2 4 8 128 | 123 -18.738 45.227 8 14 1 4 1 2 4 8 129 | 124 2.435 -30.524 2 14 1 4 1 2 4 8 130 | 125 -28.864 56.616 7 2 1 4 1 2 4 8 131 | 126 76.880 -29.901 6 2 1 4 1 2 4 8 132 | 127 -90.466 10.278 12 21 1 4 1 2 4 8 133 | 128 -35.101 46.545 12 10 1 4 1 2 4 8 134 | 129 -48.395 43.854 25 10 1 4 1 2 4 8 135 | 130 -40.997 26.703 6 5 1 4 1 2 4 8 136 | 131 13.696 34.607 5 9 1 4 1 2 4 8 137 | 132 -71.472 11.450 20 15 1 4 1 2 4 8 138 | 133 -36.230 51.904 2 19 1 4 1 2 4 8 139 | 134 -39.465 4.907 25 7 1 4 1 2 4 8 140 | 135 -16.565 23.773 7 11 1 4 1 2 4 8 141 | 136 10.754 -28.552 6 2 1 4 1 2 4 8 142 | 137 -23.029 47.015 21 25 1 4 1 2 4 8 143 | 138 -8.807 21.216 19 14 1 4 1 2 4 8 144 | 139 -40.039 27.435 22 15 1 4 1 2 4 8 145 | 140 -37.445 -41.040 8 12 1 4 1 2 4 8 146 | 141 48.224 0.085 19 11 1 4 1 2 4 8 147 | 142 -0.323 68.237 6 17 1 4 1 2 4 8 148 | 143 -14.294 -33.423 24 4 1 4 1 2 4 8 149 | 144 -1.440 -34.814 15 24 1 4 1 2 4 8 150 | 145 -34.454 42.346 25 8 1 4 1 2 4 8 151 | 146 8.679 -66.180 6 20 1 4 1 2 4 8 152 | 147 -61.249 -51.367 21 12 1 4 1 2 4 8 153 | 148 -1.093 9.912 4 10 1 4 1 2 4 8 154 | 149 -16.565 66.547 10 12 1 4 1 2 4 8 155 | 150 8.435 52.838 16 9 1 4 1 2 4 8 156 | 151 -22.034 -36.896 12 16 1 4 1 2 4 8 157 | 152 15.765 17.322 13 23 1 4 1 2 4 8 158 | 153 9.003 -18.695 2 15 1 4 1 2 4 8 159 | 154 -4.584 3.491 3 10 1 4 1 2 4 8 160 | 155 8.875 40.662 10 21 1 4 1 2 4 8 161 | 156 26.093 -33.966 18 2 1 4 1 2 4 8 162 | 157 -32.501 39.526 18 16 1 4 1 2 4 8 163 | 158 -32.629 -82.581 11 15 1 4 1 2 4 8 164 | 159 -98.486 22.021 7 11 1 4 1 2 4 8 165 | 160 -59.052 4.163 18 11 1 4 1 2 4 8 166 | 161 7.428 -2.570 15 17 1 4 1 2 4 8 167 | 162 -59.601 12.469 5 3 1 4 1 2 4 8 168 | 163 -11.224 -31.830 20 9 1 4 1 2 4 8 169 | 164 -16.809 -35.040 9 1 1 4 1 2 4 8 170 | 165 21.863 18.140 22 13 1 4 1 2 4 8 171 | 166 45.038 -61.316 13 1 1 4 1 2 4 8 172 | 167 -48.816 25.568 24 2 1 4 1 2 4 8 173 | 168 -32.184 -16.736 4 22 1 4 1 2 4 8 174 | 169 12.439 -41.492 16 10 1 4 1 2 4 8 175 | 170 -21.082 -77.075 16 4 1 4 1 2 4 8 176 | 171 -17.822 -18.518 14 9 1 4 1 2 4 8 177 | 172 48.334 93.518 14 11 1 4 1 2 4 8 178 | 173 -18.677 49.005 25 3 1 4 1 2 4 8 179 | 174 12.140 30.042 23 19 1 4 1 2 4 8 180 | 175 3.113 -40.302 23 19 1 4 1 2 4 8 181 | 176 17.133 37.079 4 4 1 4 1 2 4 8 182 | 177 22.577 0.836 17 19 1 4 1 2 4 8 183 | 178 -30.426 52.942 12 15 1 4 1 2 4 8 184 | 179 33.765 -67.108 11 21 1 4 1 2 4 8 185 | 180 5.414 1.532 24 25 1 4 1 2 4 8 186 | 181 72.156 30.103 22 4 1 4 1 2 4 8 187 | 182 -24.109 -34.625 10 3 1 4 1 2 4 8 188 | 183 17.413 75.146 10 6 1 4 1 2 4 8 189 | 184 10.638 -60.052 10 6 1 4 1 2 4 8 190 | 185 -5.176 -48.999 5 21 1 4 1 2 4 8 191 | 186 -19.342 21.118 13 25 1 4 1 2 4 8 192 | 187 -46.802 -14.661 18 10 1 4 1 2 4 8 193 | 188 -16.779 43.439 25 25 1 4 1 2 4 8 194 | 189 14.093 -13.605 12 19 1 4 1 2 4 8 195 | 190 -21.063 26.019 18 19 1 4 1 2 4 8 196 | 191 39.813 -40.668 9 22 1 4 1 2 4 8 197 | 192 52.057 30.334 23 5 1 4 1 2 4 8 198 | 193 -0.140 7.266 0 0 0 0 199 | 194 -23.138 48.450 0 0 0 0 200 | 195 -26.102 16.809 0 0 0 0 201 | 196 0.244 -35.892 0 0 0 0 202 | -------------------------------------------------------------------------------- /data/input/p10: -------------------------------------------------------------------------------- 1 | 2 8 249 4 2 | 310 500 3 | 310 500 4 | 310 500 5 | 310 500 6 | 1 -99 -97 0 6 1 4 1 2 4 8 7 | 2 -59 50 0 72 1 4 1 2 4 8 8 | 3 0 14 0 93 1 4 1 2 4 8 9 | 4 -17 -66 0 28 1 4 1 2 4 8 10 | 5 -69 -19 0 5 1 4 1 2 4 8 11 | 6 31 12 0 43 1 4 1 2 4 8 12 | 7 5 -41 0 1 1 4 1 2 4 8 13 | 8 -12 10 0 36 1 4 1 2 4 8 14 | 9 -64 70 0 53 1 4 1 2 4 8 15 | 10 -12 85 0 63 1 4 1 2 4 8 16 | 11 -18 64 0 25 1 4 1 2 4 8 17 | 12 -77 -16 0 50 1 4 1 2 4 8 18 | 13 -53 88 0 57 1 4 1 2 4 8 19 | 14 83 -24 0 1 1 4 1 2 4 8 20 | 15 24 41 0 66 1 4 1 2 4 8 21 | 16 17 21 0 37 1 4 1 2 4 8 22 | 17 42 96 0 51 1 4 1 2 4 8 23 | 18 -65 0 0 47 1 4 1 2 4 8 24 | 19 -47 -26 0 88 1 4 1 2 4 8 25 | 20 85 36 0 75 1 4 1 2 4 8 26 | 21 -35 -54 0 48 1 4 1 2 4 8 27 | 22 54 -21 0 40 1 4 1 2 4 8 28 | 23 64 -17 0 8 1 4 1 2 4 8 29 | 24 55 89 0 69 1 4 1 2 4 8 30 | 25 17 -25 0 93 1 4 1 2 4 8 31 | 26 -61 66 0 29 1 4 1 2 4 8 32 | 27 -61 26 0 5 1 4 1 2 4 8 33 | 28 17 -72 0 53 1 4 1 2 4 8 34 | 29 79 38 0 8 1 4 1 2 4 8 35 | 30 -62 -2 0 24 1 4 1 2 4 8 36 | 31 -90 -68 0 53 1 4 1 2 4 8 37 | 32 52 66 0 13 1 4 1 2 4 8 38 | 33 -54 -50 0 47 1 4 1 2 4 8 39 | 34 8 -84 0 57 1 4 1 2 4 8 40 | 35 37 -90 0 9 1 4 1 2 4 8 41 | 36 -83 49 0 74 1 4 1 2 4 8 42 | 37 35 -1 0 83 1 4 1 2 4 8 43 | 38 7 59 0 96 1 4 1 2 4 8 44 | 39 12 48 0 42 1 4 1 2 4 8 45 | 40 57 95 0 80 1 4 1 2 4 8 46 | 41 92 28 0 22 1 4 1 2 4 8 47 | 42 -3 97 0 56 1 4 1 2 4 8 48 | 43 -7 52 0 43 1 4 1 2 4 8 49 | 44 42 -15 0 12 1 4 1 2 4 8 50 | 45 77 -43 0 73 1 4 1 2 4 8 51 | 46 59 -49 0 32 1 4 1 2 4 8 52 | 47 25 91 0 8 1 4 1 2 4 8 53 | 48 69 -19 0 79 1 4 1 2 4 8 54 | 49 -82 -14 0 79 1 4 1 2 4 8 55 | 50 74 -70 0 4 1 4 1 2 4 8 56 | 51 69 59 0 14 1 4 1 2 4 8 57 | 52 29 33 0 17 1 4 1 2 4 8 58 | 53 -97 9 0 19 1 4 1 2 4 8 59 | 54 -58 9 0 44 1 4 1 2 4 8 60 | 55 28 93 0 5 1 4 1 2 4 8 61 | 56 7 73 0 37 1 4 1 2 4 8 62 | 57 -28 73 0 100 1 4 1 2 4 8 63 | 58 -76 55 0 62 1 4 1 2 4 8 64 | 59 41 42 0 90 1 4 1 2 4 8 65 | 60 92 40 0 57 1 4 1 2 4 8 66 | 61 -84 -29 0 44 1 4 1 2 4 8 67 | 62 -12 42 0 37 1 4 1 2 4 8 68 | 63 51 -45 0 80 1 4 1 2 4 8 69 | 64 -37 46 0 60 1 4 1 2 4 8 70 | 65 -97 35 0 95 1 4 1 2 4 8 71 | 66 14 89 0 56 1 4 1 2 4 8 72 | 67 60 58 0 56 1 4 1 2 4 8 73 | 68 -63 -75 0 9 1 4 1 2 4 8 74 | 69 -18 34 0 39 1 4 1 2 4 8 75 | 70 -46 -82 0 15 1 4 1 2 4 8 76 | 71 -86 -79 0 4 1 4 1 2 4 8 77 | 72 -43 -30 0 58 1 4 1 2 4 8 78 | 73 -44 7 0 73 1 4 1 2 4 8 79 | 74 -3 -20 0 5 1 4 1 2 4 8 80 | 75 36 41 0 12 1 4 1 2 4 8 81 | 76 -30 -94 0 3 1 4 1 2 4 8 82 | 77 79 -62 0 8 1 4 1 2 4 8 83 | 78 51 70 0 31 1 4 1 2 4 8 84 | 79 -61 -26 0 48 1 4 1 2 4 8 85 | 80 6 94 0 3 1 4 1 2 4 8 86 | 81 -19 -62 0 52 1 4 1 2 4 8 87 | 82 -20 51 0 99 1 4 1 2 4 8 88 | 83 -81 37 0 29 1 4 1 2 4 8 89 | 84 7 31 0 12 1 4 1 2 4 8 90 | 85 52 12 0 50 1 4 1 2 4 8 91 | 86 83 -91 0 98 1 4 1 2 4 8 92 | 87 -7 -92 0 4 1 4 1 2 4 8 93 | 88 82 -74 0 56 1 4 1 2 4 8 94 | 89 -70 85 0 24 1 4 1 2 4 8 95 | 90 -83 -30 0 33 1 4 1 2 4 8 96 | 91 71 -61 0 45 1 4 1 2 4 8 97 | 92 85 11 0 98 1 4 1 2 4 8 98 | 93 66 -48 0 4 1 4 1 2 4 8 99 | 94 78 -87 0 36 1 4 1 2 4 8 100 | 95 9 -79 0 72 1 4 1 2 4 8 101 | 96 -36 4 0 26 1 4 1 2 4 8 102 | 97 66 39 0 71 1 4 1 2 4 8 103 | 98 92 -17 0 84 1 4 1 2 4 8 104 | 99 -46 -79 0 21 1 4 1 2 4 8 105 | 100 -30 -63 0 99 1 4 1 2 4 8 106 | 101 -42 63 0 33 1 4 1 2 4 8 107 | 102 20 42 0 84 1 4 1 2 4 8 108 | 103 15 98 0 74 1 4 1 2 4 8 109 | 104 1 -17 0 93 1 4 1 2 4 8 110 | 105 64 20 0 25 1 4 1 2 4 8 111 | 106 -96 85 0 39 1 4 1 2 4 8 112 | 107 93 -29 0 42 1 4 1 2 4 8 113 | 108 -40 -84 0 77 1 4 1 2 4 8 114 | 109 86 35 0 68 1 4 1 2 4 8 115 | 110 91 36 0 50 1 4 1 2 4 8 116 | 111 62 -8 0 42 1 4 1 2 4 8 117 | 112 -24 4 0 71 1 4 1 2 4 8 118 | 113 11 96 0 85 1 4 1 2 4 8 119 | 114 -53 62 0 78 1 4 1 2 4 8 120 | 115 -28 -71 0 64 1 4 1 2 4 8 121 | 116 7 -4 0 5 1 4 1 2 4 8 122 | 117 95 -9 0 93 1 4 1 2 4 8 123 | 118 -3 17 0 18 1 4 1 2 4 8 124 | 119 53 -90 0 38 1 4 1 2 4 8 125 | 120 58 -19 0 29 1 4 1 2 4 8 126 | 121 -83 84 0 81 1 4 1 2 4 8 127 | 122 -1 49 0 4 1 4 1 2 4 8 128 | 123 -4 17 0 23 1 4 1 2 4 8 129 | 124 -82 -3 0 11 1 4 1 2 4 8 130 | 125 -43 47 0 86 1 4 1 2 4 8 131 | 126 6 -6 0 2 1 4 1 2 4 8 132 | 127 70 99 0 31 1 4 1 2 4 8 133 | 128 68 -29 0 54 1 4 1 2 4 8 134 | 129 -94 -30 0 87 1 4 1 2 4 8 135 | 130 -94 -20 0 17 1 4 1 2 4 8 136 | 131 -21 77 0 81 1 4 1 2 4 8 137 | 132 64 37 0 72 1 4 1 2 4 8 138 | 133 -70 -19 0 10 1 4 1 2 4 8 139 | 134 88 65 0 50 1 4 1 2 4 8 140 | 135 2 29 0 25 1 4 1 2 4 8 141 | 136 33 57 0 71 1 4 1 2 4 8 142 | 137 -70 6 0 85 1 4 1 2 4 8 143 | 138 -38 -56 0 51 1 4 1 2 4 8 144 | 139 -80 -95 0 29 1 4 1 2 4 8 145 | 140 -5 -39 0 55 1 4 1 2 4 8 146 | 141 8 -22 0 45 1 4 1 2 4 8 147 | 142 -61 -76 0 100 1 4 1 2 4 8 148 | 143 76 -22 0 38 1 4 1 2 4 8 149 | 144 49 -71 0 11 1 4 1 2 4 8 150 | 145 -30 -68 0 82 1 4 1 2 4 8 151 | 146 1 34 0 50 1 4 1 2 4 8 152 | 147 77 79 0 39 1 4 1 2 4 8 153 | 148 -58 64 0 6 1 4 1 2 4 8 154 | 149 82 -97 0 87 1 4 1 2 4 8 155 | 150 -80 55 0 83 1 4 1 2 4 8 156 | 151 81 -86 0 22 1 4 1 2 4 8 157 | 152 39 -49 0 24 1 4 1 2 4 8 158 | 153 -67 72 0 69 1 4 1 2 4 8 159 | 154 -25 -89 0 97 1 4 1 2 4 8 160 | 155 -44 -95 0 65 1 4 1 2 4 8 161 | 156 32 -68 0 97 1 4 1 2 4 8 162 | 157 -17 49 0 79 1 4 1 2 4 8 163 | 158 93 49 0 79 1 4 1 2 4 8 164 | 159 99 81 0 46 1 4 1 2 4 8 165 | 160 10 -49 0 52 1 4 1 2 4 8 166 | 161 63 -41 0 39 1 4 1 2 4 8 167 | 162 38 39 0 94 1 4 1 2 4 8 168 | 163 -28 39 0 97 1 4 1 2 4 8 169 | 164 -2 -47 0 18 1 4 1 2 4 8 170 | 165 38 8 0 3 1 4 1 2 4 8 171 | 166 -42 -6 0 23 1 4 1 2 4 8 172 | 167 -67 88 0 19 1 4 1 2 4 8 173 | 168 19 93 0 40 1 4 1 2 4 8 174 | 169 40 27 0 49 1 4 1 2 4 8 175 | 170 -61 56 0 96 1 4 1 2 4 8 176 | 171 43 33 0 58 1 4 1 2 4 8 177 | 172 -18 -39 0 15 1 4 1 2 4 8 178 | 173 -69 19 0 21 1 4 1 2 4 8 179 | 174 75 -18 0 56 1 4 1 2 4 8 180 | 175 31 85 0 67 1 4 1 2 4 8 181 | 176 25 58 0 10 1 4 1 2 4 8 182 | 177 -16 36 0 36 1 4 1 2 4 8 183 | 178 91 15 0 84 1 4 1 2 4 8 184 | 179 60 -39 0 59 1 4 1 2 4 8 185 | 180 49 -47 0 85 1 4 1 2 4 8 186 | 181 42 33 0 60 1 4 1 2 4 8 187 | 182 16 -81 0 33 1 4 1 2 4 8 188 | 183 -78 53 0 62 1 4 1 2 4 8 189 | 184 53 -80 0 70 1 4 1 2 4 8 190 | 185 -46 -26 0 79 1 4 1 2 4 8 191 | 186 -25 -54 0 98 1 4 1 2 4 8 192 | 187 69 -46 0 99 1 4 1 2 4 8 193 | 188 0 -78 0 18 1 4 1 2 4 8 194 | 189 -84 74 0 55 1 4 1 2 4 8 195 | 190 -16 16 0 75 1 4 1 2 4 8 196 | 191 -63 -14 0 94 1 4 1 2 4 8 197 | 192 51 -77 0 89 1 4 1 2 4 8 198 | 193 -39 61 0 13 1 4 1 2 4 8 199 | 194 5 97 0 19 1 4 1 2 4 8 200 | 195 -55 39 0 19 1 4 1 2 4 8 201 | 196 70 -14 0 90 1 4 1 2 4 8 202 | 197 0 95 0 35 1 4 1 2 4 8 203 | 198 -45 7 0 76 1 4 1 2 4 8 204 | 199 38 -24 0 3 1 4 1 2 4 8 205 | 200 50 -37 0 11 1 4 1 2 4 8 206 | 201 59 71 0 98 1 4 1 2 4 8 207 | 202 -73 -96 0 92 1 4 1 2 4 8 208 | 203 -29 72 0 1 1 4 1 2 4 8 209 | 204 -47 12 0 2 1 4 1 2 4 8 210 | 205 -88 -61 0 63 1 4 1 2 4 8 211 | 206 -88 36 0 57 1 4 1 2 4 8 212 | 207 -46 -3 0 50 1 4 1 2 4 8 213 | 208 26 -37 0 19 1 4 1 2 4 8 214 | 209 -39 -67 0 24 1 4 1 2 4 8 215 | 210 92 27 0 14 1 4 1 2 4 8 216 | 211 -80 -31 0 18 1 4 1 2 4 8 217 | 212 93 -50 0 77 1 4 1 2 4 8 218 | 213 -20 -5 0 28 1 4 1 2 4 8 219 | 214 -22 73 0 72 1 4 1 2 4 8 220 | 215 -4 -7 0 49 1 4 1 2 4 8 221 | 216 54 -48 0 58 1 4 1 2 4 8 222 | 217 -70 39 0 84 1 4 1 2 4 8 223 | 218 54 -82 0 58 1 4 1 2 4 8 224 | 219 29 41 0 41 1 4 1 2 4 8 225 | 220 -87 51 0 98 1 4 1 2 4 8 226 | 221 -96 -36 0 77 1 4 1 2 4 8 227 | 222 49 8 0 57 1 4 1 2 4 8 228 | 223 -5 54 0 39 1 4 1 2 4 8 229 | 224 -26 43 0 99 1 4 1 2 4 8 230 | 225 -11 60 0 83 1 4 1 2 4 8 231 | 226 40 61 0 54 1 4 1 2 4 8 232 | 227 82 35 0 86 1 4 1 2 4 8 233 | 228 -92 12 0 2 1 4 1 2 4 8 234 | 229 -93 -86 0 14 1 4 1 2 4 8 235 | 230 -66 63 0 42 1 4 1 2 4 8 236 | 231 -72 -87 0 14 1 4 1 2 4 8 237 | 232 -57 -84 0 55 1 4 1 2 4 8 238 | 233 23 52 0 2 1 4 1 2 4 8 239 | 234 -56 -62 0 18 1 4 1 2 4 8 240 | 235 -19 59 0 17 1 4 1 2 4 8 241 | 236 63 -14 0 22 1 4 1 2 4 8 242 | 237 -13 38 0 28 1 4 1 2 4 8 243 | 238 -19 87 0 3 1 4 1 2 4 8 244 | 239 44 -84 0 96 1 4 1 2 4 8 245 | 240 98 -17 0 53 1 4 1 2 4 8 246 | 241 -16 62 0 15 1 4 1 2 4 8 247 | 242 3 66 0 36 1 4 1 2 4 8 248 | 243 26 22 0 98 1 4 1 2 4 8 249 | 244 -38 -81 0 78 1 4 1 2 4 8 250 | 245 70 -80 0 92 1 4 1 2 4 8 251 | 246 17 -35 0 65 1 4 1 2 4 8 252 | 247 96 -83 0 64 1 4 1 2 4 8 253 | 248 -77 80 0 43 1 4 1 2 4 8 254 | 249 -14 44 0 50 1 4 1 2 4 8 255 | 250 75 0 0 0 0 0 256 | 251 0 75 0 0 0 0 257 | 252 -75 0 0 0 0 0 258 | 253 0 -75 0 0 0 0 259 | -------------------------------------------------------------------------------- /data/input/p11: -------------------------------------------------------------------------------- 1 | 2 6 249 5 2 | 310 500 3 | 310 500 4 | 310 500 5 | 310 500 6 | 310 500 7 | 1 -99 -97 0 6 1 5 1 2 4 8 16 8 | 2 -59 50 0 72 1 5 1 2 4 8 16 9 | 3 0 14 0 93 1 5 1 2 4 8 16 10 | 4 -17 -66 0 28 1 5 1 2 4 8 16 11 | 5 -69 -19 0 5 1 5 1 2 4 8 16 12 | 6 31 12 0 43 1 5 1 2 4 8 16 13 | 7 5 -41 0 1 1 5 1 2 4 8 16 14 | 8 -12 10 0 36 1 5 1 2 4 8 16 15 | 9 -64 70 0 53 1 5 1 2 4 8 16 16 | 10 -12 85 0 63 1 5 1 2 4 8 16 17 | 11 -18 64 0 25 1 5 1 2 4 8 16 18 | 12 -77 -16 0 50 1 5 1 2 4 8 16 19 | 13 -53 88 0 57 1 5 1 2 4 8 16 20 | 14 83 -24 0 1 1 5 1 2 4 8 16 21 | 15 24 41 0 66 1 5 1 2 4 8 16 22 | 16 17 21 0 37 1 5 1 2 4 8 16 23 | 17 42 96 0 51 1 5 1 2 4 8 16 24 | 18 -65 0 0 47 1 5 1 2 4 8 16 25 | 19 -47 -26 0 88 1 5 1 2 4 8 16 26 | 20 85 36 0 75 1 5 1 2 4 8 16 27 | 21 -35 -54 0 48 1 5 1 2 4 8 16 28 | 22 54 -21 0 40 1 5 1 2 4 8 16 29 | 23 64 -17 0 8 1 5 1 2 4 8 16 30 | 24 55 89 0 69 1 5 1 2 4 8 16 31 | 25 17 -25 0 93 1 5 1 2 4 8 16 32 | 26 -61 66 0 29 1 5 1 2 4 8 16 33 | 27 -61 26 0 5 1 5 1 2 4 8 16 34 | 28 17 -72 0 53 1 5 1 2 4 8 16 35 | 29 79 38 0 8 1 5 1 2 4 8 16 36 | 30 -62 -2 0 24 1 5 1 2 4 8 16 37 | 31 -90 -68 0 53 1 5 1 2 4 8 16 38 | 32 52 66 0 13 1 5 1 2 4 8 16 39 | 33 -54 -50 0 47 1 5 1 2 4 8 16 40 | 34 8 -84 0 57 1 5 1 2 4 8 16 41 | 35 37 -90 0 9 1 5 1 2 4 8 16 42 | 36 -83 49 0 74 1 5 1 2 4 8 16 43 | 37 35 -1 0 83 1 5 1 2 4 8 16 44 | 38 7 59 0 96 1 5 1 2 4 8 16 45 | 39 12 48 0 42 1 5 1 2 4 8 16 46 | 40 57 95 0 80 1 5 1 2 4 8 16 47 | 41 92 28 0 22 1 5 1 2 4 8 16 48 | 42 -3 97 0 56 1 5 1 2 4 8 16 49 | 43 -7 52 0 43 1 5 1 2 4 8 16 50 | 44 42 -15 0 12 1 5 1 2 4 8 16 51 | 45 77 -43 0 73 1 5 1 2 4 8 16 52 | 46 59 -49 0 32 1 5 1 2 4 8 16 53 | 47 25 91 0 8 1 5 1 2 4 8 16 54 | 48 69 -19 0 79 1 5 1 2 4 8 16 55 | 49 -82 -14 0 79 1 5 1 2 4 8 16 56 | 50 74 -70 0 4 1 5 1 2 4 8 16 57 | 51 69 59 0 14 1 5 1 2 4 8 16 58 | 52 29 33 0 17 1 5 1 2 4 8 16 59 | 53 -97 9 0 19 1 5 1 2 4 8 16 60 | 54 -58 9 0 44 1 5 1 2 4 8 16 61 | 55 28 93 0 5 1 5 1 2 4 8 16 62 | 56 7 73 0 37 1 5 1 2 4 8 16 63 | 57 -28 73 0 100 1 5 1 2 4 8 16 64 | 58 -76 55 0 62 1 5 1 2 4 8 16 65 | 59 41 42 0 90 1 5 1 2 4 8 16 66 | 60 92 40 0 57 1 5 1 2 4 8 16 67 | 61 -84 -29 0 44 1 5 1 2 4 8 16 68 | 62 -12 42 0 37 1 5 1 2 4 8 16 69 | 63 51 -45 0 80 1 5 1 2 4 8 16 70 | 64 -37 46 0 60 1 5 1 2 4 8 16 71 | 65 -97 35 0 95 1 5 1 2 4 8 16 72 | 66 14 89 0 56 1 5 1 2 4 8 16 73 | 67 60 58 0 56 1 5 1 2 4 8 16 74 | 68 -63 -75 0 9 1 5 1 2 4 8 16 75 | 69 -18 34 0 39 1 5 1 2 4 8 16 76 | 70 -46 -82 0 15 1 5 1 2 4 8 16 77 | 71 -86 -79 0 4 1 5 1 2 4 8 16 78 | 72 -43 -30 0 58 1 5 1 2 4 8 16 79 | 73 -44 7 0 73 1 5 1 2 4 8 16 80 | 74 -3 -20 0 5 1 5 1 2 4 8 16 81 | 75 36 41 0 12 1 5 1 2 4 8 16 82 | 76 -30 -94 0 3 1 5 1 2 4 8 16 83 | 77 79 -62 0 8 1 5 1 2 4 8 16 84 | 78 51 70 0 31 1 5 1 2 4 8 16 85 | 79 -61 -26 0 48 1 5 1 2 4 8 16 86 | 80 6 94 0 3 1 5 1 2 4 8 16 87 | 81 -19 -62 0 52 1 5 1 2 4 8 16 88 | 82 -20 51 0 99 1 5 1 2 4 8 16 89 | 83 -81 37 0 29 1 5 1 2 4 8 16 90 | 84 7 31 0 12 1 5 1 2 4 8 16 91 | 85 52 12 0 50 1 5 1 2 4 8 16 92 | 86 83 -91 0 98 1 5 1 2 4 8 16 93 | 87 -7 -92 0 4 1 5 1 2 4 8 16 94 | 88 82 -74 0 56 1 5 1 2 4 8 16 95 | 89 -70 85 0 24 1 5 1 2 4 8 16 96 | 90 -83 -30 0 33 1 5 1 2 4 8 16 97 | 91 71 -61 0 45 1 5 1 2 4 8 16 98 | 92 85 11 0 98 1 5 1 2 4 8 16 99 | 93 66 -48 0 4 1 5 1 2 4 8 16 100 | 94 78 -87 0 36 1 5 1 2 4 8 16 101 | 95 9 -79 0 72 1 5 1 2 4 8 16 102 | 96 -36 4 0 26 1 5 1 2 4 8 16 103 | 97 66 39 0 71 1 5 1 2 4 8 16 104 | 98 92 -17 0 84 1 5 1 2 4 8 16 105 | 99 -46 -79 0 21 1 5 1 2 4 8 16 106 | 100 -30 -63 0 99 1 5 1 2 4 8 16 107 | 101 -42 63 0 33 1 5 1 2 4 8 16 108 | 102 20 42 0 84 1 5 1 2 4 8 16 109 | 103 15 98 0 74 1 5 1 2 4 8 16 110 | 104 1 -17 0 93 1 5 1 2 4 8 16 111 | 105 64 20 0 25 1 5 1 2 4 8 16 112 | 106 -96 85 0 39 1 5 1 2 4 8 16 113 | 107 93 -29 0 42 1 5 1 2 4 8 16 114 | 108 -40 -84 0 77 1 5 1 2 4 8 16 115 | 109 86 35 0 68 1 5 1 2 4 8 16 116 | 110 91 36 0 50 1 5 1 2 4 8 16 117 | 111 62 -8 0 42 1 5 1 2 4 8 16 118 | 112 -24 4 0 71 1 5 1 2 4 8 16 119 | 113 11 96 0 85 1 5 1 2 4 8 16 120 | 114 -53 62 0 78 1 5 1 2 4 8 16 121 | 115 -28 -71 0 64 1 5 1 2 4 8 16 122 | 116 7 -4 0 5 1 5 1 2 4 8 16 123 | 117 95 -9 0 93 1 5 1 2 4 8 16 124 | 118 -3 17 0 18 1 5 1 2 4 8 16 125 | 119 53 -90 0 38 1 5 1 2 4 8 16 126 | 120 58 -19 0 29 1 5 1 2 4 8 16 127 | 121 -83 84 0 81 1 5 1 2 4 8 16 128 | 122 -1 49 0 4 1 5 1 2 4 8 16 129 | 123 -4 17 0 23 1 5 1 2 4 8 16 130 | 124 -82 -3 0 11 1 5 1 2 4 8 16 131 | 125 -43 47 0 86 1 5 1 2 4 8 16 132 | 126 6 -6 0 2 1 5 1 2 4 8 16 133 | 127 70 99 0 31 1 5 1 2 4 8 16 134 | 128 68 -29 0 54 1 5 1 2 4 8 16 135 | 129 -94 -30 0 87 1 5 1 2 4 8 16 136 | 130 -94 -20 0 17 1 5 1 2 4 8 16 137 | 131 -21 77 0 81 1 5 1 2 4 8 16 138 | 132 64 37 0 72 1 5 1 2 4 8 16 139 | 133 -70 -19 0 10 1 5 1 2 4 8 16 140 | 134 88 65 0 50 1 5 1 2 4 8 16 141 | 135 2 29 0 25 1 5 1 2 4 8 16 142 | 136 33 57 0 71 1 5 1 2 4 8 16 143 | 137 -70 6 0 85 1 5 1 2 4 8 16 144 | 138 -38 -56 0 51 1 5 1 2 4 8 16 145 | 139 -80 -95 0 29 1 5 1 2 4 8 16 146 | 140 -5 -39 0 55 1 5 1 2 4 8 16 147 | 141 8 -22 0 45 1 5 1 2 4 8 16 148 | 142 -61 -76 0 100 1 5 1 2 4 8 16 149 | 143 76 -22 0 38 1 5 1 2 4 8 16 150 | 144 49 -71 0 11 1 5 1 2 4 8 16 151 | 145 -30 -68 0 82 1 5 1 2 4 8 16 152 | 146 1 34 0 50 1 5 1 2 4 8 16 153 | 147 77 79 0 39 1 5 1 2 4 8 16 154 | 148 -58 64 0 6 1 5 1 2 4 8 16 155 | 149 82 -97 0 87 1 5 1 2 4 8 16 156 | 150 -80 55 0 83 1 5 1 2 4 8 16 157 | 151 81 -86 0 22 1 5 1 2 4 8 16 158 | 152 39 -49 0 24 1 5 1 2 4 8 16 159 | 153 -67 72 0 69 1 5 1 2 4 8 16 160 | 154 -25 -89 0 97 1 5 1 2 4 8 16 161 | 155 -44 -95 0 65 1 5 1 2 4 8 16 162 | 156 32 -68 0 97 1 5 1 2 4 8 16 163 | 157 -17 49 0 79 1 5 1 2 4 8 16 164 | 158 93 49 0 79 1 5 1 2 4 8 16 165 | 159 99 81 0 46 1 5 1 2 4 8 16 166 | 160 10 -49 0 52 1 5 1 2 4 8 16 167 | 161 63 -41 0 39 1 5 1 2 4 8 16 168 | 162 38 39 0 94 1 5 1 2 4 8 16 169 | 163 -28 39 0 97 1 5 1 2 4 8 16 170 | 164 -2 -47 0 18 1 5 1 2 4 8 16 171 | 165 38 8 0 3 1 5 1 2 4 8 16 172 | 166 -42 -6 0 23 1 5 1 2 4 8 16 173 | 167 -67 88 0 19 1 5 1 2 4 8 16 174 | 168 19 93 0 40 1 5 1 2 4 8 16 175 | 169 40 27 0 49 1 5 1 2 4 8 16 176 | 170 -61 56 0 96 1 5 1 2 4 8 16 177 | 171 43 33 0 58 1 5 1 2 4 8 16 178 | 172 -18 -39 0 15 1 5 1 2 4 8 16 179 | 173 -69 19 0 21 1 5 1 2 4 8 16 180 | 174 75 -18 0 56 1 5 1 2 4 8 16 181 | 175 31 85 0 67 1 5 1 2 4 8 16 182 | 176 25 58 0 10 1 5 1 2 4 8 16 183 | 177 -16 36 0 36 1 5 1 2 4 8 16 184 | 178 91 15 0 84 1 5 1 2 4 8 16 185 | 179 60 -39 0 59 1 5 1 2 4 8 16 186 | 180 49 -47 0 85 1 5 1 2 4 8 16 187 | 181 42 33 0 60 1 5 1 2 4 8 16 188 | 182 16 -81 0 33 1 5 1 2 4 8 16 189 | 183 -78 53 0 62 1 5 1 2 4 8 16 190 | 184 53 -80 0 70 1 5 1 2 4 8 16 191 | 185 -46 -26 0 79 1 5 1 2 4 8 16 192 | 186 -25 -54 0 98 1 5 1 2 4 8 16 193 | 187 69 -46 0 99 1 5 1 2 4 8 16 194 | 188 0 -78 0 18 1 5 1 2 4 8 16 195 | 189 -84 74 0 55 1 5 1 2 4 8 16 196 | 190 -16 16 0 75 1 5 1 2 4 8 16 197 | 191 -63 -14 0 94 1 5 1 2 4 8 16 198 | 192 51 -77 0 89 1 5 1 2 4 8 16 199 | 193 -39 61 0 13 1 5 1 2 4 8 16 200 | 194 5 97 0 19 1 5 1 2 4 8 16 201 | 195 -55 39 0 19 1 5 1 2 4 8 16 202 | 196 70 -14 0 90 1 5 1 2 4 8 16 203 | 197 0 95 0 35 1 5 1 2 4 8 16 204 | 198 -45 7 0 76 1 5 1 2 4 8 16 205 | 199 38 -24 0 3 1 5 1 2 4 8 16 206 | 200 50 -37 0 11 1 5 1 2 4 8 16 207 | 201 59 71 0 98 1 5 1 2 4 8 16 208 | 202 -73 -96 0 92 1 5 1 2 4 8 16 209 | 203 -29 72 0 1 1 5 1 2 4 8 16 210 | 204 -47 12 0 2 1 5 1 2 4 8 16 211 | 205 -88 -61 0 63 1 5 1 2 4 8 16 212 | 206 -88 36 0 57 1 5 1 2 4 8 16 213 | 207 -46 -3 0 50 1 5 1 2 4 8 16 214 | 208 26 -37 0 19 1 5 1 2 4 8 16 215 | 209 -39 -67 0 24 1 5 1 2 4 8 16 216 | 210 92 27 0 14 1 5 1 2 4 8 16 217 | 211 -80 -31 0 18 1 5 1 2 4 8 16 218 | 212 93 -50 0 77 1 5 1 2 4 8 16 219 | 213 -20 -5 0 28 1 5 1 2 4 8 16 220 | 214 -22 73 0 72 1 5 1 2 4 8 16 221 | 215 -4 -7 0 49 1 5 1 2 4 8 16 222 | 216 54 -48 0 58 1 5 1 2 4 8 16 223 | 217 -70 39 0 84 1 5 1 2 4 8 16 224 | 218 54 -82 0 58 1 5 1 2 4 8 16 225 | 219 29 41 0 41 1 5 1 2 4 8 16 226 | 220 -87 51 0 98 1 5 1 2 4 8 16 227 | 221 -96 -36 0 77 1 5 1 2 4 8 16 228 | 222 49 8 0 57 1 5 1 2 4 8 16 229 | 223 -5 54 0 39 1 5 1 2 4 8 16 230 | 224 -26 43 0 99 1 5 1 2 4 8 16 231 | 225 -11 60 0 83 1 5 1 2 4 8 16 232 | 226 40 61 0 54 1 5 1 2 4 8 16 233 | 227 82 35 0 86 1 5 1 2 4 8 16 234 | 228 -92 12 0 2 1 5 1 2 4 8 16 235 | 229 -93 -86 0 14 1 5 1 2 4 8 16 236 | 230 -66 63 0 42 1 5 1 2 4 8 16 237 | 231 -72 -87 0 14 1 5 1 2 4 8 16 238 | 232 -57 -84 0 55 1 5 1 2 4 8 16 239 | 233 23 52 0 2 1 5 1 2 4 8 16 240 | 234 -56 -62 0 18 1 5 1 2 4 8 16 241 | 235 -19 59 0 17 1 5 1 2 4 8 16 242 | 236 63 -14 0 22 1 5 1 2 4 8 16 243 | 237 -13 38 0 28 1 5 1 2 4 8 16 244 | 238 -19 87 0 3 1 5 1 2 4 8 16 245 | 239 44 -84 0 96 1 5 1 2 4 8 16 246 | 240 98 -17 0 53 1 5 1 2 4 8 16 247 | 241 -16 62 0 15 1 5 1 2 4 8 16 248 | 242 3 66 0 36 1 5 1 2 4 8 16 249 | 243 26 22 0 98 1 5 1 2 4 8 16 250 | 244 -38 -81 0 78 1 5 1 2 4 8 16 251 | 245 70 -80 0 92 1 5 1 2 4 8 16 252 | 246 17 -35 0 65 1 5 1 2 4 8 16 253 | 247 96 -83 0 64 1 5 1 2 4 8 16 254 | 248 -77 80 0 43 1 5 1 2 4 8 16 255 | 249 -14 44 0 50 1 5 1 2 4 8 16 256 | 250 70 0 0 0 0 0 257 | 251 40 80 0 0 0 0 258 | 252 40 -80 0 0 0 0 259 | 253 -60 20 0 0 0 0 260 | 254 -60 -20 0 0 0 0 261 | -------------------------------------------------------------------------------- /data/input/p18: -------------------------------------------------------------------------------- 1 | 2 5 240 6 2 | 0 60 3 | 0 60 4 | 0 60 5 | 0 60 6 | 0 60 7 | 0 60 8 | 1 -10 -10 0 12 1 6 1 2 4 8 16 32 9 | 2 -10 0 0 12 1 6 1 2 4 8 16 32 10 | 3 -10 10 0 12 1 6 1 2 4 8 16 32 11 | 4 0 -10 0 12 1 6 1 2 4 8 16 32 12 | 5 0 10 0 12 1 6 1 2 4 8 16 32 13 | 6 10 -10 0 12 1 6 1 2 4 8 16 32 14 | 7 10 0 0 12 1 6 1 2 4 8 16 32 15 | 8 10 10 0 12 1 6 1 2 4 8 16 32 16 | 9 -20 -20 0 8 1 6 1 2 4 8 16 32 17 | 10 -20 0 0 8 1 6 1 2 4 8 16 32 18 | 11 -20 20 0 8 1 6 1 2 4 8 16 32 19 | 12 0 -20 0 8 1 6 1 2 4 8 16 32 20 | 13 0 20 0 8 1 6 1 2 4 8 16 32 21 | 14 20 -20 0 8 1 6 1 2 4 8 16 32 22 | 15 20 0 0 8 1 6 1 2 4 8 16 32 23 | 16 20 20 0 8 1 6 1 2 4 8 16 32 24 | 17 -30 -30 0 4 1 6 1 2 4 8 16 32 25 | 18 -30 0 0 4 1 6 1 2 4 8 16 32 26 | 19 -30 30 0 4 1 6 1 2 4 8 16 32 27 | 20 0 -30 0 4 1 6 1 2 4 8 16 32 28 | 21 0 30 0 4 1 6 1 2 4 8 16 32 29 | 22 30 -30 0 4 1 6 1 2 4 8 16 32 30 | 23 30 0 0 4 1 6 1 2 4 8 16 32 31 | 24 30 30 0 4 1 6 1 2 4 8 16 32 32 | 25 -40 -40 0 2 1 6 1 2 4 8 16 32 33 | 26 -40 0 0 2 1 6 1 2 4 8 16 32 34 | 27 -40 40 0 2 1 6 1 2 4 8 16 32 35 | 28 0 -40 0 2 1 6 1 2 4 8 16 32 36 | 29 0 40 0 2 1 6 1 2 4 8 16 32 37 | 30 40 -40 0 2 1 6 1 2 4 8 16 32 38 | 31 40 0 0 2 1 6 1 2 4 8 16 32 39 | 32 40 40 0 2 1 6 1 2 4 8 16 32 40 | 33 -50 -50 0 1 1 6 1 2 4 8 16 32 41 | 34 -50 0 0 1 1 6 1 2 4 8 16 32 42 | 35 -50 50 0 1 1 6 1 2 4 8 16 32 43 | 36 0 -50 0 1 1 6 1 2 4 8 16 32 44 | 37 0 50 0 1 1 6 1 2 4 8 16 32 45 | 38 50 -50 0 1 1 6 1 2 4 8 16 32 46 | 39 50 0 0 1 1 6 1 2 4 8 16 32 47 | 40 50 50 0 1 1 6 1 2 4 8 16 32 48 | 41 100 -10 0 12 1 6 1 2 4 8 16 32 49 | 42 100 0 0 12 1 6 1 2 4 8 16 32 50 | 43 100 10 0 12 1 6 1 2 4 8 16 32 51 | 44 110 -10 0 12 1 6 1 2 4 8 16 32 52 | 45 110 10 0 12 1 6 1 2 4 8 16 32 53 | 46 120 -10 0 12 1 6 1 2 4 8 16 32 54 | 47 120 0 0 12 1 6 1 2 4 8 16 32 55 | 48 120 10 0 12 1 6 1 2 4 8 16 32 56 | 49 90 -20 0 8 1 6 1 2 4 8 16 32 57 | 50 90 0 0 8 1 6 1 2 4 8 16 32 58 | 51 90 20 0 8 1 6 1 2 4 8 16 32 59 | 52 110 -20 0 8 1 6 1 2 4 8 16 32 60 | 53 110 20 0 8 1 6 1 2 4 8 16 32 61 | 54 130 -20 0 8 1 6 1 2 4 8 16 32 62 | 55 130 0 0 8 1 6 1 2 4 8 16 32 63 | 56 130 20 0 8 1 6 1 2 4 8 16 32 64 | 57 80 -30 0 4 1 6 1 2 4 8 16 32 65 | 58 80 0 0 4 1 6 1 2 4 8 16 32 66 | 59 80 30 0 4 1 6 1 2 4 8 16 32 67 | 60 110 -30 0 4 1 6 1 2 4 8 16 32 68 | 61 110 30 0 4 1 6 1 2 4 8 16 32 69 | 62 140 -30 0 4 1 6 1 2 4 8 16 32 70 | 63 140 0 0 4 1 6 1 2 4 8 16 32 71 | 64 140 30 0 4 1 6 1 2 4 8 16 32 72 | 65 70 -40 0 2 1 6 1 2 4 8 16 32 73 | 66 70 0 0 2 1 6 1 2 4 8 16 32 74 | 67 70 40 0 2 1 6 1 2 4 8 16 32 75 | 68 110 -40 0 2 1 6 1 2 4 8 16 32 76 | 69 110 40 0 2 1 6 1 2 4 8 16 32 77 | 70 150 -40 0 2 1 6 1 2 4 8 16 32 78 | 71 150 0 0 2 1 6 1 2 4 8 16 32 79 | 72 150 40 0 2 1 6 1 2 4 8 16 32 80 | 73 60 -50 0 1 1 6 1 2 4 8 16 32 81 | 74 60 0 0 1 1 6 1 2 4 8 16 32 82 | 75 60 50 0 1 1 6 1 2 4 8 16 32 83 | 76 110 -50 0 1 1 6 1 2 4 8 16 32 84 | 77 110 50 0 1 1 6 1 2 4 8 16 32 85 | 78 160 -50 0 1 1 6 1 2 4 8 16 32 86 | 79 160 0 0 1 1 6 1 2 4 8 16 32 87 | 80 160 50 0 1 1 6 1 2 4 8 16 32 88 | 81 100 100 0 12 1 6 1 2 4 8 16 32 89 | 82 100 110 0 12 1 6 1 2 4 8 16 32 90 | 83 100 120 0 12 1 6 1 2 4 8 16 32 91 | 84 110 100 0 12 1 6 1 2 4 8 16 32 92 | 85 110 120 0 12 1 6 1 2 4 8 16 32 93 | 86 120 100 0 12 1 6 1 2 4 8 16 32 94 | 87 120 110 0 12 1 6 1 2 4 8 16 32 95 | 88 120 120 0 12 1 6 1 2 4 8 16 32 96 | 89 90 90 0 8 1 6 1 2 4 8 16 32 97 | 90 90 110 0 8 1 6 1 2 4 8 16 32 98 | 91 90 130 0 8 1 6 1 2 4 8 16 32 99 | 92 110 90 0 8 1 6 1 2 4 8 16 32 100 | 93 110 130 0 8 1 6 1 2 4 8 16 32 101 | 94 130 90 0 8 1 6 1 2 4 8 16 32 102 | 95 130 110 0 8 1 6 1 2 4 8 16 32 103 | 96 130 130 0 8 1 6 1 2 4 8 16 32 104 | 97 80 80 0 4 1 6 1 2 4 8 16 32 105 | 98 80 110 0 4 1 6 1 2 4 8 16 32 106 | 99 80 140 0 4 1 6 1 2 4 8 16 32 107 | 100 110 80 0 4 1 6 1 2 4 8 16 32 108 | 101 110 140 0 4 1 6 1 2 4 8 16 32 109 | 102 140 80 0 4 1 6 1 2 4 8 16 32 110 | 103 140 110 0 4 1 6 1 2 4 8 16 32 111 | 104 140 140 0 4 1 6 1 2 4 8 16 32 112 | 105 70 70 0 2 1 6 1 2 4 8 16 32 113 | 106 70 110 0 2 1 6 1 2 4 8 16 32 114 | 107 70 150 0 2 1 6 1 2 4 8 16 32 115 | 108 110 70 0 2 1 6 1 2 4 8 16 32 116 | 109 110 150 0 2 1 6 1 2 4 8 16 32 117 | 110 150 70 0 2 1 6 1 2 4 8 16 32 118 | 111 150 110 0 2 1 6 1 2 4 8 16 32 119 | 112 150 150 0 2 1 6 1 2 4 8 16 32 120 | 113 60 60 0 1 1 6 1 2 4 8 16 32 121 | 114 60 110 0 1 1 6 1 2 4 8 16 32 122 | 115 60 160 0 1 1 6 1 2 4 8 16 32 123 | 116 110 60 0 1 1 6 1 2 4 8 16 32 124 | 117 110 160 0 1 1 6 1 2 4 8 16 32 125 | 118 160 60 0 1 1 6 1 2 4 8 16 32 126 | 119 160 110 0 1 1 6 1 2 4 8 16 32 127 | 120 160 160 0 1 1 6 1 2 4 8 16 32 128 | 121 -10 100 0 12 1 6 1 2 4 8 16 32 129 | 122 -10 110 0 12 1 6 1 2 4 8 16 32 130 | 123 -10 120 0 12 1 6 1 2 4 8 16 32 131 | 124 0 100 0 12 1 6 1 2 4 8 16 32 132 | 125 0 120 0 12 1 6 1 2 4 8 16 32 133 | 126 10 100 0 12 1 6 1 2 4 8 16 32 134 | 127 10 110 0 12 1 6 1 2 4 8 16 32 135 | 128 10 120 0 12 1 6 1 2 4 8 16 32 136 | 129 -20 90 0 8 1 6 1 2 4 8 16 32 137 | 130 -20 110 0 8 1 6 1 2 4 8 16 32 138 | 131 -20 130 0 8 1 6 1 2 4 8 16 32 139 | 132 0 90 0 8 1 6 1 2 4 8 16 32 140 | 133 0 130 0 8 1 6 1 2 4 8 16 32 141 | 134 20 90 0 8 1 6 1 2 4 8 16 32 142 | 135 20 110 0 8 1 6 1 2 4 8 16 32 143 | 136 20 130 0 8 1 6 1 2 4 8 16 32 144 | 137 -30 80 0 4 1 6 1 2 4 8 16 32 145 | 138 -30 110 0 4 1 6 1 2 4 8 16 32 146 | 139 -30 140 0 4 1 6 1 2 4 8 16 32 147 | 140 0 80 0 4 1 6 1 2 4 8 16 32 148 | 141 0 140 0 4 1 6 1 2 4 8 16 32 149 | 142 30 80 0 4 1 6 1 2 4 8 16 32 150 | 143 30 110 0 4 1 6 1 2 4 8 16 32 151 | 144 30 140 0 4 1 6 1 2 4 8 16 32 152 | 145 -40 70 0 2 1 6 1 2 4 8 16 32 153 | 146 -40 110 0 2 1 6 1 2 4 8 16 32 154 | 147 -40 150 0 2 1 6 1 2 4 8 16 32 155 | 148 0 70 0 2 1 6 1 2 4 8 16 32 156 | 149 0 150 0 2 1 6 1 2 4 8 16 32 157 | 150 40 70 0 2 1 6 1 2 4 8 16 32 158 | 151 40 110 0 2 1 6 1 2 4 8 16 32 159 | 152 40 150 0 2 1 6 1 2 4 8 16 32 160 | 153 -50 60 0 1 1 6 1 2 4 8 16 32 161 | 154 -50 110 0 1 1 6 1 2 4 8 16 32 162 | 155 -50 160 0 1 1 6 1 2 4 8 16 32 163 | 156 0 60 0 1 1 6 1 2 4 8 16 32 164 | 157 0 160 0 1 1 6 1 2 4 8 16 32 165 | 158 50 60 0 1 1 6 1 2 4 8 16 32 166 | 159 50 110 0 1 1 6 1 2 4 8 16 32 167 | 160 50 160 0 1 1 6 1 2 4 8 16 32 168 | 161 -120 100 0 12 1 6 1 2 4 8 16 32 169 | 162 -120 110 0 12 1 6 1 2 4 8 16 32 170 | 163 -120 120 0 12 1 6 1 2 4 8 16 32 171 | 164 -110 100 0 12 1 6 1 2 4 8 16 32 172 | 165 -110 120 0 12 1 6 1 2 4 8 16 32 173 | 166 -100 100 0 12 1 6 1 2 4 8 16 32 174 | 167 -100 110 0 12 1 6 1 2 4 8 16 32 175 | 168 -100 120 0 12 1 6 1 2 4 8 16 32 176 | 169 -130 90 0 8 1 6 1 2 4 8 16 32 177 | 170 -130 110 0 8 1 6 1 2 4 8 16 32 178 | 171 -130 130 0 8 1 6 1 2 4 8 16 32 179 | 172 -110 90 0 8 1 6 1 2 4 8 16 32 180 | 173 -110 130 0 8 1 6 1 2 4 8 16 32 181 | 174 -90 90 0 8 1 6 1 2 4 8 16 32 182 | 175 -90 110 0 8 1 6 1 2 4 8 16 32 183 | 176 -90 130 0 8 1 6 1 2 4 8 16 32 184 | 177 -140 80 0 4 1 6 1 2 4 8 16 32 185 | 178 -140 110 0 4 1 6 1 2 4 8 16 32 186 | 179 -140 140 0 4 1 6 1 2 4 8 16 32 187 | 180 -110 80 0 4 1 6 1 2 4 8 16 32 188 | 181 -110 140 0 4 1 6 1 2 4 8 16 32 189 | 182 -80 80 0 4 1 6 1 2 4 8 16 32 190 | 183 -80 110 0 4 1 6 1 2 4 8 16 32 191 | 184 -80 140 0 4 1 6 1 2 4 8 16 32 192 | 185 -150 70 0 2 1 6 1 2 4 8 16 32 193 | 186 -150 110 0 2 1 6 1 2 4 8 16 32 194 | 187 -150 150 0 2 1 6 1 2 4 8 16 32 195 | 188 -110 70 0 2 1 6 1 2 4 8 16 32 196 | 189 -110 150 0 2 1 6 1 2 4 8 16 32 197 | 190 -70 70 0 2 1 6 1 2 4 8 16 32 198 | 191 -70 110 0 2 1 6 1 2 4 8 16 32 199 | 192 -70 150 0 2 1 6 1 2 4 8 16 32 200 | 193 -160 60 0 1 1 6 1 2 4 8 16 32 201 | 194 -160 110 0 1 1 6 1 2 4 8 16 32 202 | 195 -160 160 0 1 1 6 1 2 4 8 16 32 203 | 196 -110 60 0 1 1 6 1 2 4 8 16 32 204 | 197 -110 160 0 1 1 6 1 2 4 8 16 32 205 | 198 -60 60 0 1 1 6 1 2 4 8 16 32 206 | 199 -60 110 0 1 1 6 1 2 4 8 16 32 207 | 200 -60 160 0 1 1 6 1 2 4 8 16 32 208 | 201 -120 -10 0 12 1 6 1 2 4 8 16 32 209 | 202 -120 0 0 12 1 6 1 2 4 8 16 32 210 | 203 -120 10 0 12 1 6 1 2 4 8 16 32 211 | 204 -110 -10 0 12 1 6 1 2 4 8 16 32 212 | 205 -110 10 0 12 1 6 1 2 4 8 16 32 213 | 206 -100 -10 0 12 1 6 1 2 4 8 16 32 214 | 207 -100 0 0 12 1 6 1 2 4 8 16 32 215 | 208 -100 10 0 12 1 6 1 2 4 8 16 32 216 | 209 -130 -20 0 8 1 6 1 2 4 8 16 32 217 | 210 -130 0 0 8 1 6 1 2 4 8 16 32 218 | 211 -130 20 0 8 1 6 1 2 4 8 16 32 219 | 212 -110 -20 0 8 1 6 1 2 4 8 16 32 220 | 213 -110 20 0 8 1 6 1 2 4 8 16 32 221 | 214 -90 -20 0 8 1 6 1 2 4 8 16 32 222 | 215 -90 0 0 8 1 6 1 2 4 8 16 32 223 | 216 -90 20 0 8 1 6 1 2 4 8 16 32 224 | 217 -140 -30 0 4 1 6 1 2 4 8 16 32 225 | 218 -140 0 0 4 1 6 1 2 4 8 16 32 226 | 219 -140 30 0 4 1 6 1 2 4 8 16 32 227 | 220 -110 -30 0 4 1 6 1 2 4 8 16 32 228 | 221 -110 30 0 4 1 6 1 2 4 8 16 32 229 | 222 -80 -30 0 4 1 6 1 2 4 8 16 32 230 | 223 -80 0 0 4 1 6 1 2 4 8 16 32 231 | 224 -80 30 0 4 1 6 1 2 4 8 16 32 232 | 225 -150 -40 0 2 1 6 1 2 4 8 16 32 233 | 226 -150 0 0 2 1 6 1 2 4 8 16 32 234 | 227 -150 40 0 2 1 6 1 2 4 8 16 32 235 | 228 -110 -40 0 2 1 6 1 2 4 8 16 32 236 | 229 -110 40 0 2 1 6 1 2 4 8 16 32 237 | 230 -70 -40 0 2 1 6 1 2 4 8 16 32 238 | 231 -70 0 0 2 1 6 1 2 4 8 16 32 239 | 232 -70 40 0 2 1 6 1 2 4 8 16 32 240 | 233 -160 -50 0 1 1 6 1 2 4 8 16 32 241 | 234 -160 0 0 1 1 6 1 2 4 8 16 32 242 | 235 -160 50 0 1 1 6 1 2 4 8 16 32 243 | 236 -110 -50 0 1 1 6 1 2 4 8 16 32 244 | 237 -110 50 0 1 1 6 1 2 4 8 16 32 245 | 238 -60 -50 0 1 1 6 1 2 4 8 16 32 246 | 239 -60 0 0 1 1 6 1 2 4 8 16 32 247 | 240 -60 50 0 1 1 6 1 2 4 8 16 32 248 | 241 0 0 0 0 0 0 249 | 242 110 0 0 0 0 0 250 | 243 110 110 0 0 0 0 251 | 244 0 110 0 0 0 0 252 | 245 -110 110 0 0 0 0 253 | 246 -110 0 0 0 0 0 254 | -------------------------------------------------------------------------------- /data/input/p19: -------------------------------------------------------------------------------- 1 | 2 5 240 6 2 | 200 60 3 | 200 60 4 | 200 60 5 | 200 60 6 | 200 60 7 | 200 60 8 | 1 -10 -10 0 12 1 6 1 2 4 8 16 32 9 | 2 -10 0 0 12 1 6 1 2 4 8 16 32 10 | 3 -10 10 0 12 1 6 1 2 4 8 16 32 11 | 4 0 -10 0 12 1 6 1 2 4 8 16 32 12 | 5 0 10 0 12 1 6 1 2 4 8 16 32 13 | 6 10 -10 0 12 1 6 1 2 4 8 16 32 14 | 7 10 0 0 12 1 6 1 2 4 8 16 32 15 | 8 10 10 0 12 1 6 1 2 4 8 16 32 16 | 9 -20 -20 0 8 1 6 1 2 4 8 16 32 17 | 10 -20 0 0 8 1 6 1 2 4 8 16 32 18 | 11 -20 20 0 8 1 6 1 2 4 8 16 32 19 | 12 0 -20 0 8 1 6 1 2 4 8 16 32 20 | 13 0 20 0 8 1 6 1 2 4 8 16 32 21 | 14 20 -20 0 8 1 6 1 2 4 8 16 32 22 | 15 20 0 0 8 1 6 1 2 4 8 16 32 23 | 16 20 20 0 8 1 6 1 2 4 8 16 32 24 | 17 -30 -30 0 4 1 6 1 2 4 8 16 32 25 | 18 -30 0 0 4 1 6 1 2 4 8 16 32 26 | 19 -30 30 0 4 1 6 1 2 4 8 16 32 27 | 20 0 -30 0 4 1 6 1 2 4 8 16 32 28 | 21 0 30 0 4 1 6 1 2 4 8 16 32 29 | 22 30 -30 0 4 1 6 1 2 4 8 16 32 30 | 23 30 0 0 4 1 6 1 2 4 8 16 32 31 | 24 30 30 0 4 1 6 1 2 4 8 16 32 32 | 25 -40 -40 0 2 1 6 1 2 4 8 16 32 33 | 26 -40 0 0 2 1 6 1 2 4 8 16 32 34 | 27 -40 40 0 2 1 6 1 2 4 8 16 32 35 | 28 0 -40 0 2 1 6 1 2 4 8 16 32 36 | 29 0 40 0 2 1 6 1 2 4 8 16 32 37 | 30 40 -40 0 2 1 6 1 2 4 8 16 32 38 | 31 40 0 0 2 1 6 1 2 4 8 16 32 39 | 32 40 40 0 2 1 6 1 2 4 8 16 32 40 | 33 -50 -50 0 1 1 6 1 2 4 8 16 32 41 | 34 -50 0 0 1 1 6 1 2 4 8 16 32 42 | 35 -50 50 0 1 1 6 1 2 4 8 16 32 43 | 36 0 -50 0 1 1 6 1 2 4 8 16 32 44 | 37 0 50 0 1 1 6 1 2 4 8 16 32 45 | 38 50 -50 0 1 1 6 1 2 4 8 16 32 46 | 39 50 0 0 1 1 6 1 2 4 8 16 32 47 | 40 50 50 0 1 1 6 1 2 4 8 16 32 48 | 41 100 -10 0 12 1 6 1 2 4 8 16 32 49 | 42 100 0 0 12 1 6 1 2 4 8 16 32 50 | 43 100 10 0 12 1 6 1 2 4 8 16 32 51 | 44 110 -10 0 12 1 6 1 2 4 8 16 32 52 | 45 110 10 0 12 1 6 1 2 4 8 16 32 53 | 46 120 -10 0 12 1 6 1 2 4 8 16 32 54 | 47 120 0 0 12 1 6 1 2 4 8 16 32 55 | 48 120 10 0 12 1 6 1 2 4 8 16 32 56 | 49 90 -20 0 8 1 6 1 2 4 8 16 32 57 | 50 90 0 0 8 1 6 1 2 4 8 16 32 58 | 51 90 20 0 8 1 6 1 2 4 8 16 32 59 | 52 110 -20 0 8 1 6 1 2 4 8 16 32 60 | 53 110 20 0 8 1 6 1 2 4 8 16 32 61 | 54 130 -20 0 8 1 6 1 2 4 8 16 32 62 | 55 130 0 0 8 1 6 1 2 4 8 16 32 63 | 56 130 20 0 8 1 6 1 2 4 8 16 32 64 | 57 80 -30 0 4 1 6 1 2 4 8 16 32 65 | 58 80 0 0 4 1 6 1 2 4 8 16 32 66 | 59 80 30 0 4 1 6 1 2 4 8 16 32 67 | 60 110 -30 0 4 1 6 1 2 4 8 16 32 68 | 61 110 30 0 4 1 6 1 2 4 8 16 32 69 | 62 140 -30 0 4 1 6 1 2 4 8 16 32 70 | 63 140 0 0 4 1 6 1 2 4 8 16 32 71 | 64 140 30 0 4 1 6 1 2 4 8 16 32 72 | 65 70 -40 0 2 1 6 1 2 4 8 16 32 73 | 66 70 0 0 2 1 6 1 2 4 8 16 32 74 | 67 70 40 0 2 1 6 1 2 4 8 16 32 75 | 68 110 -40 0 2 1 6 1 2 4 8 16 32 76 | 69 110 40 0 2 1 6 1 2 4 8 16 32 77 | 70 150 -40 0 2 1 6 1 2 4 8 16 32 78 | 71 150 0 0 2 1 6 1 2 4 8 16 32 79 | 72 150 40 0 2 1 6 1 2 4 8 16 32 80 | 73 60 -50 0 1 1 6 1 2 4 8 16 32 81 | 74 60 0 0 1 1 6 1 2 4 8 16 32 82 | 75 60 50 0 1 1 6 1 2 4 8 16 32 83 | 76 110 -50 0 1 1 6 1 2 4 8 16 32 84 | 77 110 50 0 1 1 6 1 2 4 8 16 32 85 | 78 160 -50 0 1 1 6 1 2 4 8 16 32 86 | 79 160 0 0 1 1 6 1 2 4 8 16 32 87 | 80 160 50 0 1 1 6 1 2 4 8 16 32 88 | 81 100 100 0 12 1 6 1 2 4 8 16 32 89 | 82 100 110 0 12 1 6 1 2 4 8 16 32 90 | 83 100 120 0 12 1 6 1 2 4 8 16 32 91 | 84 110 100 0 12 1 6 1 2 4 8 16 32 92 | 85 110 120 0 12 1 6 1 2 4 8 16 32 93 | 86 120 100 0 12 1 6 1 2 4 8 16 32 94 | 87 120 110 0 12 1 6 1 2 4 8 16 32 95 | 88 120 120 0 12 1 6 1 2 4 8 16 32 96 | 89 90 90 0 8 1 6 1 2 4 8 16 32 97 | 90 90 110 0 8 1 6 1 2 4 8 16 32 98 | 91 90 130 0 8 1 6 1 2 4 8 16 32 99 | 92 110 90 0 8 1 6 1 2 4 8 16 32 100 | 93 110 130 0 8 1 6 1 2 4 8 16 32 101 | 94 130 90 0 8 1 6 1 2 4 8 16 32 102 | 95 130 110 0 8 1 6 1 2 4 8 16 32 103 | 96 130 130 0 8 1 6 1 2 4 8 16 32 104 | 97 80 80 0 4 1 6 1 2 4 8 16 32 105 | 98 80 110 0 4 1 6 1 2 4 8 16 32 106 | 99 80 140 0 4 1 6 1 2 4 8 16 32 107 | 100 110 80 0 4 1 6 1 2 4 8 16 32 108 | 101 110 140 0 4 1 6 1 2 4 8 16 32 109 | 102 140 80 0 4 1 6 1 2 4 8 16 32 110 | 103 140 110 0 4 1 6 1 2 4 8 16 32 111 | 104 140 140 0 4 1 6 1 2 4 8 16 32 112 | 105 70 70 0 2 1 6 1 2 4 8 16 32 113 | 106 70 110 0 2 1 6 1 2 4 8 16 32 114 | 107 70 150 0 2 1 6 1 2 4 8 16 32 115 | 108 110 70 0 2 1 6 1 2 4 8 16 32 116 | 109 110 150 0 2 1 6 1 2 4 8 16 32 117 | 110 150 70 0 2 1 6 1 2 4 8 16 32 118 | 111 150 110 0 2 1 6 1 2 4 8 16 32 119 | 112 150 150 0 2 1 6 1 2 4 8 16 32 120 | 113 60 60 0 1 1 6 1 2 4 8 16 32 121 | 114 60 110 0 1 1 6 1 2 4 8 16 32 122 | 115 60 160 0 1 1 6 1 2 4 8 16 32 123 | 116 110 60 0 1 1 6 1 2 4 8 16 32 124 | 117 110 160 0 1 1 6 1 2 4 8 16 32 125 | 118 160 60 0 1 1 6 1 2 4 8 16 32 126 | 119 160 110 0 1 1 6 1 2 4 8 16 32 127 | 120 160 160 0 1 1 6 1 2 4 8 16 32 128 | 121 -10 100 0 12 1 6 1 2 4 8 16 32 129 | 122 -10 110 0 12 1 6 1 2 4 8 16 32 130 | 123 -10 120 0 12 1 6 1 2 4 8 16 32 131 | 124 0 100 0 12 1 6 1 2 4 8 16 32 132 | 125 0 120 0 12 1 6 1 2 4 8 16 32 133 | 126 10 100 0 12 1 6 1 2 4 8 16 32 134 | 127 10 110 0 12 1 6 1 2 4 8 16 32 135 | 128 10 120 0 12 1 6 1 2 4 8 16 32 136 | 129 -20 90 0 8 1 6 1 2 4 8 16 32 137 | 130 -20 110 0 8 1 6 1 2 4 8 16 32 138 | 131 -20 130 0 8 1 6 1 2 4 8 16 32 139 | 132 0 90 0 8 1 6 1 2 4 8 16 32 140 | 133 0 130 0 8 1 6 1 2 4 8 16 32 141 | 134 20 90 0 8 1 6 1 2 4 8 16 32 142 | 135 20 110 0 8 1 6 1 2 4 8 16 32 143 | 136 20 130 0 8 1 6 1 2 4 8 16 32 144 | 137 -30 80 0 4 1 6 1 2 4 8 16 32 145 | 138 -30 110 0 4 1 6 1 2 4 8 16 32 146 | 139 -30 140 0 4 1 6 1 2 4 8 16 32 147 | 140 0 80 0 4 1 6 1 2 4 8 16 32 148 | 141 0 140 0 4 1 6 1 2 4 8 16 32 149 | 142 30 80 0 4 1 6 1 2 4 8 16 32 150 | 143 30 110 0 4 1 6 1 2 4 8 16 32 151 | 144 30 140 0 4 1 6 1 2 4 8 16 32 152 | 145 -40 70 0 2 1 6 1 2 4 8 16 32 153 | 146 -40 110 0 2 1 6 1 2 4 8 16 32 154 | 147 -40 150 0 2 1 6 1 2 4 8 16 32 155 | 148 0 70 0 2 1 6 1 2 4 8 16 32 156 | 149 0 150 0 2 1 6 1 2 4 8 16 32 157 | 150 40 70 0 2 1 6 1 2 4 8 16 32 158 | 151 40 110 0 2 1 6 1 2 4 8 16 32 159 | 152 40 150 0 2 1 6 1 2 4 8 16 32 160 | 153 -50 60 0 1 1 6 1 2 4 8 16 32 161 | 154 -50 110 0 1 1 6 1 2 4 8 16 32 162 | 155 -50 160 0 1 1 6 1 2 4 8 16 32 163 | 156 0 60 0 1 1 6 1 2 4 8 16 32 164 | 157 0 160 0 1 1 6 1 2 4 8 16 32 165 | 158 50 60 0 1 1 6 1 2 4 8 16 32 166 | 159 50 110 0 1 1 6 1 2 4 8 16 32 167 | 160 50 160 0 1 1 6 1 2 4 8 16 32 168 | 161 -120 100 0 12 1 6 1 2 4 8 16 32 169 | 162 -120 110 0 12 1 6 1 2 4 8 16 32 170 | 163 -120 120 0 12 1 6 1 2 4 8 16 32 171 | 164 -110 100 0 12 1 6 1 2 4 8 16 32 172 | 165 -110 120 0 12 1 6 1 2 4 8 16 32 173 | 166 -100 100 0 12 1 6 1 2 4 8 16 32 174 | 167 -100 110 0 12 1 6 1 2 4 8 16 32 175 | 168 -100 120 0 12 1 6 1 2 4 8 16 32 176 | 169 -130 90 0 8 1 6 1 2 4 8 16 32 177 | 170 -130 110 0 8 1 6 1 2 4 8 16 32 178 | 171 -130 130 0 8 1 6 1 2 4 8 16 32 179 | 172 -110 90 0 8 1 6 1 2 4 8 16 32 180 | 173 -110 130 0 8 1 6 1 2 4 8 16 32 181 | 174 -90 90 0 8 1 6 1 2 4 8 16 32 182 | 175 -90 110 0 8 1 6 1 2 4 8 16 32 183 | 176 -90 130 0 8 1 6 1 2 4 8 16 32 184 | 177 -140 80 0 4 1 6 1 2 4 8 16 32 185 | 178 -140 110 0 4 1 6 1 2 4 8 16 32 186 | 179 -140 140 0 4 1 6 1 2 4 8 16 32 187 | 180 -110 80 0 4 1 6 1 2 4 8 16 32 188 | 181 -110 140 0 4 1 6 1 2 4 8 16 32 189 | 182 -80 80 0 4 1 6 1 2 4 8 16 32 190 | 183 -80 110 0 4 1 6 1 2 4 8 16 32 191 | 184 -80 140 0 4 1 6 1 2 4 8 16 32 192 | 185 -150 70 0 2 1 6 1 2 4 8 16 32 193 | 186 -150 110 0 2 1 6 1 2 4 8 16 32 194 | 187 -150 150 0 2 1 6 1 2 4 8 16 32 195 | 188 -110 70 0 2 1 6 1 2 4 8 16 32 196 | 189 -110 150 0 2 1 6 1 2 4 8 16 32 197 | 190 -70 70 0 2 1 6 1 2 4 8 16 32 198 | 191 -70 110 0 2 1 6 1 2 4 8 16 32 199 | 192 -70 150 0 2 1 6 1 2 4 8 16 32 200 | 193 -160 60 0 1 1 6 1 2 4 8 16 32 201 | 194 -160 110 0 1 1 6 1 2 4 8 16 32 202 | 195 -160 160 0 1 1 6 1 2 4 8 16 32 203 | 196 -110 60 0 1 1 6 1 2 4 8 16 32 204 | 197 -110 160 0 1 1 6 1 2 4 8 16 32 205 | 198 -60 60 0 1 1 6 1 2 4 8 16 32 206 | 199 -60 110 0 1 1 6 1 2 4 8 16 32 207 | 200 -60 160 0 1 1 6 1 2 4 8 16 32 208 | 201 -120 -10 0 12 1 6 1 2 4 8 16 32 209 | 202 -120 0 0 12 1 6 1 2 4 8 16 32 210 | 203 -120 10 0 12 1 6 1 2 4 8 16 32 211 | 204 -110 -10 0 12 1 6 1 2 4 8 16 32 212 | 205 -110 10 0 12 1 6 1 2 4 8 16 32 213 | 206 -100 -10 0 12 1 6 1 2 4 8 16 32 214 | 207 -100 0 0 12 1 6 1 2 4 8 16 32 215 | 208 -100 10 0 12 1 6 1 2 4 8 16 32 216 | 209 -130 -20 0 8 1 6 1 2 4 8 16 32 217 | 210 -130 0 0 8 1 6 1 2 4 8 16 32 218 | 211 -130 20 0 8 1 6 1 2 4 8 16 32 219 | 212 -110 -20 0 8 1 6 1 2 4 8 16 32 220 | 213 -110 20 0 8 1 6 1 2 4 8 16 32 221 | 214 -90 -20 0 8 1 6 1 2 4 8 16 32 222 | 215 -90 0 0 8 1 6 1 2 4 8 16 32 223 | 216 -90 20 0 8 1 6 1 2 4 8 16 32 224 | 217 -140 -30 0 4 1 6 1 2 4 8 16 32 225 | 218 -140 0 0 4 1 6 1 2 4 8 16 32 226 | 219 -140 30 0 4 1 6 1 2 4 8 16 32 227 | 220 -110 -30 0 4 1 6 1 2 4 8 16 32 228 | 221 -110 30 0 4 1 6 1 2 4 8 16 32 229 | 222 -80 -30 0 4 1 6 1 2 4 8 16 32 230 | 223 -80 0 0 4 1 6 1 2 4 8 16 32 231 | 224 -80 30 0 4 1 6 1 2 4 8 16 32 232 | 225 -150 -40 0 2 1 6 1 2 4 8 16 32 233 | 226 -150 0 0 2 1 6 1 2 4 8 16 32 234 | 227 -150 40 0 2 1 6 1 2 4 8 16 32 235 | 228 -110 -40 0 2 1 6 1 2 4 8 16 32 236 | 229 -110 40 0 2 1 6 1 2 4 8 16 32 237 | 230 -70 -40 0 2 1 6 1 2 4 8 16 32 238 | 231 -70 0 0 2 1 6 1 2 4 8 16 32 239 | 232 -70 40 0 2 1 6 1 2 4 8 16 32 240 | 233 -160 -50 0 1 1 6 1 2 4 8 16 32 241 | 234 -160 0 0 1 1 6 1 2 4 8 16 32 242 | 235 -160 50 0 1 1 6 1 2 4 8 16 32 243 | 236 -110 -50 0 1 1 6 1 2 4 8 16 32 244 | 237 -110 50 0 1 1 6 1 2 4 8 16 32 245 | 238 -60 -50 0 1 1 6 1 2 4 8 16 32 246 | 239 -60 0 0 1 1 6 1 2 4 8 16 32 247 | 240 -60 50 0 1 1 6 1 2 4 8 16 32 248 | 241 0 0 0 0 0 0 249 | 242 110 0 0 0 0 0 250 | 243 110 110 0 0 0 0 251 | 244 0 110 0 0 0 0 252 | 245 -110 110 0 0 0 0 253 | 246 -110 0 0 0 0 0 254 | -------------------------------------------------------------------------------- /data/input/p20: -------------------------------------------------------------------------------- 1 | 2 5 240 6 2 | 180 60 3 | 180 60 4 | 180 60 5 | 180 60 6 | 180 60 7 | 180 60 8 | 1 -10 -10 0 12 1 6 1 2 4 8 16 32 9 | 2 -10 0 0 12 1 6 1 2 4 8 16 32 10 | 3 -10 10 0 12 1 6 1 2 4 8 16 32 11 | 4 0 -10 0 12 1 6 1 2 4 8 16 32 12 | 5 0 10 0 12 1 6 1 2 4 8 16 32 13 | 6 10 -10 0 12 1 6 1 2 4 8 16 32 14 | 7 10 0 0 12 1 6 1 2 4 8 16 32 15 | 8 10 10 0 12 1 6 1 2 4 8 16 32 16 | 9 -20 -20 0 8 1 6 1 2 4 8 16 32 17 | 10 -20 0 0 8 1 6 1 2 4 8 16 32 18 | 11 -20 20 0 8 1 6 1 2 4 8 16 32 19 | 12 0 -20 0 8 1 6 1 2 4 8 16 32 20 | 13 0 20 0 8 1 6 1 2 4 8 16 32 21 | 14 20 -20 0 8 1 6 1 2 4 8 16 32 22 | 15 20 0 0 8 1 6 1 2 4 8 16 32 23 | 16 20 20 0 8 1 6 1 2 4 8 16 32 24 | 17 -30 -30 0 4 1 6 1 2 4 8 16 32 25 | 18 -30 0 0 4 1 6 1 2 4 8 16 32 26 | 19 -30 30 0 4 1 6 1 2 4 8 16 32 27 | 20 0 -30 0 4 1 6 1 2 4 8 16 32 28 | 21 0 30 0 4 1 6 1 2 4 8 16 32 29 | 22 30 -30 0 4 1 6 1 2 4 8 16 32 30 | 23 30 0 0 4 1 6 1 2 4 8 16 32 31 | 24 30 30 0 4 1 6 1 2 4 8 16 32 32 | 25 -40 -40 0 2 1 6 1 2 4 8 16 32 33 | 26 -40 0 0 2 1 6 1 2 4 8 16 32 34 | 27 -40 40 0 2 1 6 1 2 4 8 16 32 35 | 28 0 -40 0 2 1 6 1 2 4 8 16 32 36 | 29 0 40 0 2 1 6 1 2 4 8 16 32 37 | 30 40 -40 0 2 1 6 1 2 4 8 16 32 38 | 31 40 0 0 2 1 6 1 2 4 8 16 32 39 | 32 40 40 0 2 1 6 1 2 4 8 16 32 40 | 33 -50 -50 0 1 1 6 1 2 4 8 16 32 41 | 34 -50 0 0 1 1 6 1 2 4 8 16 32 42 | 35 -50 50 0 1 1 6 1 2 4 8 16 32 43 | 36 0 -50 0 1 1 6 1 2 4 8 16 32 44 | 37 0 50 0 1 1 6 1 2 4 8 16 32 45 | 38 50 -50 0 1 1 6 1 2 4 8 16 32 46 | 39 50 0 0 1 1 6 1 2 4 8 16 32 47 | 40 50 50 0 1 1 6 1 2 4 8 16 32 48 | 41 100 -10 0 12 1 6 1 2 4 8 16 32 49 | 42 100 0 0 12 1 6 1 2 4 8 16 32 50 | 43 100 10 0 12 1 6 1 2 4 8 16 32 51 | 44 110 -10 0 12 1 6 1 2 4 8 16 32 52 | 45 110 10 0 12 1 6 1 2 4 8 16 32 53 | 46 120 -10 0 12 1 6 1 2 4 8 16 32 54 | 47 120 0 0 12 1 6 1 2 4 8 16 32 55 | 48 120 10 0 12 1 6 1 2 4 8 16 32 56 | 49 90 -20 0 8 1 6 1 2 4 8 16 32 57 | 50 90 0 0 8 1 6 1 2 4 8 16 32 58 | 51 90 20 0 8 1 6 1 2 4 8 16 32 59 | 52 110 -20 0 8 1 6 1 2 4 8 16 32 60 | 53 110 20 0 8 1 6 1 2 4 8 16 32 61 | 54 130 -20 0 8 1 6 1 2 4 8 16 32 62 | 55 130 0 0 8 1 6 1 2 4 8 16 32 63 | 56 130 20 0 8 1 6 1 2 4 8 16 32 64 | 57 80 -30 0 4 1 6 1 2 4 8 16 32 65 | 58 80 0 0 4 1 6 1 2 4 8 16 32 66 | 59 80 30 0 4 1 6 1 2 4 8 16 32 67 | 60 110 -30 0 4 1 6 1 2 4 8 16 32 68 | 61 110 30 0 4 1 6 1 2 4 8 16 32 69 | 62 140 -30 0 4 1 6 1 2 4 8 16 32 70 | 63 140 0 0 4 1 6 1 2 4 8 16 32 71 | 64 140 30 0 4 1 6 1 2 4 8 16 32 72 | 65 70 -40 0 2 1 6 1 2 4 8 16 32 73 | 66 70 0 0 2 1 6 1 2 4 8 16 32 74 | 67 70 40 0 2 1 6 1 2 4 8 16 32 75 | 68 110 -40 0 2 1 6 1 2 4 8 16 32 76 | 69 110 40 0 2 1 6 1 2 4 8 16 32 77 | 70 150 -40 0 2 1 6 1 2 4 8 16 32 78 | 71 150 0 0 2 1 6 1 2 4 8 16 32 79 | 72 150 40 0 2 1 6 1 2 4 8 16 32 80 | 73 60 -50 0 1 1 6 1 2 4 8 16 32 81 | 74 60 0 0 1 1 6 1 2 4 8 16 32 82 | 75 60 50 0 1 1 6 1 2 4 8 16 32 83 | 76 110 -50 0 1 1 6 1 2 4 8 16 32 84 | 77 110 50 0 1 1 6 1 2 4 8 16 32 85 | 78 160 -50 0 1 1 6 1 2 4 8 16 32 86 | 79 160 0 0 1 1 6 1 2 4 8 16 32 87 | 80 160 50 0 1 1 6 1 2 4 8 16 32 88 | 81 100 100 0 12 1 6 1 2 4 8 16 32 89 | 82 100 110 0 12 1 6 1 2 4 8 16 32 90 | 83 100 120 0 12 1 6 1 2 4 8 16 32 91 | 84 110 100 0 12 1 6 1 2 4 8 16 32 92 | 85 110 120 0 12 1 6 1 2 4 8 16 32 93 | 86 120 100 0 12 1 6 1 2 4 8 16 32 94 | 87 120 110 0 12 1 6 1 2 4 8 16 32 95 | 88 120 120 0 12 1 6 1 2 4 8 16 32 96 | 89 90 90 0 8 1 6 1 2 4 8 16 32 97 | 90 90 110 0 8 1 6 1 2 4 8 16 32 98 | 91 90 130 0 8 1 6 1 2 4 8 16 32 99 | 92 110 90 0 8 1 6 1 2 4 8 16 32 100 | 93 110 130 0 8 1 6 1 2 4 8 16 32 101 | 94 130 90 0 8 1 6 1 2 4 8 16 32 102 | 95 130 110 0 8 1 6 1 2 4 8 16 32 103 | 96 130 130 0 8 1 6 1 2 4 8 16 32 104 | 97 80 80 0 4 1 6 1 2 4 8 16 32 105 | 98 80 110 0 4 1 6 1 2 4 8 16 32 106 | 99 80 140 0 4 1 6 1 2 4 8 16 32 107 | 100 110 80 0 4 1 6 1 2 4 8 16 32 108 | 101 110 140 0 4 1 6 1 2 4 8 16 32 109 | 102 140 80 0 4 1 6 1 2 4 8 16 32 110 | 103 140 110 0 4 1 6 1 2 4 8 16 32 111 | 104 140 140 0 4 1 6 1 2 4 8 16 32 112 | 105 70 70 0 2 1 6 1 2 4 8 16 32 113 | 106 70 110 0 2 1 6 1 2 4 8 16 32 114 | 107 70 150 0 2 1 6 1 2 4 8 16 32 115 | 108 110 70 0 2 1 6 1 2 4 8 16 32 116 | 109 110 150 0 2 1 6 1 2 4 8 16 32 117 | 110 150 70 0 2 1 6 1 2 4 8 16 32 118 | 111 150 110 0 2 1 6 1 2 4 8 16 32 119 | 112 150 150 0 2 1 6 1 2 4 8 16 32 120 | 113 60 60 0 1 1 6 1 2 4 8 16 32 121 | 114 60 110 0 1 1 6 1 2 4 8 16 32 122 | 115 60 160 0 1 1 6 1 2 4 8 16 32 123 | 116 110 60 0 1 1 6 1 2 4 8 16 32 124 | 117 110 160 0 1 1 6 1 2 4 8 16 32 125 | 118 160 60 0 1 1 6 1 2 4 8 16 32 126 | 119 160 110 0 1 1 6 1 2 4 8 16 32 127 | 120 160 160 0 1 1 6 1 2 4 8 16 32 128 | 121 -10 100 0 12 1 6 1 2 4 8 16 32 129 | 122 -10 110 0 12 1 6 1 2 4 8 16 32 130 | 123 -10 120 0 12 1 6 1 2 4 8 16 32 131 | 124 0 100 0 12 1 6 1 2 4 8 16 32 132 | 125 0 120 0 12 1 6 1 2 4 8 16 32 133 | 126 10 100 0 12 1 6 1 2 4 8 16 32 134 | 127 10 110 0 12 1 6 1 2 4 8 16 32 135 | 128 10 120 0 12 1 6 1 2 4 8 16 32 136 | 129 -20 90 0 8 1 6 1 2 4 8 16 32 137 | 130 -20 110 0 8 1 6 1 2 4 8 16 32 138 | 131 -20 130 0 8 1 6 1 2 4 8 16 32 139 | 132 0 90 0 8 1 6 1 2 4 8 16 32 140 | 133 0 130 0 8 1 6 1 2 4 8 16 32 141 | 134 20 90 0 8 1 6 1 2 4 8 16 32 142 | 135 20 110 0 8 1 6 1 2 4 8 16 32 143 | 136 20 130 0 8 1 6 1 2 4 8 16 32 144 | 137 -30 80 0 4 1 6 1 2 4 8 16 32 145 | 138 -30 110 0 4 1 6 1 2 4 8 16 32 146 | 139 -30 140 0 4 1 6 1 2 4 8 16 32 147 | 140 0 80 0 4 1 6 1 2 4 8 16 32 148 | 141 0 140 0 4 1 6 1 2 4 8 16 32 149 | 142 30 80 0 4 1 6 1 2 4 8 16 32 150 | 143 30 110 0 4 1 6 1 2 4 8 16 32 151 | 144 30 140 0 4 1 6 1 2 4 8 16 32 152 | 145 -40 70 0 2 1 6 1 2 4 8 16 32 153 | 146 -40 110 0 2 1 6 1 2 4 8 16 32 154 | 147 -40 150 0 2 1 6 1 2 4 8 16 32 155 | 148 0 70 0 2 1 6 1 2 4 8 16 32 156 | 149 0 150 0 2 1 6 1 2 4 8 16 32 157 | 150 40 70 0 2 1 6 1 2 4 8 16 32 158 | 151 40 110 0 2 1 6 1 2 4 8 16 32 159 | 152 40 150 0 2 1 6 1 2 4 8 16 32 160 | 153 -50 60 0 1 1 6 1 2 4 8 16 32 161 | 154 -50 110 0 1 1 6 1 2 4 8 16 32 162 | 155 -50 160 0 1 1 6 1 2 4 8 16 32 163 | 156 0 60 0 1 1 6 1 2 4 8 16 32 164 | 157 0 160 0 1 1 6 1 2 4 8 16 32 165 | 158 50 60 0 1 1 6 1 2 4 8 16 32 166 | 159 50 110 0 1 1 6 1 2 4 8 16 32 167 | 160 50 160 0 1 1 6 1 2 4 8 16 32 168 | 161 -120 100 0 12 1 6 1 2 4 8 16 32 169 | 162 -120 110 0 12 1 6 1 2 4 8 16 32 170 | 163 -120 120 0 12 1 6 1 2 4 8 16 32 171 | 164 -110 100 0 12 1 6 1 2 4 8 16 32 172 | 165 -110 120 0 12 1 6 1 2 4 8 16 32 173 | 166 -100 100 0 12 1 6 1 2 4 8 16 32 174 | 167 -100 110 0 12 1 6 1 2 4 8 16 32 175 | 168 -100 120 0 12 1 6 1 2 4 8 16 32 176 | 169 -130 90 0 8 1 6 1 2 4 8 16 32 177 | 170 -130 110 0 8 1 6 1 2 4 8 16 32 178 | 171 -130 130 0 8 1 6 1 2 4 8 16 32 179 | 172 -110 90 0 8 1 6 1 2 4 8 16 32 180 | 173 -110 130 0 8 1 6 1 2 4 8 16 32 181 | 174 -90 90 0 8 1 6 1 2 4 8 16 32 182 | 175 -90 110 0 8 1 6 1 2 4 8 16 32 183 | 176 -90 130 0 8 1 6 1 2 4 8 16 32 184 | 177 -140 80 0 4 1 6 1 2 4 8 16 32 185 | 178 -140 110 0 4 1 6 1 2 4 8 16 32 186 | 179 -140 140 0 4 1 6 1 2 4 8 16 32 187 | 180 -110 80 0 4 1 6 1 2 4 8 16 32 188 | 181 -110 140 0 4 1 6 1 2 4 8 16 32 189 | 182 -80 80 0 4 1 6 1 2 4 8 16 32 190 | 183 -80 110 0 4 1 6 1 2 4 8 16 32 191 | 184 -80 140 0 4 1 6 1 2 4 8 16 32 192 | 185 -150 70 0 2 1 6 1 2 4 8 16 32 193 | 186 -150 110 0 2 1 6 1 2 4 8 16 32 194 | 187 -150 150 0 2 1 6 1 2 4 8 16 32 195 | 188 -110 70 0 2 1 6 1 2 4 8 16 32 196 | 189 -110 150 0 2 1 6 1 2 4 8 16 32 197 | 190 -70 70 0 2 1 6 1 2 4 8 16 32 198 | 191 -70 110 0 2 1 6 1 2 4 8 16 32 199 | 192 -70 150 0 2 1 6 1 2 4 8 16 32 200 | 193 -160 60 0 1 1 6 1 2 4 8 16 32 201 | 194 -160 110 0 1 1 6 1 2 4 8 16 32 202 | 195 -160 160 0 1 1 6 1 2 4 8 16 32 203 | 196 -110 60 0 1 1 6 1 2 4 8 16 32 204 | 197 -110 160 0 1 1 6 1 2 4 8 16 32 205 | 198 -60 60 0 1 1 6 1 2 4 8 16 32 206 | 199 -60 110 0 1 1 6 1 2 4 8 16 32 207 | 200 -60 160 0 1 1 6 1 2 4 8 16 32 208 | 201 -120 -10 0 12 1 6 1 2 4 8 16 32 209 | 202 -120 0 0 12 1 6 1 2 4 8 16 32 210 | 203 -120 10 0 12 1 6 1 2 4 8 16 32 211 | 204 -110 -10 0 12 1 6 1 2 4 8 16 32 212 | 205 -110 10 0 12 1 6 1 2 4 8 16 32 213 | 206 -100 -10 0 12 1 6 1 2 4 8 16 32 214 | 207 -100 0 0 12 1 6 1 2 4 8 16 32 215 | 208 -100 10 0 12 1 6 1 2 4 8 16 32 216 | 209 -130 -20 0 8 1 6 1 2 4 8 16 32 217 | 210 -130 0 0 8 1 6 1 2 4 8 16 32 218 | 211 -130 20 0 8 1 6 1 2 4 8 16 32 219 | 212 -110 -20 0 8 1 6 1 2 4 8 16 32 220 | 213 -110 20 0 8 1 6 1 2 4 8 16 32 221 | 214 -90 -20 0 8 1 6 1 2 4 8 16 32 222 | 215 -90 0 0 8 1 6 1 2 4 8 16 32 223 | 216 -90 20 0 8 1 6 1 2 4 8 16 32 224 | 217 -140 -30 0 4 1 6 1 2 4 8 16 32 225 | 218 -140 0 0 4 1 6 1 2 4 8 16 32 226 | 219 -140 30 0 4 1 6 1 2 4 8 16 32 227 | 220 -110 -30 0 4 1 6 1 2 4 8 16 32 228 | 221 -110 30 0 4 1 6 1 2 4 8 16 32 229 | 222 -80 -30 0 4 1 6 1 2 4 8 16 32 230 | 223 -80 0 0 4 1 6 1 2 4 8 16 32 231 | 224 -80 30 0 4 1 6 1 2 4 8 16 32 232 | 225 -150 -40 0 2 1 6 1 2 4 8 16 32 233 | 226 -150 0 0 2 1 6 1 2 4 8 16 32 234 | 227 -150 40 0 2 1 6 1 2 4 8 16 32 235 | 228 -110 -40 0 2 1 6 1 2 4 8 16 32 236 | 229 -110 40 0 2 1 6 1 2 4 8 16 32 237 | 230 -70 -40 0 2 1 6 1 2 4 8 16 32 238 | 231 -70 0 0 2 1 6 1 2 4 8 16 32 239 | 232 -70 40 0 2 1 6 1 2 4 8 16 32 240 | 233 -160 -50 0 1 1 6 1 2 4 8 16 32 241 | 234 -160 0 0 1 1 6 1 2 4 8 16 32 242 | 235 -160 50 0 1 1 6 1 2 4 8 16 32 243 | 236 -110 -50 0 1 1 6 1 2 4 8 16 32 244 | 237 -110 50 0 1 1 6 1 2 4 8 16 32 245 | 238 -60 -50 0 1 1 6 1 2 4 8 16 32 246 | 239 -60 0 0 1 1 6 1 2 4 8 16 32 247 | 240 -60 50 0 1 1 6 1 2 4 8 16 32 248 | 241 0 0 0 0 0 0 249 | 242 110 0 0 0 0 0 250 | 243 110 110 0 0 0 0 251 | 244 0 110 0 0 0 0 252 | 245 -110 110 0 0 0 0 253 | 246 -110 0 0 0 0 0 254 | -------------------------------------------------------------------------------- /data/input/pr05: -------------------------------------------------------------------------------- 1 | 2 5 240 4 2 | 420 180 3 | 420 180 4 | 420 180 5 | 420 180 6 | 1 65.991 -49.829 20 10 1 4 1 2 4 8 7 | 2 -36.938 -36.743 20 25 1 4 1 2 4 8 8 | 3 -2.734 18.774 13 18 1 4 1 2 4 8 9 | 4 31.116 -35.907 13 16 1 4 1 2 4 8 10 | 5 2.789 8.008 17 14 1 4 1 2 4 8 11 | 6 31.152 43.665 24 7 1 4 1 2 4 8 12 | 7 -36.304 -21.307 15 9 1 4 1 2 4 8 13 | 8 52.814 35.046 12 16 1 4 1 2 4 8 14 | 9 11.267 20.660 20 24 1 4 1 2 4 8 15 | 10 -0.623 23.114 20 6 1 4 1 2 4 8 16 | 11 43.091 -12.360 3 22 1 4 1 2 4 8 17 | 12 6.854 19.073 8 11 1 4 1 2 4 8 18 | 13 -6.848 25.317 16 19 1 4 1 2 4 8 19 | 14 -27.930 -23.712 20 20 1 4 1 2 4 8 20 | 15 33.240 -30.487 21 20 1 4 1 2 4 8 21 | 16 63.885 -52.881 23 16 1 4 1 2 4 8 22 | 17 -13.672 -43.945 21 5 1 4 1 2 4 8 23 | 18 -0.647 -27.502 3 21 1 4 1 2 4 8 24 | 19 59.406 -49.261 19 19 1 4 1 2 4 8 25 | 20 27.167 -5.713 20 18 1 4 1 2 4 8 26 | 21 70.001 -20.844 7 22 1 4 1 2 4 8 27 | 22 35.327 -65.167 14 19 1 4 1 2 4 8 28 | 23 -14.386 -42.236 24 15 1 4 1 2 4 8 29 | 24 19.366 30.273 3 24 1 4 1 2 4 8 30 | 25 -39.789 10.101 13 20 1 4 1 2 4 8 31 | 26 -15.753 -40.204 1 17 1 4 1 2 4 8 32 | 27 -28.418 -40.503 5 20 1 4 1 2 4 8 33 | 28 27.081 9.735 2 12 1 4 1 2 4 8 34 | 29 22.205 -9.216 9 23 1 4 1 2 4 8 35 | 30 -0.830 -6.525 18 15 1 4 1 2 4 8 36 | 31 10.217 75.531 5 19 1 4 1 2 4 8 37 | 32 7.446 18.500 12 23 1 4 1 2 4 8 38 | 33 48.914 -20.294 11 9 1 4 1 2 4 8 39 | 34 -18.958 -29.675 17 21 1 4 1 2 4 8 40 | 35 16.815 -6.659 21 17 1 4 1 2 4 8 41 | 36 2.509 -30.420 5 6 1 4 1 2 4 8 42 | 37 15.424 4.913 5 10 1 4 1 2 4 8 43 | 38 60.315 89.801 7 9 1 4 1 2 4 8 44 | 39 40.405 -45.367 24 19 1 4 1 2 4 8 45 | 40 -26.837 -54.272 1 17 1 4 1 2 4 8 46 | 41 69.171 72.577 12 22 1 4 1 2 4 8 47 | 42 -22.815 46.173 6 8 1 4 1 2 4 8 48 | 43 -14.258 -30.249 5 25 1 4 1 2 4 8 49 | 44 76.050 12.073 19 13 1 4 1 2 4 8 50 | 45 63.043 60.022 23 1 1 4 1 2 4 8 51 | 46 -20.239 -81.970 8 15 1 4 1 2 4 8 52 | 47 -41.168 -42.023 1 16 1 4 1 2 4 8 53 | 48 79.199 -29.016 20 20 1 4 1 2 4 8 54 | 49 -20.728 -7.068 16 14 1 4 1 2 4 8 55 | 50 -4.163 -53.497 8 2 1 4 1 2 4 8 56 | 51 39.594 -40.460 16 5 1 4 1 2 4 8 57 | 52 -47.125 -77.850 25 16 1 4 1 2 4 8 58 | 53 -1.233 49.182 5 12 1 4 1 2 4 8 59 | 54 -0.372 -27.264 10 1 1 4 1 2 4 8 60 | 55 31.537 -8.722 24 15 1 4 1 2 4 8 61 | 56 -0.134 -20.264 16 5 1 4 1 2 4 8 62 | 57 66.394 -26.691 7 9 1 4 1 2 4 8 63 | 58 6.104 -64.093 14 8 1 4 1 2 4 8 64 | 59 13.544 -20.874 11 2 1 4 1 2 4 8 65 | 60 54.211 -6.537 15 10 1 4 1 2 4 8 66 | 61 22.046 -34.137 23 25 1 4 1 2 4 8 67 | 62 -9.723 4.706 5 24 1 4 1 2 4 8 68 | 63 -11.584 -46.857 16 7 1 4 1 2 4 8 69 | 64 -2.905 -0.305 13 14 1 4 1 2 4 8 70 | 65 13.837 -44.452 18 3 1 4 1 2 4 8 71 | 66 17.480 27.747 14 23 1 4 1 2 4 8 72 | 67 2.972 -43.689 3 21 1 4 1 2 4 8 73 | 68 -44.354 -38.202 22 13 1 4 1 2 4 8 74 | 69 -59.399 1.514 16 15 1 4 1 2 4 8 75 | 70 -13.452 -75.531 16 14 1 4 1 2 4 8 76 | 71 -5.518 -51.947 2 7 1 4 1 2 4 8 77 | 72 -9.589 -26.880 19 20 1 4 1 2 4 8 78 | 73 19.318 29.498 23 6 1 4 1 2 4 8 79 | 74 26.245 36.743 6 24 1 4 1 2 4 8 80 | 75 43.707 -28.033 11 17 1 4 1 2 4 8 81 | 76 -52.026 -35.339 19 3 1 4 1 2 4 8 82 | 77 -8.435 -0.116 3 15 1 4 1 2 4 8 83 | 78 89.111 62.122 14 6 1 4 1 2 4 8 84 | 79 6.067 -16.132 14 21 1 4 1 2 4 8 85 | 80 27.094 -5.103 19 25 1 4 1 2 4 8 86 | 81 27.527 -15.344 3 18 1 4 1 2 4 8 87 | 82 42.511 32.056 18 1 1 4 1 2 4 8 88 | 83 25.311 12.689 24 19 1 4 1 2 4 8 89 | 84 47.778 -12.769 6 17 1 4 1 2 4 8 90 | 85 -3.143 -13.837 1 20 1 4 1 2 4 8 91 | 86 12.482 -78.101 3 1 1 4 1 2 4 8 92 | 87 -21.039 -3.430 15 13 1 4 1 2 4 8 93 | 88 -3.149 -55.432 18 25 1 4 1 2 4 8 94 | 89 53.009 84.900 5 16 1 4 1 2 4 8 95 | 90 35.638 -47.552 23 5 1 4 1 2 4 8 96 | 91 43.427 -18.439 10 18 1 4 1 2 4 8 97 | 92 6.598 -54.578 20 17 1 4 1 2 4 8 98 | 93 87.952 94.012 11 15 1 4 1 2 4 8 99 | 94 39.105 -48.743 16 13 1 4 1 2 4 8 100 | 95 -48.340 -26.477 15 15 1 4 1 2 4 8 101 | 96 72.003 -9.253 19 2 1 4 1 2 4 8 102 | 97 -37.732 3.351 4 1 1 4 1 2 4 8 103 | 98 -65.967 -36.749 14 9 1 4 1 2 4 8 104 | 99 -16.669 -35.284 23 16 1 4 1 2 4 8 105 | 100 10.742 -4.669 11 6 1 4 1 2 4 8 106 | 101 15.594 -5.817 21 18 1 4 1 2 4 8 107 | 102 21.606 -18.109 14 24 1 4 1 2 4 8 108 | 103 9.784 49.280 16 24 1 4 1 2 4 8 109 | 104 94.147 -4.492 25 9 1 4 1 2 4 8 110 | 105 10.382 -16.302 17 19 1 4 1 2 4 8 111 | 106 -1.453 -0.861 16 12 1 4 1 2 4 8 112 | 107 -6.219 25.305 13 22 1 4 1 2 4 8 113 | 108 -6.250 10.217 23 13 1 4 1 2 4 8 114 | 109 -17.444 -70.795 10 20 1 4 1 2 4 8 115 | 110 -55.090 -43.854 2 25 1 4 1 2 4 8 116 | 111 -9.442 23.724 15 1 1 4 1 2 4 8 117 | 112 8.978 35.406 14 24 1 4 1 2 4 8 118 | 113 -16.754 -0.812 22 10 1 4 1 2 4 8 119 | 114 66.852 -37.842 15 22 1 4 1 2 4 8 120 | 115 14.716 -23.724 16 14 1 4 1 2 4 8 121 | 116 33.472 20.026 12 12 1 4 1 2 4 8 122 | 117 66.394 -70.111 14 23 1 4 1 2 4 8 123 | 118 -5.664 8.881 15 14 1 4 1 2 4 8 124 | 119 -5.103 -46.729 11 23 1 4 1 2 4 8 125 | 120 -8.826 55.743 11 25 1 4 1 2 4 8 126 | 121 5.847 -3.186 4 5 1 4 1 2 4 8 127 | 122 -25.726 -37.695 23 7 1 4 1 2 4 8 128 | 123 -15.363 -24.548 13 25 1 4 1 2 4 8 129 | 124 43.793 -11.102 22 11 1 4 1 2 4 8 130 | 125 17.664 -25.604 17 18 1 4 1 2 4 8 131 | 126 -39.624 54.883 2 18 1 4 1 2 4 8 132 | 127 -24.554 -43.225 5 1 1 4 1 2 4 8 133 | 128 -26.892 -12.738 14 7 1 4 1 2 4 8 134 | 129 34.155 -38.458 1 22 1 4 1 2 4 8 135 | 130 -47.314 -29.468 13 7 1 4 1 2 4 8 136 | 131 49.365 -25.592 8 3 1 4 1 2 4 8 137 | 132 3.705 -16.449 24 18 1 4 1 2 4 8 138 | 133 22.430 -23.273 12 8 1 4 1 2 4 8 139 | 134 -37.549 -29.608 23 6 1 4 1 2 4 8 140 | 135 25.549 3.674 1 7 1 4 1 2 4 8 141 | 136 -15.216 3.284 2 20 1 4 1 2 4 8 142 | 137 -12.939 -7.495 8 10 1 4 1 2 4 8 143 | 138 -22.107 26.434 18 2 1 4 1 2 4 8 144 | 139 -17.944 7.733 14 3 1 4 1 2 4 8 145 | 140 -21.234 14.490 23 10 1 4 1 2 4 8 146 | 141 3.503 -19.708 14 5 1 4 1 2 4 8 147 | 142 32.599 -14.935 4 25 1 4 1 2 4 8 148 | 143 -5.737 -28.296 24 23 1 4 1 2 4 8 149 | 144 -6.128 -39.624 9 21 1 4 1 2 4 8 150 | 145 -2.460 12.817 15 13 1 4 1 2 4 8 151 | 146 -6.470 8.466 10 1 1 4 1 2 4 8 152 | 147 -37.891 -36.115 3 11 1 4 1 2 4 8 153 | 148 10.852 -18.750 12 6 1 4 1 2 4 8 154 | 149 50.104 8.636 6 9 1 4 1 2 4 8 155 | 150 46.844 4.712 1 17 1 4 1 2 4 8 156 | 151 19.598 -10.406 24 13 1 4 1 2 4 8 157 | 152 -38.947 52.942 3 23 1 4 1 2 4 8 158 | 153 -0.641 -21.289 4 19 1 4 1 2 4 8 159 | 154 40.906 -33.765 7 11 1 4 1 2 4 8 160 | 155 -0.574 -62.299 21 12 1 4 1 2 4 8 161 | 156 -9.778 26.794 1 18 1 4 1 2 4 8 162 | 157 34.265 -23.895 24 25 1 4 1 2 4 8 163 | 158 29.572 -24.561 5 13 1 4 1 2 4 8 164 | 159 16.376 -58.887 23 24 1 4 1 2 4 8 165 | 160 61.877 -15.167 5 5 1 4 1 2 4 8 166 | 161 40.088 -9.625 17 14 1 4 1 2 4 8 167 | 162 0.122 -4.645 24 18 1 4 1 2 4 8 168 | 163 -8.929 -43.903 23 25 1 4 1 2 4 8 169 | 164 -7.135 -57.434 3 11 1 4 1 2 4 8 170 | 165 7.550 -21.210 5 18 1 4 1 2 4 8 171 | 166 3.949 7.300 22 23 1 4 1 2 4 8 172 | 167 -15.118 92.023 9 22 1 4 1 2 4 8 173 | 168 84.821 -24.518 23 20 1 4 1 2 4 8 174 | 169 -52.325 30.682 15 11 1 4 1 2 4 8 175 | 170 7.538 13.818 15 11 1 4 1 2 4 8 176 | 171 -21.484 30.359 11 19 1 4 1 2 4 8 177 | 172 36.047 29.883 20 13 1 4 1 2 4 8 178 | 173 12.781 -40.942 10 24 1 4 1 2 4 8 179 | 174 -17.291 -10.254 24 6 1 4 1 2 4 8 180 | 175 -10.541 12.402 10 5 1 4 1 2 4 8 181 | 176 -15.845 -59.460 6 24 1 4 1 2 4 8 182 | 177 29.266 -2.222 22 7 1 4 1 2 4 8 183 | 178 -12.598 -58.929 25 13 1 4 1 2 4 8 184 | 179 -17.303 -35.297 11 25 1 4 1 2 4 8 185 | 180 57.050 -50.354 6 15 1 4 1 2 4 8 186 | 181 26.941 17.444 9 15 1 4 1 2 4 8 187 | 182 -6.195 -8.881 6 16 1 4 1 2 4 8 188 | 183 16.980 -16.321 12 5 1 4 1 2 4 8 189 | 184 83.710 -32.520 4 15 1 4 1 2 4 8 190 | 185 12.451 34.589 24 24 1 4 1 2 4 8 191 | 186 15.057 67.004 18 15 1 4 1 2 4 8 192 | 187 25.818 -5.835 3 9 1 4 1 2 4 8 193 | 188 13.666 -14.832 18 19 1 4 1 2 4 8 194 | 189 48.322 -5.164 17 15 1 4 1 2 4 8 195 | 190 13.489 19.739 23 2 1 4 1 2 4 8 196 | 191 -18.512 65.405 10 3 1 4 1 2 4 8 197 | 192 17.554 38.379 22 18 1 4 1 2 4 8 198 | 193 37.775 -16.003 5 20 1 4 1 2 4 8 199 | 194 47.968 -30.310 16 14 1 4 1 2 4 8 200 | 195 38.806 36.243 10 10 1 4 1 2 4 8 201 | 196 -16.089 -42.841 10 6 1 4 1 2 4 8 202 | 197 28.656 -1.990 9 17 1 4 1 2 4 8 203 | 198 -5.859 -1.862 5 20 1 4 1 2 4 8 204 | 199 60.516 63.416 9 3 1 4 1 2 4 8 205 | 200 63.196 -47.766 12 14 1 4 1 2 4 8 206 | 201 -15.308 -23.285 16 12 1 4 1 2 4 8 207 | 202 -2.875 0.787 8 2 1 4 1 2 4 8 208 | 203 32.056 -10.175 1 11 1 4 1 2 4 8 209 | 204 -18.634 -25.665 1 16 1 4 1 2 4 8 210 | 205 -3.632 25.433 18 18 1 4 1 2 4 8 211 | 206 10.480 22.888 22 14 1 4 1 2 4 8 212 | 207 1.819 -3.009 20 6 1 4 1 2 4 8 213 | 208 -25.275 -12.183 4 12 1 4 1 2 4 8 214 | 209 56.927 -75.507 15 21 1 4 1 2 4 8 215 | 210 13.885 -36.230 7 1 1 4 1 2 4 8 216 | 211 32.520 -29.523 25 18 1 4 1 2 4 8 217 | 212 4.803 -7.288 3 17 1 4 1 2 4 8 218 | 213 11.365 -8.344 22 15 1 4 1 2 4 8 219 | 214 17.126 -24.646 5 4 1 4 1 2 4 8 220 | 215 -33.661 -41.241 1 18 1 4 1 2 4 8 221 | 216 -32.391 -50.885 9 22 1 4 1 2 4 8 222 | 217 23.041 -14.496 16 16 1 4 1 2 4 8 223 | 218 -21.857 -39.502 23 14 1 4 1 2 4 8 224 | 219 32.013 77.332 5 25 1 4 1 2 4 8 225 | 220 13.831 -76.190 5 15 1 4 1 2 4 8 226 | 221 -8.051 -21.179 6 6 1 4 1 2 4 8 227 | 222 25.391 46.613 16 7 1 4 1 2 4 8 228 | 223 49.536 -54.639 25 21 1 4 1 2 4 8 229 | 224 63.416 -8.636 1 3 1 4 1 2 4 8 230 | 225 2.301 -5.536 25 15 1 4 1 2 4 8 231 | 226 52.423 29.895 17 24 1 4 1 2 4 8 232 | 227 9.296 -16.254 11 2 1 4 1 2 4 8 233 | 228 34.845 -96.185 24 17 1 4 1 2 4 8 234 | 229 -21.063 -41.498 10 2 1 4 1 2 4 8 235 | 230 28.448 10.242 12 25 1 4 1 2 4 8 236 | 231 16.254 -22.583 17 15 1 4 1 2 4 8 237 | 232 -36.639 -34.033 18 3 1 4 1 2 4 8 238 | 233 -27.356 -50.177 5 1 1 4 1 2 4 8 239 | 234 -53.705 11.334 16 1 1 4 1 2 4 8 240 | 235 26.276 -5.994 9 20 1 4 1 2 4 8 241 | 236 -31.519 34.589 6 19 1 4 1 2 4 8 242 | 237 -14.612 -31.506 1 2 1 4 1 2 4 8 243 | 238 -4.242 -30.865 4 9 1 4 1 2 4 8 244 | 239 -18.524 -29.486 20 4 1 4 1 2 4 8 245 | 240 -17.133 -19.397 19 16 1 4 1 2 4 8 246 | 241 34.430 -17.151 0 0 0 0 247 | 242 0.269 -8.154 0 0 0 0 248 | 243 3.140 13.297 0 0 0 0 249 | 244 -3.113 -29.745 0 0 0 0 250 | --------------------------------------------------------------------------------