Removing files from data analysis directory
[ou-summer-of-code-2017.git] / 02-lifts / lifts-generator.ipynb
1 {
2 "cells": [
3 {
4 "cell_type": "code",
5 "execution_count": 5,
6 "metadata": {
7 "collapsed": true
8 },
9 "outputs": [],
10 "source": [
11 "import random"
12 ]
13 },
14 {
15 "cell_type": "code",
16 "execution_count": 4,
17 "metadata": {},
18 "outputs": [
19 {
20 "data": {
21 "text/plain": [
22 "['^', '^', '^', 'v', 'v', 'v', '=']"
23 ]
24 },
25 "execution_count": 4,
26 "metadata": {},
27 "output_type": "execute_result"
28 }
29 ],
30 "source": [
31 "instructions = list('^^^vvv=')\n",
32 "instructions"
33 ]
34 },
35 {
36 "cell_type": "code",
37 "execution_count": 59,
38 "metadata": {
39 "collapsed": true
40 },
41 "outputs": [],
42 "source": [
43 "def build_sequence(instructions, length=100):\n",
44 " non_exits = [i for i in instructions if i != '=']\n",
45 " seq = [random.choice(non_exits)]\n",
46 " last_was_exit = False\n",
47 " for _ in range(length-2):\n",
48 " if last_was_exit:\n",
49 " seq.append(random.choice(non_exits))\n",
50 " last_was_exit = False\n",
51 " else:\n",
52 " i = random.choice(instructions)\n",
53 " last_was_exit = (i == '=')\n",
54 " seq.append(i)\n",
55 " seq.append(instructions[-1])\n",
56 " return ''.join(seq)"
57 ]
58 },
59 {
60 "cell_type": "code",
61 "execution_count": 62,
62 "metadata": {},
63 "outputs": [
64 {
65 "data": {
66 "text/plain": [
67 "'v=^^^vv^=='"
68 ]
69 },
70 "execution_count": 62,
71 "metadata": {},
72 "output_type": "execute_result"
73 }
74 ],
75 "source": [
76 "build_sequence(instructions, 10)"
77 ]
78 },
79 {
80 "cell_type": "code",
81 "execution_count": 66,
82 "metadata": {},
83 "outputs": [
84 {
85 "data": {
86 "text/plain": [
87 "'vvv^v^^^^v^v=^vvv=v^vvv^=v^^v=v^^^^vv^=v^vvv^v^^vv^^vvvvv^^vv^v=^v=v^^^vvv^v^vv=v^vv^^=^vv^^vvvv=^^='"
88 ]
89 },
90 "execution_count": 66,
91 "metadata": {},
92 "output_type": "execute_result"
93 }
94 ],
95 "source": [
96 "seq = build_sequence(instructions)\n",
97 "seq"
98 ]
99 },
100 {
101 "cell_type": "code",
102 "execution_count": 15,
103 "metadata": {
104 "collapsed": true
105 },
106 "outputs": [],
107 "source": [
108 "def value(instr):\n",
109 " if instr == '^':\n",
110 " return 1\n",
111 " elif instr == 'v':\n",
112 " return -1\n",
113 " else:\n",
114 " return 0 "
115 ]
116 },
117 {
118 "cell_type": "code",
119 "execution_count": 16,
120 "metadata": {
121 "collapsed": true
122 },
123 "outputs": [],
124 "source": [
125 "def final(sequence):\n",
126 " return sum(value(i) for i in sequence)"
127 ]
128 },
129 {
130 "cell_type": "code",
131 "execution_count": 22,
132 "metadata": {},
133 "outputs": [
134 {
135 "data": {
136 "text/plain": [
137 "-1"
138 ]
139 },
140 "execution_count": 22,
141 "metadata": {},
142 "output_type": "execute_result"
143 }
144 ],
145 "source": [
146 "final(seq)"
147 ]
148 },
149 {
150 "cell_type": "code",
151 "execution_count": 23,
152 "metadata": {
153 "collapsed": true
154 },
155 "outputs": [],
156 "source": [
157 "def running(sequence):\n",
158 " current = 0\n",
159 " currents = []\n",
160 " exits = []\n",
161 " for i in sequence:\n",
162 " if value(i) == 0:\n",
163 " exits.append(current)\n",
164 " else:\n",
165 " current += value(i)\n",
166 " currents.append(current)\n",
167 " return currents, exits"
168 ]
169 },
170 {
171 "cell_type": "code",
172 "execution_count": 24,
173 "metadata": {
174 "scrolled": true
175 },
176 "outputs": [
177 {
178 "data": {
179 "text/plain": [
180 "([1,\n",
181 " 2,\n",
182 " 3,\n",
183 " 2,\n",
184 " 3,\n",
185 " 4,\n",
186 " 5,\n",
187 " 4,\n",
188 " 5,\n",
189 " 4,\n",
190 " 5,\n",
191 " 4,\n",
192 " 3,\n",
193 " 4,\n",
194 " 3,\n",
195 " 2,\n",
196 " 3,\n",
197 " 4,\n",
198 " 3,\n",
199 " 2,\n",
200 " 3,\n",
201 " 4,\n",
202 " 5,\n",
203 " 6,\n",
204 " 5,\n",
205 " 4,\n",
206 " 3,\n",
207 " 4,\n",
208 " 3,\n",
209 " 2,\n",
210 " 1,\n",
211 " 2,\n",
212 " 3,\n",
213 " 4,\n",
214 " 3,\n",
215 " 4,\n",
216 " 3,\n",
217 " 2,\n",
218 " 1,\n",
219 " 2,\n",
220 " 1,\n",
221 " 2,\n",
222 " 3,\n",
223 " 2,\n",
224 " 3,\n",
225 " 4,\n",
226 " 3,\n",
227 " 2,\n",
228 " 1,\n",
229 " 0,\n",
230 " -1,\n",
231 " -2,\n",
232 " -3,\n",
233 " -4,\n",
234 " -3,\n",
235 " -2,\n",
236 " -1,\n",
237 " -2,\n",
238 " -3,\n",
239 " -4,\n",
240 " -3,\n",
241 " -2,\n",
242 " -1,\n",
243 " -2,\n",
244 " -3,\n",
245 " -2,\n",
246 " -3,\n",
247 " -4,\n",
248 " -5,\n",
249 " -4,\n",
250 " -3,\n",
251 " -4,\n",
252 " -5,\n",
253 " -4,\n",
254 " -5,\n",
255 " -4,\n",
256 " -3,\n",
257 " -2,\n",
258 " -1,\n",
259 " 0,\n",
260 " -1,\n",
261 " 0,\n",
262 " -1,\n",
263 " -2,\n",
264 " -3,\n",
265 " -2,\n",
266 " -1,\n",
267 " 0,\n",
268 " -1],\n",
269 " [5, 4, 2, 1, -2, -2, -3, -5, -5, -1, -1])"
270 ]
271 },
272 "execution_count": 24,
273 "metadata": {},
274 "output_type": "execute_result"
275 }
276 ],
277 "source": [
278 "running(seq)"
279 ]
280 },
281 {
282 "cell_type": "code",
283 "execution_count": 33,
284 "metadata": {},
285 "outputs": [
286 {
287 "name": "stdout",
288 "output_type": "stream",
289 "text": [
290 "^vvv^^v^=vv=v^v=^vvvv^=^vv^vvv^=v=v^^v=^^v=v^=v^^vv^^==v^^v^v=vvv^^^^=vvv^^v=v=vv^^^^v^v=vv^v^=^^^^v=v=v^^^vv^vv^v^^vvv^v==^vv=^vv^vv^^vv=^=v=vv^vv^=v^^^^vvvvv=vv^^^v=^=^=vv^v=v^^^^vv=^^^^vv^^v=vv^^v^^v^vv^^==^v^=^^^^v=^v^v^v=vv^=vvv^v=^v^^^^vv^v^v^^v^v^v^^^vv^^v^^v=v^v^v^v^^v^vvvv^=^v=^^vvvv^^vv^vv^v=^v=^vvvvv^vv=vv^=v^=^^^^^=^vvvvv^=^v^=^^^v^^v^=v^^^vv^v^^vv^=^v^^^vvv=^v^^v^v^^vvvvv^vvv=^v=^^vv^^v^^vvvv=v^=v^vvvvvvv=^==^vv=v=vv=^^^^=vv^vvv^^v^vv^^^v^^v=v^^=^^^^vv^v==v^v^^v^^v^=^^^==v^^^vv^==vvvvvvv^=vv^=vv^^=v^^vvv^^^vvv^^vv=v=^^vvv^^^^v=^^vv^v^^=^v=v=^vv^^vvv^^^^vv^=v^^v^^v^v=v^^^^vvv^^=vv^=vv^^v^v^^v=v^^vv^=^v^^^=v^^v=v^vv^=^v^^v=vv^=^v^^^v^=v==v^vvvvv^vvvv^^v=^^vv^^v^^^^^=^v=^v^=^vv^v=^^^vvvv^^vv^^==^==^^^^v=v^vvvv=^v^=^vv^^v^^vvvvv=^v^^==^=^^v==v=vv^vv^^vvv=^vvvv=v=^vv=^v^^vv==vvv^^^=vv^^^vv=v=^vvv^^v^v=v^^v=^=v^vvvvvvvv===^=^vvv^vv^^vvvv^=^v^^^=^^^vvvvv^==v^^v=vvv^v=vv^vv^vv=vvv^vv^=^^^v^vv^vvv=v^vv^v^vvvvvv^^v^^^^vv^v=^=^v=v^^vvv^vv^^=^v^vv^v^=v=v^v^vvv=^^=^vv^vvv==^^v^^vvv^v^=\n",
291 "Final: -48\n",
292 "Highest 1, lowest -49, final -48.\n",
293 "Highest exit 0, lowest exit -49.\n"
294 ]
295 }
296 ],
297 "source": [
298 "seq = build_sequence(instructions, 1000)\n",
299 "print(seq)\n",
300 "print('Final: ', final(seq))\n",
301 "fs, es = running(seq)\n",
302 "print('Highest {}, lowest {}, final {}.'.format(max(fs), min(fs), fs[-1]))\n",
303 "print('Highest exit {}, lowest exit {}.'.format(max(es), min(es)))"
304 ]
305 },
306 {
307 "cell_type": "code",
308 "execution_count": 67,
309 "metadata": {},
310 "outputs": [
311 {
312 "name": "stdout",
313 "output_type": "stream",
314 "text": [
315 "Highest 216, lowest -6, final 209.\n",
316 "Highest exit 215, lowest exit -5.\n"
317 ]
318 }
319 ],
320 "source": [
321 "valid_seq = False\n",
322 "while not valid_seq:\n",
323 " seq = build_sequence(instructions, 10000)\n",
324 " fs, es = running(seq)\n",
325 " if min(fs) > -10 and fs[-1] > 0:\n",
326 " valid_seq = True\n",
327 "\n",
328 "open('02-lifts.txt', 'w').write(seq)\n",
329 "print('Highest {}, lowest {}, final {}.'.format(max(fs), min(fs), fs[-1]))\n",
330 "print('Highest exit {}, lowest exit {}.'.format(max(es), min(es)))"
331 ]
332 },
333 {
334 "cell_type": "code",
335 "execution_count": 80,
336 "metadata": {},
337 "outputs": [
338 {
339 "data": {
340 "text/plain": [
341 "('v^^^^^v=v=', ([-1, 0, 1, 2, 3, 4, 3, 2], [3, 2]))"
342 ]
343 },
344 "execution_count": 80,
345 "metadata": {},
346 "output_type": "execute_result"
347 }
348 ],
349 "source": [
350 "small_seq = build_sequence(instructions, 10)\n",
351 "small_seq, running(small_seq)"
352 ]
353 },
354 {
355 "cell_type": "code",
356 "execution_count": null,
357 "metadata": {
358 "collapsed": true
359 },
360 "outputs": [],
361 "source": []
362 }
363 ],
364 "metadata": {
365 "kernelspec": {
366 "display_name": "Python 3",
367 "language": "python",
368 "name": "python3"
369 },
370 "language_info": {
371 "codemirror_mode": {
372 "name": "ipython",
373 "version": 3
374 },
375 "file_extension": ".py",
376 "mimetype": "text/x-python",
377 "name": "python",
378 "nbconvert_exporter": "python",
379 "pygments_lexer": "ipython3",
380 "version": "3.6.1"
381 }
382 },
383 "nbformat": 4,
384 "nbformat_minor": 2
385 }