{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "true"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "require \"awesome_print\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 91,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       ":division"
      ]
     },
     "execution_count": 91,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "def division(n, debug: false)\n",
    "  dividend = 10\n",
    "  divisor = n\n",
    "  quotient = \"0.\"\n",
    "  trail = []\n",
    "  while dividend != 0 && !(trail.include?(dividend))\n",
    "    q, r = dividend.divmod(divisor)\n",
    "    puts(\"#{dividend} #{divisor} #{q} #{r} #{!(trail.include?(dividend))} #{trail}\") if debug\n",
    "    if q == 0\n",
    "      dividend *= 10\n",
    "      quotient += \"0\"\n",
    "      trail += [0]\n",
    "    else\n",
    "      trail += [dividend]\n",
    "      quotient += q.to_s\n",
    "      dividend = r * 10\n",
    "    end\n",
    "  end\n",
    "  if dividend != 0\n",
    "    cycle_length = trail.length - trail.rindex(dividend)\n",
    "  else\n",
    "    cycle_length = 0\n",
    "  end\n",
    "  # return quotient, cycle_length, trail + [dividend]\n",
    "  cycle_length\n",
    "end"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[0, 1]"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "q, r = 1.divmod(8)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[1, 2]"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "q, r = 10.divmod(8)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[2, 4]"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "q, r = 20.divmod(8)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[5, 0]"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "q, r = 40.divmod(8)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 92,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0"
      ]
     },
     "execution_count": 92,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "division(8)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 93,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "6"
      ]
     },
     "execution_count": 93,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "division(7)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 94,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1"
      ]
     },
     "execution_count": 94,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "division(3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 95,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2: 0\n",
      "3: 1\n",
      "4: 0\n",
      "5: 0\n",
      "6: 1\n",
      "7: 6\n",
      "8: 0\n",
      "9: 1\n",
      "10: 0\n",
      "11: 2\n",
      "12: 1\n",
      "13: 6\n",
      "14: 6\n",
      "15: 1\n",
      "16: 0\n",
      "17: 16\n",
      "18: 1\n",
      "19: 18\n",
      "20: 0\n",
      "21: 6\n",
      "22: 2\n",
      "23: 22\n",
      "24: 1\n",
      "25: 0\n",
      "26: 6\n",
      "27: 3\n",
      "28: 6\n",
      "29: 28\n",
      "30: 1\n",
      "31: 15\n",
      "32: 0\n",
      "33: 2\n",
      "34: 16\n",
      "35: 6\n",
      "36: 1\n",
      "37: 3\n",
      "38: 18\n",
      "39: 6\n",
      "40: 0\n",
      "41: 5\n",
      "42: 6\n",
      "43: 21\n",
      "44: 2\n",
      "45: 1\n",
      "46: 22\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "2..46"
      ]
     },
     "execution_count": 95,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "(2..46).each do |i| puts(\"#{i}: #{division(i)}\") end"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 99,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "983"
      ]
     },
     "execution_count": 99,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "(1..1000).max_by {|i| division(i)}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 97,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0"
      ]
     },
     "execution_count": 97,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "division(1)"
   ]
  },
  {
   "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
}