Skip to content

Commit 3c75956

Browse files
committed
Adding HelloGraph example
1 parent 39788fa commit 3c75956

File tree

3 files changed

+75
-0
lines changed

3 files changed

+75
-0
lines changed

HelloGraph/__init__.py

Whitespace-only changes.

HelloGraph/challenge.py

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
# https://github.com/elmar-hinz/Python.Challenges
2+
from challenges import Challenge
3+
4+
class HelloGraphChallenge(Challenge):
5+
"""
6+
Given: Two nodes and a list of edges
7+
Return: Graph between the nodes and it's weight
8+
"""
9+
10+
sample = '''
11+
2
12+
4
13+
1->2:2
14+
2->3:4
15+
3->4:10
16+
4->5:8
17+
5->6:1
18+
'''
19+
20+
expect = '''
21+
2->3->4
22+
14
23+
'''
24+
25+
def build(self):
26+
self.model.start = self.line_to_integer(0)
27+
self.model.stop = self.line_to_integer(1)
28+
self.model.graph = dict()
29+
for edge in self.edges(2):
30+
self.model.graph[edge.tail] = (edge.head, edge.weight)
31+
32+
def calc(self):
33+
head = None
34+
tail = self.model.start
35+
self.result.graph = [tail]
36+
self.result.weight = 0
37+
while tail != self.model.stop:
38+
self.result.weight += self.model.graph[tail][1]
39+
tail = self.model.graph[tail][0]
40+
self.result.graph.append(tail)
41+
42+
def format(self):
43+
self.output = self.format_path(self.result.graph)
44+
self.output += self.br
45+
self.output += str(self.result.weight)

HelloGraph/test.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import unittest
2+
from HelloGraph.challenge import HelloGraphChallenge
3+
4+
class HelloGraphTest(unittest.TestCase):
5+
6+
def setUp(self):
7+
self.challenge = HelloGraphChallenge()
8+
9+
def test__init__(self):
10+
self.assertIsInstance(self.challenge, HelloGraphChallenge)
11+
self.assertIn('5->6', self.challenge.sample)
12+
self.assertIn('2->3->4', self.challenge.expect)
13+
14+
def test_build(self):
15+
self.challenge.read()
16+
self.challenge.build()
17+
self.assertEqual(2, self.challenge.model.start)
18+
self.assertEqual(4, self.challenge.model.stop)
19+
self.assertEqual(4, self.challenge.model.graph[3][0])
20+
self.assertEqual(10, self.challenge.model.graph[3][1])
21+
22+
def test_format(self):
23+
self.challenge.result.weight = 14
24+
self.challenge.result.graph = [2, 3, 4]
25+
self.challenge.format()
26+
self.assertEqual(self.challenge.expectation(), self.challenge.output)
27+
28+
def test_full_integration(self):
29+
self.challenge.main()
30+
self.assertEqual(self.challenge.expectation(), self.challenge.output)

0 commit comments

Comments
 (0)