{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Diagonals\n", "\n", "```\n", "37 36 35 34 33 32 31\n", "38 17 16 15 14 13 30\n", "39 18 5 4 3 12 29\n", "40 19 6 1 2 11 28\n", "41 20 7 8 9 10 27\n", "42 21 22 23 24 25 26\n", "43 44 45 46 47 48 49\n", "```\n", "\n", "Down-right goes as 1, 9, 25, 49: (2i+1)^2, starting from i=0\n", "\n", "Down left goes as 1 7 21 43: (2i+1)^2 - 2i\n", "\n", "Up left goes 1 5 17 37: (2i + 1)^2 - 4i\n", "\n", "Up right goes 1 3 13 31: (2i + 1)^2 - 6i\n" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "9973" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "require_relative 'primes'\n", "primes = Primes.instance\n", "# primes.load_primes \"primes_2000000.txt\"\n", "primes.primes.last" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[1, 9, 25, 49, 81]" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(0...5).map {|i| (2 * i + 1) ** 2}" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[1, 7, 21, 43, 73]" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(0...5).map {|i| (2 * i + 1) ** 2 - 2 * i}" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[1, 5, 17, 37, 65]" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(0...5).map {|i| (2 * i + 1) ** 2 - 4 * i}" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[1, 3, 13, 31, 57]" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(0...5).map {|i| (2 * i + 1) ** 2 - 6 * i}" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ ":diagonals" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def diagonals(n)\n", " [1] + (1...n).flat_map {|i| [\n", " (2 * i + 1) ** 2,\n", " (2 * i + 1) ** 2 - 2 * i,\n", " (2 * i + 1) ** 2 - 4 * i,\n", " (2 * i + 1) ** 2 - 6 * i\n", " ]}\n", "end" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ ":diagonal_tips" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def diagonal_tips(n)\n", " [# (2 * n + 1) ** 2,\n", " (2 * n + 1) ** 2 - 2 * n,\n", " (2 * n + 1) ** 2 - 4 * n,\n", " (2 * n + 1) ** 2 - 6 * n]\n", "end" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[1, 9, 7, 5, 3, 25, 21, 17, 13]" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "diagonals(3)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "9" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "diagonals(3).length" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[7, 5, 3, 17, 13]" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "diagonals(3).select {|n| n.prime?}" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "26241" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "l = 1\n", "tip_primes = diagonal_tips(l).select {|n| primes.is_prime? n}\n", "prime_count = tip_primes.length\n", "while prime_count * 10 > (4 * l + 1)\n", " # puts l if l % 500 == 0\n", " l += 1\n", " tip_primes = diagonal_tips(l).select {|n| primes.is_prime? n}\n", " prime_count += tip_primes.length\n", "end\n", "l * 2 + 1 # side length" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Ruby 2.4.0", "language": "ruby", "name": "ruby" }, "language_info": { "file_extension": ".rb", "mimetype": "application/x-ruby", "name": "ruby", "version": "2.4.0" } }, "nbformat": 4, "nbformat_minor": 2 }