Skip to content

Commit 7bc768d

Browse files
author
Hamid Gasmi
committed
#185 is started
1 parent c6e27d4 commit 7bc768d

File tree

15 files changed

+139
-0
lines changed

15 files changed

+139
-0
lines changed
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
import sys
2+
3+
class Overlap_Graph:
4+
def __init__(self, patterns):
5+
6+
assert(len(patterns) > 0)
7+
self._pattern_size = len(patterns[0])
8+
self._build_adjacency_list(patterns)
9+
10+
def _build_adjacency_list(self, patterns):
11+
self.nodes = []
12+
self.adjacency_list = []
13+
self.nodes_ids = dict()
14+
prefixes = dict()
15+
suffixes = dict()
16+
17+
for pattern in patterns:
18+
assert(len(pattern) == self._pattern_size)
19+
20+
node_id, is_new_node = self.get_node_id(pattern)
21+
prefix = pattern[:self._pattern_size - 1]
22+
suffix = pattern[1:]
23+
#print("pattern, prefix, suffix: ", pattern, prefix, suffix)
24+
if is_new_node:
25+
if not prefix in prefixes:
26+
prefixes[prefix] = []
27+
prefixes[prefix].append(node_id)
28+
29+
if not suffix in suffixes:
30+
suffixes[suffix] = []
31+
suffixes[suffix].append(node_id)
32+
33+
if suffix in prefixes:
34+
self.adjacency_list[node_id].extend(prefixes[suffix])
35+
if prefix in suffixes:
36+
for predec_node in suffixes[prefix]:
37+
self.adjacency_list[predec_node].append(node_id)
38+
39+
for a in self.adjacency_list:
40+
print(a)
41+
42+
def get_node_id(self, pattern):
43+
44+
is_new_node = False
45+
if pattern in self.nodes:
46+
node_id = self.nodes_ids[pattern]
47+
is_new_node = False
48+
else:
49+
is_new_node = True
50+
node_id = len(self.nodes)
51+
self.nodes.append(pattern)
52+
self.adjacency_list.append([])
53+
self.nodes_ids[pattern] = node_id
54+
55+
return node_id, is_new_node
56+
57+
def print_adjacency_list(self):
58+
59+
result_list = []
60+
print(self.nodes)
61+
for node in range(len(self.nodes)):
62+
if len(self.adjacency_list[node]) == 0:
63+
continue
64+
print(self.nodes[node])
65+
66+
node_adjacents = [ self.nodes[node] ]
67+
node_adjacents.append('->')
68+
for a in range(len(self.adjacency_list[node])):
69+
adjacent_node_id = self.adjacency_list[node][a]
70+
node_adjacents.append(self.nodes[adjacent_node_id])
71+
if a < len(self.adjacency_list[node]) - 1:
72+
node_adjacents.append(',')
73+
result_list.append(''.join(node_adjacents))
74+
75+
return '\n'.join(result_list)
76+
77+
if __name__ == "__main__":
78+
patterns = sys.stdin.read().strip().splitlines()
79+
80+
overlap_graph = Overlap_Graph(patterns)
81+
82+
print(overlap_graph.print_adjacency_list())
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
TTC->TCT
2+
CTA->TAC
3+
AAG->AGA
4+
CTC->TCT
5+
TCT->CTA,CTC
6+
AGA->GAT
7+
GAT->ATT
8+
ATT->TTC
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
AAG
2+
AGA
3+
ATT
4+
CTA
5+
CTC
6+
GAT
7+
TAC
8+
TCT
9+
TCT
10+
TTC
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
TTT->TTT
2+
ACT->CTT
3+
CTT->TTT
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
ACT
2+
CTT
3+
TTT
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
CCCC->CCCC
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
CCCC
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
CT->TT
2+
TT->TT
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
CT
2+
TT
3+
TT
4+
TT
5+
TT
6+
TT
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
GAT->ATC,ATG
2+
GGA->GAT
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
GAT
2+
ATG
3+
ATC
4+
GGA
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
GGACT->GACTT,GACTG
2+
GACTG->ACTGG
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
GGACT
2+
ACTGG
3+
GACTT
4+
GACTT
5+
GACTG
6+
ACTGG
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
TC->CT
2+
CT->TC,TG,TT
3+
TT->TC,TG,TT
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
CT
2+
TG
3+
TG
4+
TC
5+
TT
6+
TC

0 commit comments

Comments
 (0)