Added utopian tree challenge.

This commit is contained in:
Donne Martin
2015-07-02 05:57:29 -04:00
parent 29d920b9b2
commit 0286ca3735
4 changed files with 274 additions and 11 deletions

View File

@@ -4,7 +4,14 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"<small><i>This notebook was prepared by [Donne Martin](http://donnemartin.com). Source and license info is on [GitHub](https://bit.ly/code-notes).</i></small>"
"<small><i>This notebook was prepared by [Donne Martin](http://donnemartin.com). Source and license info is on [GitHub](https://github.com/donnemartin/coding-challenges).</i></small>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Solution Notebook"
]
},
{
@@ -13,10 +20,33 @@
"source": [
"## Problem: Utopian Tree\n",
"\n",
"From HackerRank: https://www.hackerrank.com/challenges/utopian-tree\n",
"See the [HackerRank problem page](https://www.hackerrank.com/challenges/utopian-tree).\n",
"\n",
"* [Constraints](#Constraints)\n",
"* [Test Cases](#Test-Cases)\n",
"* [Algorithm](#Algorithm)\n",
"* [Code](#Code)"
"* [Code](#Code)\n",
"* [Unit Test](#Unit-Test)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Constraints\n",
"\n",
"*Problem statements are sometimes ambiguous. Identifying constraints and stating assumptions can help to ensure you code the intended solution.*\n",
"\n",
"See the [HackerRank problem page](https://www.hackerrank.com/challenges/utopian-tree)."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Test Cases\n",
"\n",
"See the [HackerRank problem page](https://www.hackerrank.com/challenges/utopian-tree)."
]
},
{
@@ -45,7 +75,7 @@
},
{
"cell_type": "code",
"execution_count": null,
"execution_count": 1,
"metadata": {
"collapsed": false
},
@@ -63,14 +93,70 @@
" height *= 2\n",
" else:\n",
" height += 1\n",
" return height\n",
" return height"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Unit Test\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Overwriting test_utopian_tree.py\n"
]
}
],
"source": [
"%%writefile test_utopian_tree.py\n",
"from nose.tools import assert_equal\n",
"\n",
"num_lines = int(raw_input())\n",
"for i in range(0, num_lines):\n",
" cycles = raw_input()\n",
" cycles = int(cycles)\n",
" res = calc_utopian_tree_height(cycles)\n",
" print res"
"\n",
"class TestUtopianTree(object):\n",
"\n",
" def test_utopian_tree(self):\n",
" assert_equal(calc_utopian_tree_height(0), 1)\n",
" assert_equal(calc_utopian_tree_height(1), 2)\n",
" assert_equal(calc_utopian_tree_height(4), 7)\n",
" print('Success: test_utopian_tree')\n",
"\n",
"def main():\n",
" test = TestUtopianTree()\n",
" test.test_utopian_tree()\n",
"\n",
"if __name__ == '__main__':\n",
" main()"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Success: test_utopian_tree\n"
]
}
],
"source": [
"run -i test_utopian_tree.py"
]
}
],