    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "## Problem: Determine if a string s1 is a rotation of another string s2.  Also write a function is_substring which you can only call once to determine whether a rotation occurs\n",
      "\n",
      "* [Constraints and Assumptions](#Constraints-and-Assumptions)\n",
      "* [Test Cases](#Test-Cases)\n",
      "* [Algorithm](#Algorithm)\n",
      "* [Code](#Code)\n",
 
</s> remove     "* Any strings that differ in size results in False\n",
    "* NULL, 'foo' -> False (any NULL results in False)\n",
 </s> add     "* Any strings that differ in size -> False\n",
    "* None, 'foo' -> False (any None results in False)\n", </s> remove     "def is_substring(s1, s2):\n",
 </s> add     "def is_substring(s1, s2): \n", </s> remove     "    test = Test()\n",
    "    test.test_is_rotation(is_rotation)"
 </s> add     "    main()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Success: test_rotation\n"
     ]
    }
   ],
   "source": [
    "%run -i test_rotation.py" </s> remove       "Success: test_is_rotation\n"
 </s> add       "Overwriting test_rotation.py\n"
    "## Problem: Determine if a string s1 is a rotation of another string s2, by calling (only once) a function is_substring\n",
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
    "## Problem: Determine if a string s1 is a rotation of another string s2, by calling (only once) a function is_substring\n",
      "\n",
      "* [Constraints and Assumptions](#Constraints-and-Assumptions)\n",
      "* [Test Cases](#Test-Cases)\n",
      "* [Algorithm](#Algorithm)\n",
      "* [Code](#Code)\n",
keep keep keep keep replace keep keep keep keep keep
 Added rotation challenge and solution. 
arrays_strings/rotation/rotation_solution.ipynb