Done puzzle 64
[project-euler.git] / euler26.ipynb
1 {
2 "cells": [
3 {
4 "cell_type": "code",
5 "execution_count": 2,
6 "metadata": {
7 "collapsed": false
8 },
9 "outputs": [
10 {
11 "data": {
12 "text/plain": [
13 "true"
14 ]
15 },
16 "execution_count": 2,
17 "metadata": {},
18 "output_type": "execute_result"
19 }
20 ],
21 "source": [
22 "require \"awesome_print\""
23 ]
24 },
25 {
26 "cell_type": "code",
27 "execution_count": 91,
28 "metadata": {
29 "collapsed": false
30 },
31 "outputs": [
32 {
33 "data": {
34 "text/plain": [
35 ":division"
36 ]
37 },
38 "execution_count": 91,
39 "metadata": {},
40 "output_type": "execute_result"
41 }
42 ],
43 "source": [
44 "def division(n, debug: false)\n",
45 " dividend = 10\n",
46 " divisor = n\n",
47 " quotient = \"0.\"\n",
48 " trail = []\n",
49 " while dividend != 0 && !(trail.include?(dividend))\n",
50 " q, r = dividend.divmod(divisor)\n",
51 " puts(\"#{dividend} #{divisor} #{q} #{r} #{!(trail.include?(dividend))} #{trail}\") if debug\n",
52 " if q == 0\n",
53 " dividend *= 10\n",
54 " quotient += \"0\"\n",
55 " trail += [0]\n",
56 " else\n",
57 " trail += [dividend]\n",
58 " quotient += q.to_s\n",
59 " dividend = r * 10\n",
60 " end\n",
61 " end\n",
62 " if dividend != 0\n",
63 " cycle_length = trail.length - trail.rindex(dividend)\n",
64 " else\n",
65 " cycle_length = 0\n",
66 " end\n",
67 " # return quotient, cycle_length, trail + [dividend]\n",
68 " cycle_length\n",
69 "end"
70 ]
71 },
72 {
73 "cell_type": "code",
74 "execution_count": 7,
75 "metadata": {
76 "collapsed": false
77 },
78 "outputs": [
79 {
80 "data": {
81 "text/plain": [
82 "[0, 1]"
83 ]
84 },
85 "execution_count": 7,
86 "metadata": {},
87 "output_type": "execute_result"
88 }
89 ],
90 "source": [
91 "q, r = 1.divmod(8)"
92 ]
93 },
94 {
95 "cell_type": "code",
96 "execution_count": 8,
97 "metadata": {
98 "collapsed": false
99 },
100 "outputs": [
101 {
102 "data": {
103 "text/plain": [
104 "[1, 2]"
105 ]
106 },
107 "execution_count": 8,
108 "metadata": {},
109 "output_type": "execute_result"
110 }
111 ],
112 "source": [
113 "q, r = 10.divmod(8)"
114 ]
115 },
116 {
117 "cell_type": "code",
118 "execution_count": 9,
119 "metadata": {
120 "collapsed": false
121 },
122 "outputs": [
123 {
124 "data": {
125 "text/plain": [
126 "[2, 4]"
127 ]
128 },
129 "execution_count": 9,
130 "metadata": {},
131 "output_type": "execute_result"
132 }
133 ],
134 "source": [
135 "q, r = 20.divmod(8)"
136 ]
137 },
138 {
139 "cell_type": "code",
140 "execution_count": 10,
141 "metadata": {
142 "collapsed": false
143 },
144 "outputs": [
145 {
146 "data": {
147 "text/plain": [
148 "[5, 0]"
149 ]
150 },
151 "execution_count": 10,
152 "metadata": {},
153 "output_type": "execute_result"
154 }
155 ],
156 "source": [
157 "q, r = 40.divmod(8)"
158 ]
159 },
160 {
161 "cell_type": "code",
162 "execution_count": 92,
163 "metadata": {
164 "collapsed": false
165 },
166 "outputs": [
167 {
168 "data": {
169 "text/plain": [
170 "0"
171 ]
172 },
173 "execution_count": 92,
174 "metadata": {},
175 "output_type": "execute_result"
176 }
177 ],
178 "source": [
179 "division(8)"
180 ]
181 },
182 {
183 "cell_type": "code",
184 "execution_count": 93,
185 "metadata": {
186 "collapsed": false
187 },
188 "outputs": [
189 {
190 "data": {
191 "text/plain": [
192 "6"
193 ]
194 },
195 "execution_count": 93,
196 "metadata": {},
197 "output_type": "execute_result"
198 }
199 ],
200 "source": [
201 "division(7)"
202 ]
203 },
204 {
205 "cell_type": "code",
206 "execution_count": 94,
207 "metadata": {
208 "collapsed": false
209 },
210 "outputs": [
211 {
212 "data": {
213 "text/plain": [
214 "1"
215 ]
216 },
217 "execution_count": 94,
218 "metadata": {},
219 "output_type": "execute_result"
220 }
221 ],
222 "source": [
223 "division(3)"
224 ]
225 },
226 {
227 "cell_type": "code",
228 "execution_count": 95,
229 "metadata": {
230 "collapsed": false
231 },
232 "outputs": [
233 {
234 "name": "stdout",
235 "output_type": "stream",
236 "text": [
237 "2: 0\n",
238 "3: 1\n",
239 "4: 0\n",
240 "5: 0\n",
241 "6: 1\n",
242 "7: 6\n",
243 "8: 0\n",
244 "9: 1\n",
245 "10: 0\n",
246 "11: 2\n",
247 "12: 1\n",
248 "13: 6\n",
249 "14: 6\n",
250 "15: 1\n",
251 "16: 0\n",
252 "17: 16\n",
253 "18: 1\n",
254 "19: 18\n",
255 "20: 0\n",
256 "21: 6\n",
257 "22: 2\n",
258 "23: 22\n",
259 "24: 1\n",
260 "25: 0\n",
261 "26: 6\n",
262 "27: 3\n",
263 "28: 6\n",
264 "29: 28\n",
265 "30: 1\n",
266 "31: 15\n",
267 "32: 0\n",
268 "33: 2\n",
269 "34: 16\n",
270 "35: 6\n",
271 "36: 1\n",
272 "37: 3\n",
273 "38: 18\n",
274 "39: 6\n",
275 "40: 0\n",
276 "41: 5\n",
277 "42: 6\n",
278 "43: 21\n",
279 "44: 2\n",
280 "45: 1\n",
281 "46: 22\n"
282 ]
283 },
284 {
285 "data": {
286 "text/plain": [
287 "2..46"
288 ]
289 },
290 "execution_count": 95,
291 "metadata": {},
292 "output_type": "execute_result"
293 }
294 ],
295 "source": [
296 "(2..46).each do |i| puts(\"#{i}: #{division(i)}\") end"
297 ]
298 },
299 {
300 "cell_type": "code",
301 "execution_count": 99,
302 "metadata": {
303 "collapsed": false
304 },
305 "outputs": [
306 {
307 "data": {
308 "text/plain": [
309 "983"
310 ]
311 },
312 "execution_count": 99,
313 "metadata": {},
314 "output_type": "execute_result"
315 }
316 ],
317 "source": [
318 "(1..1000).max_by {|i| division(i)}"
319 ]
320 },
321 {
322 "cell_type": "code",
323 "execution_count": 97,
324 "metadata": {
325 "collapsed": false
326 },
327 "outputs": [
328 {
329 "data": {
330 "text/plain": [
331 "0"
332 ]
333 },
334 "execution_count": 97,
335 "metadata": {},
336 "output_type": "execute_result"
337 }
338 ],
339 "source": [
340 "division(1)"
341 ]
342 },
343 {
344 "cell_type": "code",
345 "execution_count": null,
346 "metadata": {
347 "collapsed": true
348 },
349 "outputs": [],
350 "source": []
351 }
352 ],
353 "metadata": {
354 "kernelspec": {
355 "display_name": "Ruby 2.4.0",
356 "language": "ruby",
357 "name": "ruby"
358 },
359 "language_info": {
360 "file_extension": ".rb",
361 "mimetype": "application/x-ruby",
362 "name": "ruby",
363 "version": "2.4.0"
364 }
365 },
366 "nbformat": 4,
367 "nbformat_minor": 0
368 }