{ "cells": [ { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [], "source": [ "class Integer\n", " def factorial\n", " (1..self).inject(:*) || 1\n", " end\n", " alias :! :factorial\n", "end" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ ":to_digits" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "class Numeric\n", " def to_digits\n", " self.to_s.split('').map {|d| d.to_i}\n", " end\n", "end " ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "120" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "5.factorial" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "362880" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "9.factorial" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "362880" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "9.!" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1, 362880, 10, false\n", "2, 725760, 100, false\n", "3, 1088640, 1000, false\n", "4, 1451520, 10000, false\n", "5, 1814400, 100000, false\n", "6, 2177280, 1000000, false\n", "7, 2540160, 10000000, true\n", "8, 2903040, 100000000, true\n", "9, 3265920, 1000000000, true\n", "10, 3628800, 10000000000, true\n" ] }, { "data": { "text/plain": [ "1..10" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(1..10).each do |i|\n", " puts \"#{i}, #{i * 9.!}, #{10 ** i}, #{i * 9.! < 10 ** i}\"\n", "end" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[3, 4, 5, 6, 7, 8, 9, 10]" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(3..10).to_a" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ ":factorial_sum?" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def factorial_sum?(n)\n", " n.to_digits.map {|d| d.!}.reduce(:+) == n\n", "end" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "145" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "145.to_digits.map {|d| d.!}.reduce(:+)" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "745" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "146.to_digits.map {|d| d.!}.reduce(:+)" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "120" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "5.!" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "720" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "6.!" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[145]" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(3..1000).select {|n| factorial_sum? n}.to_a" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[145, 40585]" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(3..10**7).select {|n| factorial_sum? n}.to_a" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "40730" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(3..10**7).select {|n| factorial_sum? n}.sum" ] }, { "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": 0 }