mirror of
https://github.com/donnemartin/interactive-coding-challenges
synced 2026-01-11 20:08:04 +00:00
@@ -2,6 +2,7 @@ from enum import Enum # Python 2 users: Run pip install enum34
|
||||
|
||||
|
||||
class State(Enum):
|
||||
|
||||
unvisited = 0
|
||||
visiting = 1
|
||||
visited = 2
|
||||
@@ -64,4 +65,4 @@ class Graph:
|
||||
if src_key is None or dst_key is None:
|
||||
raise TypeError('key cannot be None')
|
||||
self.add_edge(src_key, dst_key, weight)
|
||||
self.add_edge(dst_key, src_key, weight)
|
||||
self.add_edge(dst_key, src_key, weight)
|
||||
|
||||
@@ -175,10 +175,10 @@
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# %load test_graph.py\n",
|
||||
"from nose.tools import assert_equal\n",
|
||||
"import unittest\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"class TestGraph(object):\n",
|
||||
"class TestGraph(unittest.TestCase):\n",
|
||||
"\n",
|
||||
" def create_graph(self):\n",
|
||||
" graph = Graph()\n",
|
||||
@@ -198,29 +198,29 @@
|
||||
" graph.add_edge(5, 4, weight=8)\n",
|
||||
" graph.add_edge(5, 2, weight=9)\n",
|
||||
"\n",
|
||||
" assert_equal(graph.nodes[0].adj_weights[graph.nodes[1].key], 5)\n",
|
||||
" assert_equal(graph.nodes[0].adj_weights[graph.nodes[5].key], 2)\n",
|
||||
" assert_equal(graph.nodes[1].adj_weights[graph.nodes[2].key], 3)\n",
|
||||
" assert_equal(graph.nodes[2].adj_weights[graph.nodes[3].key], 4)\n",
|
||||
" assert_equal(graph.nodes[3].adj_weights[graph.nodes[4].key], 5)\n",
|
||||
" assert_equal(graph.nodes[3].adj_weights[graph.nodes[5].key], 6)\n",
|
||||
" assert_equal(graph.nodes[4].adj_weights[graph.nodes[0].key], 7)\n",
|
||||
" assert_equal(graph.nodes[5].adj_weights[graph.nodes[4].key], 8)\n",
|
||||
" assert_equal(graph.nodes[5].adj_weights[graph.nodes[2].key], 9)\n",
|
||||
" self.assertEqual(graph.nodes[0].adj_weights[graph.nodes[1].key], 5)\n",
|
||||
" self.assertEqual(graph.nodes[0].adj_weights[graph.nodes[5].key], 2)\n",
|
||||
" self.assertEqual(graph.nodes[1].adj_weights[graph.nodes[2].key], 3)\n",
|
||||
" self.assertEqual(graph.nodes[2].adj_weights[graph.nodes[3].key], 4)\n",
|
||||
" self.assertEqual(graph.nodes[3].adj_weights[graph.nodes[4].key], 5)\n",
|
||||
" self.assertEqual(graph.nodes[3].adj_weights[graph.nodes[5].key], 6)\n",
|
||||
" self.assertEqual(graph.nodes[4].adj_weights[graph.nodes[0].key], 7)\n",
|
||||
" self.assertEqual(graph.nodes[5].adj_weights[graph.nodes[4].key], 8)\n",
|
||||
" self.assertEqual(graph.nodes[5].adj_weights[graph.nodes[2].key], 9)\n",
|
||||
"\n",
|
||||
" assert_equal(graph.nodes[0].incoming_edges, 1)\n",
|
||||
" assert_equal(graph.nodes[1].incoming_edges, 1)\n",
|
||||
" assert_equal(graph.nodes[2].incoming_edges, 2)\n",
|
||||
" assert_equal(graph.nodes[3].incoming_edges, 1)\n",
|
||||
" assert_equal(graph.nodes[4].incoming_edges, 2)\n",
|
||||
" assert_equal(graph.nodes[5].incoming_edges, 2)\n",
|
||||
" self.assertEqual(graph.nodes[0].incoming_edges, 1)\n",
|
||||
" self.assertEqual(graph.nodes[1].incoming_edges, 1)\n",
|
||||
" self.assertEqual(graph.nodes[2].incoming_edges, 2)\n",
|
||||
" self.assertEqual(graph.nodes[3].incoming_edges, 1)\n",
|
||||
" self.assertEqual(graph.nodes[4].incoming_edges, 2)\n",
|
||||
" self.assertEqual(graph.nodes[5].incoming_edges, 2)\n",
|
||||
"\n",
|
||||
" graph.nodes[0].remove_neighbor(graph.nodes[1])\n",
|
||||
" assert_equal(graph.nodes[1].incoming_edges, 0)\n",
|
||||
" self.assertEqual(graph.nodes[1].incoming_edges, 0)\n",
|
||||
" graph.nodes[3].remove_neighbor(graph.nodes[4])\n",
|
||||
" assert_equal(graph.nodes[4].incoming_edges, 1)\n",
|
||||
" self.assertEqual(graph.nodes[4].incoming_edges, 1)\n",
|
||||
"\n",
|
||||
" assert_equal(graph.nodes[0] < graph.nodes[1], True)\n",
|
||||
" self.assertEqual(graph.nodes[0] < graph.nodes[1], True)\n",
|
||||
"\n",
|
||||
" print('Success: test_graph')\n",
|
||||
"\n",
|
||||
@@ -230,12 +230,12 @@
|
||||
" graph.add_undirected_edge(0, 5, weight=2)\n",
|
||||
" graph.add_undirected_edge(1, 2, weight=3)\n",
|
||||
"\n",
|
||||
" assert_equal(graph.nodes[0].adj_weights[graph.nodes[1].key], 5)\n",
|
||||
" assert_equal(graph.nodes[1].adj_weights[graph.nodes[0].key], 5)\n",
|
||||
" assert_equal(graph.nodes[0].adj_weights[graph.nodes[5].key], 2)\n",
|
||||
" assert_equal(graph.nodes[5].adj_weights[graph.nodes[0].key], 2)\n",
|
||||
" assert_equal(graph.nodes[1].adj_weights[graph.nodes[2].key], 3)\n",
|
||||
" assert_equal(graph.nodes[2].adj_weights[graph.nodes[1].key], 3)\n",
|
||||
" self.assertEqual(graph.nodes[0].adj_weights[graph.nodes[1].key], 5)\n",
|
||||
" self.assertEqual(graph.nodes[1].adj_weights[graph.nodes[0].key], 5)\n",
|
||||
" self.assertEqual(graph.nodes[0].adj_weights[graph.nodes[5].key], 2)\n",
|
||||
" self.assertEqual(graph.nodes[5].adj_weights[graph.nodes[0].key], 2)\n",
|
||||
" self.assertEqual(graph.nodes[1].adj_weights[graph.nodes[2].key], 3)\n",
|
||||
" self.assertEqual(graph.nodes[2].adj_weights[graph.nodes[1].key], 3)\n",
|
||||
"\n",
|
||||
" print('Success: test_graph_undirected')\n",
|
||||
"\n",
|
||||
@@ -276,7 +276,7 @@
|
||||
"name": "python",
|
||||
"nbconvert_exporter": "python",
|
||||
"pygments_lexer": "ipython3",
|
||||
"version": "3.6.4"
|
||||
"version": "3.7.2"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
|
||||
@@ -154,9 +154,7 @@
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 1,
|
||||
"metadata": {
|
||||
"collapsed": false
|
||||
},
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
@@ -241,9 +239,7 @@
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 2,
|
||||
"metadata": {
|
||||
"collapsed": false
|
||||
},
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"%run graph.py"
|
||||
@@ -259,9 +255,7 @@
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 3,
|
||||
"metadata": {
|
||||
"collapsed": false
|
||||
},
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
@@ -273,10 +267,10 @@
|
||||
],
|
||||
"source": [
|
||||
"%%writefile test_graph.py\n",
|
||||
"from nose.tools import assert_equal\n",
|
||||
"import unittest\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"class TestGraph(object):\n",
|
||||
"class TestGraph(unittest.TestCase):\n",
|
||||
"\n",
|
||||
" def create_graph(self):\n",
|
||||
" graph = Graph()\n",
|
||||
@@ -296,29 +290,29 @@
|
||||
" graph.add_edge(5, 4, weight=8)\n",
|
||||
" graph.add_edge(5, 2, weight=9)\n",
|
||||
"\n",
|
||||
" assert_equal(graph.nodes[0].adj_weights[graph.nodes[1].key], 5)\n",
|
||||
" assert_equal(graph.nodes[0].adj_weights[graph.nodes[5].key], 2)\n",
|
||||
" assert_equal(graph.nodes[1].adj_weights[graph.nodes[2].key], 3)\n",
|
||||
" assert_equal(graph.nodes[2].adj_weights[graph.nodes[3].key], 4)\n",
|
||||
" assert_equal(graph.nodes[3].adj_weights[graph.nodes[4].key], 5)\n",
|
||||
" assert_equal(graph.nodes[3].adj_weights[graph.nodes[5].key], 6)\n",
|
||||
" assert_equal(graph.nodes[4].adj_weights[graph.nodes[0].key], 7)\n",
|
||||
" assert_equal(graph.nodes[5].adj_weights[graph.nodes[4].key], 8)\n",
|
||||
" assert_equal(graph.nodes[5].adj_weights[graph.nodes[2].key], 9)\n",
|
||||
" self.assertEqual(graph.nodes[0].adj_weights[graph.nodes[1].key], 5)\n",
|
||||
" self.assertEqual(graph.nodes[0].adj_weights[graph.nodes[5].key], 2)\n",
|
||||
" self.assertEqual(graph.nodes[1].adj_weights[graph.nodes[2].key], 3)\n",
|
||||
" self.assertEqual(graph.nodes[2].adj_weights[graph.nodes[3].key], 4)\n",
|
||||
" self.assertEqual(graph.nodes[3].adj_weights[graph.nodes[4].key], 5)\n",
|
||||
" self.assertEqual(graph.nodes[3].adj_weights[graph.nodes[5].key], 6)\n",
|
||||
" self.assertEqual(graph.nodes[4].adj_weights[graph.nodes[0].key], 7)\n",
|
||||
" self.assertEqual(graph.nodes[5].adj_weights[graph.nodes[4].key], 8)\n",
|
||||
" self.assertEqual(graph.nodes[5].adj_weights[graph.nodes[2].key], 9)\n",
|
||||
"\n",
|
||||
" assert_equal(graph.nodes[0].incoming_edges, 1)\n",
|
||||
" assert_equal(graph.nodes[1].incoming_edges, 1)\n",
|
||||
" assert_equal(graph.nodes[2].incoming_edges, 2)\n",
|
||||
" assert_equal(graph.nodes[3].incoming_edges, 1)\n",
|
||||
" assert_equal(graph.nodes[4].incoming_edges, 2)\n",
|
||||
" assert_equal(graph.nodes[5].incoming_edges, 2)\n",
|
||||
" self.assertEqual(graph.nodes[0].incoming_edges, 1)\n",
|
||||
" self.assertEqual(graph.nodes[1].incoming_edges, 1)\n",
|
||||
" self.assertEqual(graph.nodes[2].incoming_edges, 2)\n",
|
||||
" self.assertEqual(graph.nodes[3].incoming_edges, 1)\n",
|
||||
" self.assertEqual(graph.nodes[4].incoming_edges, 2)\n",
|
||||
" self.assertEqual(graph.nodes[5].incoming_edges, 2)\n",
|
||||
"\n",
|
||||
" graph.nodes[0].remove_neighbor(graph.nodes[1])\n",
|
||||
" assert_equal(graph.nodes[1].incoming_edges, 0)\n",
|
||||
" self.assertEqual(graph.nodes[1].incoming_edges, 0)\n",
|
||||
" graph.nodes[3].remove_neighbor(graph.nodes[4])\n",
|
||||
" assert_equal(graph.nodes[4].incoming_edges, 1)\n",
|
||||
" self.assertEqual(graph.nodes[4].incoming_edges, 1)\n",
|
||||
"\n",
|
||||
" assert_equal(graph.nodes[0] < graph.nodes[1], True)\n",
|
||||
" self.assertEqual(graph.nodes[0] < graph.nodes[1], True)\n",
|
||||
"\n",
|
||||
" print('Success: test_graph')\n",
|
||||
"\n",
|
||||
@@ -328,12 +322,12 @@
|
||||
" graph.add_undirected_edge(0, 5, weight=2)\n",
|
||||
" graph.add_undirected_edge(1, 2, weight=3)\n",
|
||||
"\n",
|
||||
" assert_equal(graph.nodes[0].adj_weights[graph.nodes[1].key], 5)\n",
|
||||
" assert_equal(graph.nodes[1].adj_weights[graph.nodes[0].key], 5)\n",
|
||||
" assert_equal(graph.nodes[0].adj_weights[graph.nodes[5].key], 2)\n",
|
||||
" assert_equal(graph.nodes[5].adj_weights[graph.nodes[0].key], 2)\n",
|
||||
" assert_equal(graph.nodes[1].adj_weights[graph.nodes[2].key], 3)\n",
|
||||
" assert_equal(graph.nodes[2].adj_weights[graph.nodes[1].key], 3)\n",
|
||||
" self.assertEqual(graph.nodes[0].adj_weights[graph.nodes[1].key], 5)\n",
|
||||
" self.assertEqual(graph.nodes[1].adj_weights[graph.nodes[0].key], 5)\n",
|
||||
" self.assertEqual(graph.nodes[0].adj_weights[graph.nodes[5].key], 2)\n",
|
||||
" self.assertEqual(graph.nodes[5].adj_weights[graph.nodes[0].key], 2)\n",
|
||||
" self.assertEqual(graph.nodes[1].adj_weights[graph.nodes[2].key], 3)\n",
|
||||
" self.assertEqual(graph.nodes[2].adj_weights[graph.nodes[1].key], 3)\n",
|
||||
"\n",
|
||||
" print('Success: test_graph_undirected')\n",
|
||||
"\n",
|
||||
@@ -351,9 +345,7 @@
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 4,
|
||||
"metadata": {
|
||||
"collapsed": false
|
||||
},
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
@@ -385,9 +377,9 @@
|
||||
"name": "python",
|
||||
"nbconvert_exporter": "python",
|
||||
"pygments_lexer": "ipython3",
|
||||
"version": "3.4.3"
|
||||
"version": "3.7.2"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 0
|
||||
"nbformat_minor": 1
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
from nose.tools import assert_equal
|
||||
import unittest
|
||||
|
||||
|
||||
class TestGraph(object):
|
||||
class TestGraph(unittest.TestCase):
|
||||
|
||||
def create_graph(self):
|
||||
graph = Graph()
|
||||
@@ -21,29 +21,29 @@ class TestGraph(object):
|
||||
graph.add_edge(5, 4, weight=8)
|
||||
graph.add_edge(5, 2, weight=9)
|
||||
|
||||
assert_equal(graph.nodes[0].adj_weights[graph.nodes[1].key], 5)
|
||||
assert_equal(graph.nodes[0].adj_weights[graph.nodes[5].key], 2)
|
||||
assert_equal(graph.nodes[1].adj_weights[graph.nodes[2].key], 3)
|
||||
assert_equal(graph.nodes[2].adj_weights[graph.nodes[3].key], 4)
|
||||
assert_equal(graph.nodes[3].adj_weights[graph.nodes[4].key], 5)
|
||||
assert_equal(graph.nodes[3].adj_weights[graph.nodes[5].key], 6)
|
||||
assert_equal(graph.nodes[4].adj_weights[graph.nodes[0].key], 7)
|
||||
assert_equal(graph.nodes[5].adj_weights[graph.nodes[4].key], 8)
|
||||
assert_equal(graph.nodes[5].adj_weights[graph.nodes[2].key], 9)
|
||||
self.assertEqual(graph.nodes[0].adj_weights[graph.nodes[1].key], 5)
|
||||
self.assertEqual(graph.nodes[0].adj_weights[graph.nodes[5].key], 2)
|
||||
self.assertEqual(graph.nodes[1].adj_weights[graph.nodes[2].key], 3)
|
||||
self.assertEqual(graph.nodes[2].adj_weights[graph.nodes[3].key], 4)
|
||||
self.assertEqual(graph.nodes[3].adj_weights[graph.nodes[4].key], 5)
|
||||
self.assertEqual(graph.nodes[3].adj_weights[graph.nodes[5].key], 6)
|
||||
self.assertEqual(graph.nodes[4].adj_weights[graph.nodes[0].key], 7)
|
||||
self.assertEqual(graph.nodes[5].adj_weights[graph.nodes[4].key], 8)
|
||||
self.assertEqual(graph.nodes[5].adj_weights[graph.nodes[2].key], 9)
|
||||
|
||||
assert_equal(graph.nodes[0].incoming_edges, 1)
|
||||
assert_equal(graph.nodes[1].incoming_edges, 1)
|
||||
assert_equal(graph.nodes[2].incoming_edges, 2)
|
||||
assert_equal(graph.nodes[3].incoming_edges, 1)
|
||||
assert_equal(graph.nodes[4].incoming_edges, 2)
|
||||
assert_equal(graph.nodes[5].incoming_edges, 2)
|
||||
self.assertEqual(graph.nodes[0].incoming_edges, 1)
|
||||
self.assertEqual(graph.nodes[1].incoming_edges, 1)
|
||||
self.assertEqual(graph.nodes[2].incoming_edges, 2)
|
||||
self.assertEqual(graph.nodes[3].incoming_edges, 1)
|
||||
self.assertEqual(graph.nodes[4].incoming_edges, 2)
|
||||
self.assertEqual(graph.nodes[5].incoming_edges, 2)
|
||||
|
||||
graph.nodes[0].remove_neighbor(graph.nodes[1])
|
||||
assert_equal(graph.nodes[1].incoming_edges, 0)
|
||||
self.assertEqual(graph.nodes[1].incoming_edges, 0)
|
||||
graph.nodes[3].remove_neighbor(graph.nodes[4])
|
||||
assert_equal(graph.nodes[4].incoming_edges, 1)
|
||||
self.assertEqual(graph.nodes[4].incoming_edges, 1)
|
||||
|
||||
assert_equal(graph.nodes[0] < graph.nodes[1], True)
|
||||
self.assertEqual(graph.nodes[0] < graph.nodes[1], True)
|
||||
|
||||
print('Success: test_graph')
|
||||
|
||||
@@ -53,12 +53,12 @@ class TestGraph(object):
|
||||
graph.add_undirected_edge(0, 5, weight=2)
|
||||
graph.add_undirected_edge(1, 2, weight=3)
|
||||
|
||||
assert_equal(graph.nodes[0].adj_weights[graph.nodes[1].key], 5)
|
||||
assert_equal(graph.nodes[1].adj_weights[graph.nodes[0].key], 5)
|
||||
assert_equal(graph.nodes[0].adj_weights[graph.nodes[5].key], 2)
|
||||
assert_equal(graph.nodes[5].adj_weights[graph.nodes[0].key], 2)
|
||||
assert_equal(graph.nodes[1].adj_weights[graph.nodes[2].key], 3)
|
||||
assert_equal(graph.nodes[2].adj_weights[graph.nodes[1].key], 3)
|
||||
self.assertEqual(graph.nodes[0].adj_weights[graph.nodes[1].key], 5)
|
||||
self.assertEqual(graph.nodes[1].adj_weights[graph.nodes[0].key], 5)
|
||||
self.assertEqual(graph.nodes[0].adj_weights[graph.nodes[5].key], 2)
|
||||
self.assertEqual(graph.nodes[5].adj_weights[graph.nodes[0].key], 2)
|
||||
self.assertEqual(graph.nodes[1].adj_weights[graph.nodes[2].key], 3)
|
||||
self.assertEqual(graph.nodes[2].adj_weights[graph.nodes[1].key], 3)
|
||||
|
||||
print('Success: test_graph_undirected')
|
||||
|
||||
@@ -70,4 +70,4 @@ def main():
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
main()
|
||||
|
||||
Reference in New Issue
Block a user