4 "cell_type": "markdown",
10 "37 36 35 34 33 32 31\n",
11 "38 17 16 15 14 13 30\n",
12 "39 18 5 4 3 12 29\n",
13 "40 19 6 1 2 11 28\n",
14 "41 20 7 8 9 10 27\n",
15 "42 21 22 23 24 25 26\n",
16 "43 44 45 46 47 48 49\n",
19 "Down-right goes as 1, 9, 25, 49: (2i+1)^2, starting from i=0\n",
21 "Down left goes as 1 7 21 43: (2i+1)^2 - 2i\n",
23 "Up left goes 1 5 17 37: (2i + 1)^2 - 4i\n",
25 "Up right goes 1 3 13 31: (2i + 1)^2 - 6i\n"
41 "output_type": "execute_result"
45 "require_relative 'primes'\n",
46 "primes = Primes.instance\n",
47 "# primes.load_primes \"primes_2000000.txt\"\n",
64 "output_type": "execute_result"
68 "(0...5).map {|i| (2 * i + 1) ** 2}"
84 "output_type": "execute_result"
88 "(0...5).map {|i| (2 * i + 1) ** 2 - 2 * i}"
102 "execution_count": 4,
104 "output_type": "execute_result"
108 "(0...5).map {|i| (2 * i + 1) ** 2 - 4 * i}"
113 "execution_count": 5,
122 "execution_count": 5,
124 "output_type": "execute_result"
128 "(0...5).map {|i| (2 * i + 1) ** 2 - 6 * i}"
133 "execution_count": 6,
142 "execution_count": 6,
144 "output_type": "execute_result"
148 "def diagonals(n)\n",
149 " [1] + (1...n).flat_map {|i| [\n",
150 " (2 * i + 1) ** 2,\n",
151 " (2 * i + 1) ** 2 - 2 * i,\n",
152 " (2 * i + 1) ** 2 - 4 * i,\n",
153 " (2 * i + 1) ** 2 - 6 * i\n",
160 "execution_count": 7,
169 "execution_count": 7,
171 "output_type": "execute_result"
175 "def diagonal_tips(n)\n",
176 " [# (2 * n + 1) ** 2,\n",
177 " (2 * n + 1) ** 2 - 2 * n,\n",
178 " (2 * n + 1) ** 2 - 4 * n,\n",
179 " (2 * n + 1) ** 2 - 6 * n]\n",
185 "execution_count": 8,
191 "[1, 9, 7, 5, 3, 25, 21, 17, 13]"
194 "execution_count": 8,
196 "output_type": "execute_result"
205 "execution_count": 9,
214 "execution_count": 9,
216 "output_type": "execute_result"
220 "diagonals(3).length"
225 "execution_count": 10,
234 "execution_count": 10,
236 "output_type": "execute_result"
240 "diagonals(3).select {|n| n.prime?}"
245 "execution_count": 11,
254 "execution_count": 11,
256 "output_type": "execute_result"
261 "tip_primes = diagonal_tips(l).select {|n| primes.is_prime? n}\n",
262 "prime_count = tip_primes.length\n",
263 "while prime_count * 10 > (4 * l + 1)\n",
264 " # puts l if l % 500 == 0\n",
266 " tip_primes = diagonal_tips(l).select {|n| primes.is_prime? n}\n",
267 " prime_count += tip_primes.length\n",
269 "l * 2 + 1 # side length"
274 "execution_count": null,
284 "display_name": "Ruby 2.4.0",
289 "file_extension": ".rb",
290 "mimetype": "application/x-ruby",