Tweaked problem definition and data file for problem 1
[ou-summer-of-code-2017.git] / 01-ticket-prices / ticket-pricing-generator.ipynb
1 {
2 "cells": [
3 {
4 "cell_type": "code",
5 "execution_count": 1,
6 "metadata": {
7 "collapsed": true
8 },
9 "outputs": [],
10 "source": [
11 "import random\n",
12 "import re\n",
13 "import uuid"
14 ]
15 },
16 {
17 "cell_type": "code",
18 "execution_count": 2,
19 "metadata": {
20 "collapsed": true
21 },
22 "outputs": [],
23 "source": [
24 "def cap_after_hyphen(string):\n",
25 " return re.sub(r'\\-(?P<first>[a-z])', \n",
26 " lambda m: '-' + m.group('first').upper(), \n",
27 " string) "
28 ]
29 },
30 {
31 "cell_type": "code",
32 "execution_count": 3,
33 "metadata": {},
34 "outputs": [
35 {
36 "data": {
37 "text/plain": [
38 "['Aalborg',\n",
39 " 'Nullarbor',\n",
40 " 'Morgantown',\n",
41 " 'Estacada',\n",
42 " 'Almaty',\n",
43 " 'Tambon-Pa-Fa',\n",
44 " 'Lemnos',\n",
45 " 'Sofia',\n",
46 " 'Puente-Laguna-Garzonkuala-Penyu',\n",
47 " 'Hajnowski',\n",
48 " 'Karlukovo',\n",
49 " 'Mamula',\n",
50 " 'Stonington-Island',\n",
51 " 'Grimsey-Island',\n",
52 " 'Uzupis',\n",
53 " 'Sukhumi',\n",
54 " 'Ijsseloog',\n",
55 " 'Giessenmestia',\n",
56 " 'Nordkapp',\n",
57 " 'Gorongosa',\n",
58 " 'Brorfelde',\n",
59 " 'Parowan',\n",
60 " 'Tubakuba',\n",
61 " 'Geoje-Si',\n",
62 " 'Mora',\n",
63 " 'Holmegaard',\n",
64 " 'Jayuya',\n",
65 " 'Zhangye-Shi',\n",
66 " 'Luoyang']"
67 ]
68 },
69 "execution_count": 3,
70 "metadata": {},
71 "output_type": "execute_result"
72 }
73 ],
74 "source": [
75 "destination_names = ('Aalborg Nullarbor MORGANTOWN ESTACADA ALMATY TAMBON-PA-FA Lemnos Sofia Puente-Laguna-Garzon' +\n",
76 "'KUALA-PENYU HAJNOWSKI KARLUKOVO Mamula STONINGTON-ISLAND Grimsey-Island Uzupis SUKHUMI IJsseloog GIESSEN' +\n",
77 "'MESTIA NORDKAPP GORONGOSA Brorfelde PAROWAN Tubakuba GEOJE-SI MORA HOLMEGAARD JAYUYA ZHANGYE-SHI LUOYANG')\n",
78 "destination_names = destination_names.lower().split()\n",
79 "destination_names = [n[0].upper() + n[1:] for n in destination_names]\n",
80 "destination_names = [cap_after_hyphen(n) for n in destination_names]\n",
81 "\n",
82 "destination_names"
83 ]
84 },
85 {
86 "cell_type": "code",
87 "execution_count": 4,
88 "metadata": {},
89 "outputs": [
90 {
91 "data": {
92 "text/plain": [
93 "{'Aalborg': 1.0,\n",
94 " 'Almaty': 1.0,\n",
95 " 'Brorfelde': 1.0,\n",
96 " 'Estacada': 1.0,\n",
97 " 'Geoje-Si': 1.0,\n",
98 " 'Giessenmestia': 1.0,\n",
99 " 'Gorongosa': 1.0,\n",
100 " 'Grimsey-Island': 1.0,\n",
101 " 'Hajnowski': 1.0,\n",
102 " 'Holmegaard': 1.0,\n",
103 " 'Ijsseloog': 1.0,\n",
104 " 'Jayuya': 1.0,\n",
105 " 'Karlukovo': 1.0,\n",
106 " 'Lemnos': 1.0,\n",
107 " 'Luoyang': 1.0,\n",
108 " 'Mamula': 1.0,\n",
109 " 'Mora': 1.0,\n",
110 " 'Morgantown': 1.0,\n",
111 " 'Nordkapp': 1.0,\n",
112 " 'Nullarbor': 1.0,\n",
113 " 'Parowan': 1.0,\n",
114 " 'Puente-Laguna-Garzonkuala-Penyu': 1.0,\n",
115 " 'Sofia': 1.0,\n",
116 " 'Stonington-Island': 1.0,\n",
117 " 'Sukhumi': 1.0,\n",
118 " 'Tambon-Pa-Fa': 1.0,\n",
119 " 'Tubakuba': 1.0,\n",
120 " 'Uzupis': 1.0,\n",
121 " 'Zhangye-Shi': 1.0}"
122 ]
123 },
124 "execution_count": 4,
125 "metadata": {},
126 "output_type": "execute_result"
127 }
128 ],
129 "source": [
130 "destination_scores = {n: 1.0 for n in destination_names}\n",
131 "destination_scores"
132 ]
133 },
134 {
135 "cell_type": "code",
136 "execution_count": 40,
137 "metadata": {},
138 "outputs": [
139 {
140 "data": {
141 "text/plain": [
142 "{'Aalborg': 1,\n",
143 " 'Almaty': 2.0,\n",
144 " 'Brorfelde': 0.9,\n",
145 " 'Estacada': 0.4,\n",
146 " 'Geoje-Si': 1,\n",
147 " 'Giessenmestia': 1,\n",
148 " 'Gorongosa': 1,\n",
149 " 'Grimsey-Island': 1,\n",
150 " 'Hajnowski': 1,\n",
151 " 'Holmegaard': 1,\n",
152 " 'Ijsseloog': 1,\n",
153 " 'Jayuya': 0.6,\n",
154 " 'Karlukovo': 2.2,\n",
155 " 'Lemnos': 1,\n",
156 " 'Luoyang': 1,\n",
157 " 'Mamula': 1,\n",
158 " 'Mora': 1,\n",
159 " 'Morgantown': 2.9,\n",
160 " 'Nordkapp': 1.5,\n",
161 " 'Nullarbor': 2.2,\n",
162 " 'Parowan': 1,\n",
163 " 'Puente-Laguna-Garzonkuala-Penyu': 0.4,\n",
164 " 'Sofia': 1,\n",
165 " 'Stonington-Island': 1,\n",
166 " 'Sukhumi': 1,\n",
167 " 'Tambon-Pa-Fa': 1,\n",
168 " 'Tubakuba': 1,\n",
169 " 'Uzupis': 0.9,\n",
170 " 'Zhangye-Shi': 1}"
171 ]
172 },
173 "execution_count": 40,
174 "metadata": {},
175 "output_type": "execute_result"
176 }
177 ],
178 "source": [
179 "adjust = random.sample(destination_names, 10)\n",
180 "inc_names = adjust[:5]\n",
181 "dec_names = adjust[5:]\n",
182 "for n in inc_names:\n",
183 " destination_scores[n] = float(random.randint(11, 30)) / 10\n",
184 "for n in dec_names:\n",
185 " destination_scores[n] = float(random.randint(3, 9)) / 10 \n",
186 "destination_scores"
187 ]
188 },
189 {
190 "cell_type": "code",
191 "execution_count": 42,
192 "metadata": {
193 "collapsed": true
194 },
195 "outputs": [],
196 "source": [
197 "destination_scores = {'Aalborg': 1, 'Almaty': 2.0, 'Brorfelde': 0.9, 'Estacada': 0.4, 'Geoje-Si': 1,\n",
198 " 'Giessenmestia': 1, 'Gorongosa': 1, 'Grimsey-Island': 1, 'Hajnowski': 1, 'Holmegaard': 1, 'Ijsseloog': 1,\n",
199 " 'Jayuya': 0.6, 'Karlukovo': 2.2, 'Lemnos': 1, 'Luoyang': 1, 'Mamula': 1, 'Mora': 1, 'Morgantown': 2.9,\n",
200 " 'Nordkapp': 1.5, 'Nullarbor': 2.2, 'Parowan': 1, 'Puente-Laguna-Garzonkuala-Penyu': 0.4, 'Sofia': 1,\n",
201 " 'Stonington-Island': 1, 'Sukhumi': 1, 'Tambon-Pa-Fa': 1, 'Tubakuba': 1, 'Uzupis': 0.9, 'Zhangye-Shi': 1}"
202 ]
203 },
204 {
205 "cell_type": "code",
206 "execution_count": 5,
207 "metadata": {
208 "collapsed": true
209 },
210 "outputs": [],
211 "source": [
212 "destination_score_exceptions = {'Almaty': 2.0, 'Brorfelde': 0.9, 'Estacada': 0.4, 'Jayuya': 0.6, 'Karlukovo': 2.2, 'Morgantown': 2.9,\n",
213 " 'Nordkapp': 1.5, 'Nullarbor': 2.2, 'Puente-Laguna-Garzonkuala-Penyu': 0.4, 'Uzupis': 0.9}"
214 ]
215 },
216 {
217 "cell_type": "code",
218 "execution_count": 6,
219 "metadata": {},
220 "outputs": [
221 {
222 "data": {
223 "text/plain": [
224 "{'Aalborg': 1.0,\n",
225 " 'Almaty': 2.0,\n",
226 " 'Brorfelde': 0.9,\n",
227 " 'Estacada': 0.4,\n",
228 " 'Geoje-Si': 1.0,\n",
229 " 'Giessenmestia': 1.0,\n",
230 " 'Gorongosa': 1.0,\n",
231 " 'Grimsey-Island': 1.0,\n",
232 " 'Hajnowski': 1.0,\n",
233 " 'Holmegaard': 1.0,\n",
234 " 'Ijsseloog': 1.0,\n",
235 " 'Jayuya': 0.6,\n",
236 " 'Karlukovo': 2.2,\n",
237 " 'Lemnos': 1.0,\n",
238 " 'Luoyang': 1.0,\n",
239 " 'Mamula': 1.0,\n",
240 " 'Mora': 1.0,\n",
241 " 'Morgantown': 2.9,\n",
242 " 'Nordkapp': 1.5,\n",
243 " 'Nullarbor': 2.2,\n",
244 " 'Parowan': 1.0,\n",
245 " 'Puente-Laguna-Garzonkuala-Penyu': 0.4,\n",
246 " 'Sofia': 1.0,\n",
247 " 'Stonington-Island': 1.0,\n",
248 " 'Sukhumi': 1.0,\n",
249 " 'Tambon-Pa-Fa': 1.0,\n",
250 " 'Tubakuba': 1.0,\n",
251 " 'Uzupis': 0.9,\n",
252 " 'Zhangye-Shi': 1.0}"
253 ]
254 },
255 "execution_count": 6,
256 "metadata": {},
257 "output_type": "execute_result"
258 }
259 ],
260 "source": [
261 "destination_scores.update(destination_score_exceptions)\n",
262 "destination_scores"
263 ]
264 },
265 {
266 "cell_type": "code",
267 "execution_count": 7,
268 "metadata": {},
269 "outputs": [
270 {
271 "name": "stdout",
272 "output_type": "stream",
273 "text": [
274 "| Destination | Score |\n",
275 "|-------------|-------|\n",
276 "| Almaty | 2.0 |\n",
277 "| Brorfelde | 0.9 |\n",
278 "| Estacada | 0.4 |\n",
279 "| Jayuya | 0.6 |\n",
280 "| Karlukovo | 2.2 |\n",
281 "| Morgantown | 2.9 |\n",
282 "| Nordkapp | 1.5 |\n",
283 "| Nullarbor | 2.2 |\n",
284 "| Puente-Laguna-Garzonkuala-Penyu | 0.4 |\n",
285 "| Uzupis | 0.9 |\n"
286 ]
287 }
288 ],
289 "source": [
290 "print('| Destination | Score |')\n",
291 "print('|-------------|-------|')\n",
292 "for n in sorted(destination_scores):\n",
293 " if destination_scores[n] != 1:\n",
294 " print('|', n, '|', destination_scores[n], '|')"
295 ]
296 },
297 {
298 "cell_type": "code",
299 "execution_count": 12,
300 "metadata": {
301 "collapsed": true
302 },
303 "outputs": [],
304 "source": [
305 "def make_holiday(name=None):\n",
306 " if not name:\n",
307 " name = random.choice(destination_names)\n",
308 " days = random.choice([3, 7, 7, 7, 10, 14, 14, 14, 14, 21, 21])\n",
309 " price = 0\n",
310 " for _ in range(4):\n",
311 " price += random.randint(100, 500)\n",
312 " hol_id = str(uuid.uuid4())[-random.randint(8, 12):]\n",
313 " return hol_id, price, name, days"
314 ]
315 },
316 {
317 "cell_type": "code",
318 "execution_count": 13,
319 "metadata": {},
320 "outputs": [
321 {
322 "data": {
323 "text/plain": [
324 "('c657491bdd7', 737, 'Ijsseloog', 21)"
325 ]
326 },
327 "execution_count": 13,
328 "metadata": {},
329 "output_type": "execute_result"
330 }
331 ],
332 "source": [
333 "make_holiday()"
334 ]
335 },
336 {
337 "cell_type": "code",
338 "execution_count": 24,
339 "metadata": {},
340 "outputs": [
341 {
342 "data": {
343 "text/plain": [
344 "[('9d25c63364', 1375, 'Aalborg', 14),\n",
345 " ('9eebed9a8c', 1024, 'Nullarbor', 21),\n",
346 " ('1878f1decd0f', 1074, 'Morgantown', 14),\n",
347 " ('8c5701a15090', 1126, 'Estacada', 10),\n",
348 " ('f54356416', 1476, 'Almaty', 14),\n",
349 " ('fd3f630097', 1211, 'Tambon-Pa-Fa', 3),\n",
350 " ('ba1eca1e3c', 1134, 'Lemnos', 14),\n",
351 " ('6e614079e', 983, 'Sofia', 21),\n",
352 " ('723d6cd8b8c', 1226, 'Puente-Laguna-Garzonkuala-Penyu', 7),\n",
353 " ('67d5ba46574', 885, 'Hajnowski', 14),\n",
354 " ('af932c766e', 1756, 'Karlukovo', 3),\n",
355 " ('6803ee6ab68f', 891, 'Mamula', 10),\n",
356 " ('b721ca2c', 1269, 'Stonington-Island', 14),\n",
357 " ('c10ced934a83', 1254, 'Grimsey-Island', 21),\n",
358 " ('13f08b1e45b', 970, 'Uzupis', 21),\n",
359 " ('212729ebcc0', 1100, 'Sukhumi', 14),\n",
360 " ('294407f475f', 1273, 'Ijsseloog', 14),\n",
361 " ('e63140bd9652', 859, 'Giessenmestia', 10),\n",
362 " ('cd815d115', 970, 'Nordkapp', 21),\n",
363 " ('ff301e4dc', 1103, 'Gorongosa', 21),\n",
364 " ('e44ce4502a6', 1326, 'Brorfelde', 14),\n",
365 " ('8631ec6315', 1194, 'Parowan', 14),\n",
366 " ('766fe50f8f3', 1078, 'Tubakuba', 7),\n",
367 " ('6238cc640', 1409, 'Geoje-Si', 3),\n",
368 " ('0ae89c204', 1085, 'Mora', 21),\n",
369 " ('aa221d744', 1157, 'Holmegaard', 14),\n",
370 " ('9f842558a', 941, 'Jayuya', 21),\n",
371 " ('791ed3da', 1159, 'Zhangye-Shi', 10),\n",
372 " ('9ac98764f', 1048, 'Luoyang', 14)]"
373 ]
374 },
375 "execution_count": 24,
376 "metadata": {},
377 "output_type": "execute_result"
378 }
379 ],
380 "source": [
381 "holidays = []\n",
382 "for n in destination_names:\n",
383 " holidays += [make_holiday(n)]\n",
384 "holidays"
385 ]
386 },
387 {
388 "cell_type": "code",
389 "execution_count": 25,
390 "metadata": {
391 "collapsed": true
392 },
393 "outputs": [],
394 "source": [
395 "for _ in range(95):\n",
396 " holidays += [make_holiday()]"
397 ]
398 },
399 {
400 "cell_type": "code",
401 "execution_count": 29,
402 "metadata": {},
403 "outputs": [
404 {
405 "name": "stdout",
406 "output_type": "stream",
407 "text": [
408 "iterating\n"
409 ]
410 },
411 {
412 "data": {
413 "text/plain": [
414 "[('8d178e8fe50', 1310, 'Aalborg', 7),\n",
415 " ('98c040c3', 1375, 'Nullarbor', 14),\n",
416 " ('744efb40a295', 1068, 'Morgantown', 14),\n",
417 " ('08d2936f40', 1175, 'Estacada', 3),\n",
418 " ('91bc0a2d0', 1180, 'Almaty', 14),\n",
419 " ('0e792455b8d', 1007, 'Tambon-Pa-Fa', 14),\n",
420 " ('6454824e86', 1359, 'Lemnos', 7),\n",
421 " ('5daea80f7d2', 1399, 'Sofia', 7),\n",
422 " ('ffcc1079c877', 1579, 'Puente-Laguna-Garzonkuala-Penyu', 14),\n",
423 " ('bc53df7eb', 1168, 'Hajnowski', 14),\n",
424 " ('669c3fe3f', 1038, 'Karlukovo', 7),\n",
425 " ('541bd6119', 1028, 'Mamula', 7),\n",
426 " ('dd23065a18', 1391, 'Stonington-Island', 14),\n",
427 " ('3634c172', 1176, 'Grimsey-Island', 10),\n",
428 " ('4a52d756', 1174, 'Uzupis', 7),\n",
429 " ('6a1a190ed083', 1042, 'Sukhumi', 14),\n",
430 " ('4a264d5f4e', 1262, 'Ijsseloog', 14),\n",
431 " ('9e1d45351', 1292, 'Giessenmestia', 21),\n",
432 " ('b4c9727f3a', 955, 'Nordkapp', 7),\n",
433 " ('894fa3b99c', 704, 'Gorongosa', 7),\n",
434 " ('fafb6875f', 1140, 'Brorfelde', 21),\n",
435 " ('dc8aebebfc2', 946, 'Parowan', 3),\n",
436 " ('094ee9edf9ce', 676, 'Tubakuba', 7),\n",
437 " ('d752d52589', 1148, 'Geoje-Si', 21),\n",
438 " ('6ea4cebc128f', 775, 'Mora', 10),\n",
439 " ('0085ebcc2b2', 1442, 'Holmegaard', 21),\n",
440 " ('48b4a7976bf1', 1133, 'Jayuya', 3),\n",
441 " ('e689ad12', 1405, 'Zhangye-Shi', 21),\n",
442 " ('fad4adaf', 1297, 'Luoyang', 3),\n",
443 " ('6e4ca2fdf', 684, 'Ijsseloog', 3),\n",
444 " ('83377c09f17', 980, 'Sofia', 7),\n",
445 " ('3ca80302270', 1404, 'Luoyang', 7),\n",
446 " ('91e78da67', 1054, 'Nordkapp', 7),\n",
447 " ('ddb13dd26f', 1158, 'Lemnos', 10),\n",
448 " ('865d85be7', 896, 'Ijsseloog', 21),\n",
449 " ('dbfe9d638ef', 1221, 'Nordkapp', 7),\n",
450 " ('698a05914c', 1440, 'Giessenmestia', 14),\n",
451 " ('e11b4c5c', 1075, 'Parowan', 3),\n",
452 " ('9910d5838754', 860, 'Morgantown', 14),\n",
453 " ('3e4d219009', 904, 'Geoje-Si', 7),\n",
454 " ('19ef5c556', 1624, 'Sofia', 14),\n",
455 " ('072a1106d', 1329, 'Lemnos', 14),\n",
456 " ('7bb0a03d18ab', 1673, 'Brorfelde', 21),\n",
457 " ('07cc90dd3', 1209, 'Lemnos', 14),\n",
458 " ('ca9fe765', 1491, 'Grimsey-Island', 14),\n",
459 " ('3100ad053f', 910, 'Tambon-Pa-Fa', 10),\n",
460 " ('7a95be26f65', 944, 'Jayuya', 7),\n",
461 " ('4cffd22dd9b9', 1089, 'Stonington-Island', 14),\n",
462 " ('eac0d3ed07', 1531, 'Brorfelde', 21),\n",
463 " ('d826034e08', 1195, 'Tubakuba', 14),\n",
464 " ('7bd023c3', 1191, 'Holmegaard', 21),\n",
465 " ('ddd7891fb37', 1348, 'Almaty', 7),\n",
466 " ('d3e9b79053c', 1274, 'Aalborg', 21),\n",
467 " ('6106854836f', 748, 'Brorfelde', 14),\n",
468 " ('9c1f692ea', 1061, 'Stonington-Island', 21),\n",
469 " ('bf086837530', 1162, 'Parowan', 14),\n",
470 " ('8b6e8446', 1360, 'Morgantown', 21),\n",
471 " ('1d6a1b08', 927, 'Luoyang', 21),\n",
472 " ('e1d4e033df7', 1057, 'Grimsey-Island', 21),\n",
473 " ('deb36f50', 1761, 'Nordkapp', 14),\n",
474 " ('aef2526d1978', 1422, 'Morgantown', 21),\n",
475 " ('97afbad2bb', 1129, 'Stonington-Island', 21),\n",
476 " ('18952053b', 1049, 'Mamula', 7),\n",
477 " ('43cd83bb01', 1443, 'Giessenmestia', 14),\n",
478 " ('d57afd163', 1140, 'Geoje-Si', 7),\n",
479 " ('d29a0551504e', 1210, 'Zhangye-Shi', 7),\n",
480 " ('182f52c61f', 916, 'Estacada', 10),\n",
481 " ('9aa4a9bbd9f8', 1391, 'Aalborg', 10),\n",
482 " ('d6b5aa1d219e', 1303, 'Aalborg', 14),\n",
483 " ('64f067b7fc', 1392, 'Luoyang', 14),\n",
484 " ('0c33d4e1', 1551, 'Luoyang', 7),\n",
485 " ('cb24efd90', 948, 'Morgantown', 21),\n",
486 " ('328fd2275', 806, 'Aalborg', 21),\n",
487 " ('c81a1fcfb', 931, 'Sukhumi', 21),\n",
488 " ('ccf770ecaa2', 1206, 'Tubakuba', 14),\n",
489 " ('44946ac3d470', 852, 'Karlukovo', 3),\n",
490 " ('fd7278523', 1363, 'Sukhumi', 7),\n",
491 " ('0e9e7473eb', 1023, 'Gorongosa', 14),\n",
492 " ('8f6abf6d', 1580, 'Sukhumi', 14),\n",
493 " ('677046c1f45d', 1213, 'Karlukovo', 10),\n",
494 " ('beaf2d8e35', 947, 'Grimsey-Island', 3),\n",
495 " ('d33d871c', 1150, 'Aalborg', 14),\n",
496 " ('54945eeed430', 1001, 'Nullarbor', 10),\n",
497 " ('911bee88b048', 1218, 'Almaty', 21),\n",
498 " ('062bb5cf', 1178, 'Zhangye-Shi', 14),\n",
499 " ('b73e3ee1b21', 1028, 'Zhangye-Shi', 7),\n",
500 " ('b268e12d1d0b', 984, 'Mora', 7),\n",
501 " ('53b5f150', 1149, 'Jayuya', 10),\n",
502 " ('0aeeffa1a3', 1209, 'Luoyang', 21),\n",
503 " ('901c5848', 1107, 'Sofia', 10),\n",
504 " ('c19a8114d44', 1188, 'Hajnowski', 3),\n",
505 " ('989f0ca8', 930, 'Nordkapp', 21),\n",
506 " ('02d4b258b8a', 1152, 'Estacada', 3),\n",
507 " ('f7db1341c848', 1240, 'Nullarbor', 3),\n",
508 " ('8cb1c9b33b', 1001, 'Almaty', 7),\n",
509 " ('811b8fcf', 1335, 'Morgantown', 10),\n",
510 " ('f4dd99265', 1294, 'Karlukovo', 21),\n",
511 " ('d5821111c6c', 1236, 'Nordkapp', 14),\n",
512 " ('c18ca0a78', 1069, 'Grimsey-Island', 14),\n",
513 " ('c7b043d2', 1327, 'Nullarbor', 7),\n",
514 " ('dcdccf9a55b8', 1574, 'Ijsseloog', 7),\n",
515 " ('646c6f60', 1247, 'Sofia', 10),\n",
516 " ('980e8f3064fc', 976, 'Giessenmestia', 14),\n",
517 " ('0b9cb9e950', 1458, 'Estacada', 7),\n",
518 " ('295b0f07', 997, 'Zhangye-Shi', 21),\n",
519 " ('3da51cf71e', 1864, 'Giessenmestia', 14),\n",
520 " ('4c0c6a48', 1069, 'Sofia', 7),\n",
521 " ('7ed300f23', 1474, 'Luoyang', 21),\n",
522 " ('ca039bc4a1ed', 1216, 'Sofia', 7),\n",
523 " ('07ea553e', 1348, 'Zhangye-Shi', 14),\n",
524 " ('44aadddc', 1245, 'Tubakuba', 14),\n",
525 " ('25c7800fd18', 1582, 'Lemnos', 14),\n",
526 " ('14e6e1034a', 948, 'Nordkapp', 21),\n",
527 " ('eca25db7a', 968, 'Gorongosa', 14),\n",
528 " ('90b158ef', 1350, 'Morgantown', 14),\n",
529 " ('2da4222c8', 1374, 'Geoje-Si', 10),\n",
530 " ('5d85167ed5c', 878, 'Luoyang', 3),\n",
531 " ('b7f4d5b476c', 1755, 'Nullarbor', 14),\n",
532 " ('686e7e91a', 1282, 'Giessenmestia', 10),\n",
533 " ('85f6122bb848', 1296, 'Gorongosa', 14),\n",
534 " ('e2c945275868', 867, 'Zhangye-Shi', 21),\n",
535 " ('17637f07', 1242, 'Jayuya', 7),\n",
536 " ('1cf53c93a', 919, 'Sofia', 7),\n",
537 " ('7b95b6d95', 1525, 'Morgantown', 21)]"
538 ]
539 },
540 "execution_count": 29,
541 "metadata": {},
542 "output_type": "execute_result"
543 }
544 ],
545 "source": [
546 "finished = False\n",
547 "while not finished:\n",
548 " print('iterating')\n",
549 " holidays = []\n",
550 " for n in destination_names:\n",
551 " holidays += [make_holiday(n)]\n",
552 " for _ in range(95):\n",
553 " holidays += [make_holiday()]\n",
554 " finished = (len(set(h[0] for h in holidays)) == len(holidays))\n",
555 "holidays"
556 ]
557 },
558 {
559 "cell_type": "code",
560 "execution_count": 30,
561 "metadata": {
562 "collapsed": true
563 },
564 "outputs": [],
565 "source": [
566 "random.shuffle(holidays)\n",
567 "with open('01-holidays.txt', 'w') as f:\n",
568 " for hid, price, name, days in holidays:\n",
569 " f.write('{} {} {} {}\\n'.format(hid, price, name, days))"
570 ]
571 },
572 {
573 "cell_type": "code",
574 "execution_count": 31,
575 "metadata": {},
576 "outputs": [
577 {
578 "data": {
579 "text/plain": [
580 "[['07ea553e', '1348', 'Zhangye-Shi', '14'],\n",
581 " ['02d4b258b8a', '1152', 'Estacada', '3'],\n",
582 " ['d29a0551504e', '1210', 'Zhangye-Shi', '7']]"
583 ]
584 },
585 "execution_count": 31,
586 "metadata": {},
587 "output_type": "execute_result"
588 }
589 ],
590 "source": [
591 "with open('01-holidays.txt') as f:\n",
592 " hols = [h.split() for h in f.readlines()]\n",
593 "hols[:3]"
594 ]
595 },
596 {
597 "cell_type": "code",
598 "execution_count": 18,
599 "metadata": {
600 "collapsed": true
601 },
602 "outputs": [],
603 "source": [
604 "assert len(set(h[0] for h in hols)) == len(hols)"
605 ]
606 },
607 {
608 "cell_type": "code",
609 "execution_count": 19,
610 "metadata": {},
611 "outputs": [
612 {
613 "data": {
614 "text/plain": [
615 "[('c6efb742d00c', 1010, 'Puente-Laguna-Garzonkuala-Penyu', 7),\n",
616 " ('7c111cbe', 1061, 'Morgantown', 14),\n",
617 " ('6b1006fa49', 1137, 'Sofia', 3),\n",
618 " ('fb330270', 1075, 'Uzupis', 3),\n",
619 " ('acf977ef446f', 1318, 'Mora', 14),\n",
620 " ('02277d8e', 1023, 'Zhangye-Shi', 10),\n",
621 " ('3fa7eb52c', 1515, 'Zhangye-Shi', 14)]"
622 ]
623 },
624 "execution_count": 19,
625 "metadata": {},
626 "output_type": "execute_result"
627 }
628 ],
629 "source": [
630 "example_holidays = []\n",
631 "names = random.sample(destination_score_exceptions.keys(), 2) + random.sample(destination_names, 4)\n",
632 "names += [names[-1]]\n",
633 "example_holidays = [make_holiday(n) for n in names]\n",
634 "example_holidays"
635 ]
636 },
637 {
638 "cell_type": "code",
639 "execution_count": 20,
640 "metadata": {},
641 "outputs": [
642 {
643 "data": {
644 "text/plain": [
645 "[('c6efb742d00c', 1010, 'Puente-Laguna-Garzonkuala-Penyu', 7),\n",
646 " ('3fa7eb52c', 1515, 'Zhangye-Shi', 14),\n",
647 " ('fb330270', 1075, 'Uzupis', 3),\n",
648 " ('7c111cbe', 1061, 'Morgantown', 14),\n",
649 " ('02277d8e', 1023, 'Zhangye-Shi', 10),\n",
650 " ('6b1006fa49', 1137, 'Sofia', 3),\n",
651 " ('acf977ef446f', 1318, 'Mora', 14)]"
652 ]
653 },
654 "execution_count": 20,
655 "metadata": {},
656 "output_type": "execute_result"
657 }
658 ],
659 "source": [
660 "random.shuffle(example_holidays)\n",
661 "example_holidays"
662 ]
663 },
664 {
665 "cell_type": "code",
666 "execution_count": 21,
667 "metadata": {
668 "collapsed": true
669 },
670 "outputs": [],
671 "source": [
672 "example_holidays = [('f2ffe169-7cc5-42e1-9b46-8cdb61bb906d', 769, 'Morgantown', 3),\n",
673 " ('2e6a6d6d-6c08-4021-b99f-05202c898b5f', 1284, 'Morgantown', 21),\n",
674 " ('ab659b71-347d-45dc-9416-34def36ffc7d', 1514, 'Giessenmestia', 21),\n",
675 " ('eafb15a4-1839-4fb5-be9b-d8389018bd07', 1052, 'Estacada', 21),\n",
676 " ('7476b214-8b55-47f6-833e-dfa487c4270a', 782, 'Geoje-Si', 14),\n",
677 " ('bb8d5034-49ce-483d-ab6c-d16caf2584a5', 724, 'Stonington-Island', 14),\n",
678 " ('6138068a-3c16-4f7f-8dc6-a1199608abc5', 1209, 'Nordkapp', 21)]"
679 ]
680 },
681 {
682 "cell_type": "code",
683 "execution_count": 23,
684 "metadata": {},
685 "outputs": [
686 {
687 "name": "stdout",
688 "output_type": "stream",
689 "text": [
690 "f2ffe169-7cc5-42e1-9b46-8cdb61bb906d 769 Morgantown 3\n",
691 "2e6a6d6d-6c08-4021-b99f-05202c898b5f 1284 Morgantown 21\n",
692 "ab659b71-347d-45dc-9416-34def36ffc7d 1514 Giessenmestia 21\n",
693 "eafb15a4-1839-4fb5-be9b-d8389018bd07 1052 Estacada 21\n",
694 "7476b214-8b55-47f6-833e-dfa487c4270a 782 Geoje-Si 14\n",
695 "bb8d5034-49ce-483d-ab6c-d16caf2584a5 724 Stonington-Island 14\n",
696 "6138068a-3c16-4f7f-8dc6-a1199608abc5 1209 Nordkapp 21\n"
697 ]
698 }
699 ],
700 "source": [
701 "for hid, price, name, days in example_holidays:\n",
702 " print('{} {} {} {}'.format(hid, price, name, days))"
703 ]
704 },
705 {
706 "cell_type": "code",
707 "execution_count": null,
708 "metadata": {
709 "collapsed": true
710 },
711 "outputs": [],
712 "source": []
713 }
714 ],
715 "metadata": {
716 "kernelspec": {
717 "display_name": "Python 3",
718 "language": "python",
719 "name": "python3"
720 },
721 "language_info": {
722 "codemirror_mode": {
723 "name": "ipython",
724 "version": 3
725 },
726 "file_extension": ".py",
727 "mimetype": "text/x-python",
728 "name": "python",
729 "nbconvert_exporter": "python",
730 "pygments_lexer": "ipython3",
731 "version": "3.5.2+"
732 }
733 },
734 "nbformat": 4,
735 "nbformat_minor": 2
736 }