Skip to content

Commit 2e24741

Browse files
committed
*New
1 parent 8511476 commit 2e24741

File tree

5 files changed

+282
-0
lines changed

5 files changed

+282
-0
lines changed

Arrays/longest_common_prefix.py

+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
class Solution:
2+
def longestCommonPrefix(self, arr, n):
3+
common_prefix = min(arr)
4+
filtered = list(filter(lambda x: len(x) >= len(common_prefix), arr))
5+
ans = ""
6+
for idx in range(len(common_prefix)):
7+
for el in filtered:
8+
if el[idx] == common_prefix[idx]:
9+
continue
10+
else:
11+
return ans or "-1"
12+
13+
ans += common_prefix[idx]
14+
return ans or "-1"
15+
16+
17+
# {
18+
# Driver Code Starts
19+
# Initial Template for Python 3
20+
21+
if __name__ == '__main__':
22+
t = int(input())
23+
for _ in range(t):
24+
n = int(input())
25+
arr = [x for x in input().strip().split(" ")]
26+
27+
ob = Solution()
28+
print(ob.longestCommonPrefix(arr, n))
29+
# } Driver Code Ends

Arrays/servers_that_communicate.py

+53
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
# Problem source: https://leetcode.com/problems/count-servers-that-communicate/
2+
# Servers that communicate
3+
4+
from typing import List
5+
6+
7+
class Solution:
8+
9+
def countServers(self, grid: List[List[int]]) -> int:
10+
rows = len(grid)
11+
cols = len(grid[0])
12+
discovered = set()
13+
14+
for i in range(rows):
15+
has_server = 0
16+
temp_discovery = None
17+
for j in range(cols):
18+
el = grid[i][j]
19+
if el:
20+
if has_server:
21+
discovered.add((i, j))
22+
if temp_discovery:
23+
discovered.add(temp_discovery)
24+
temp_discovery = None
25+
else:
26+
temp_discovery = (i, j)
27+
has_server = 1
28+
found_servers = self.discover_cols(i + 1, j, grid, discovered, rows, cols)
29+
if found_servers and temp_discovery:
30+
discovered.add(temp_discovery)
31+
temp_discovery = None
32+
33+
return len(discovered)
34+
35+
def discover_cols(self, row, col, grid, discovered, rows, cols):
36+
found_servers = 0
37+
for c in range(row, rows):
38+
el = grid[c][col]
39+
if el == 1:
40+
discovered.add((c, col))
41+
found_servers = 1
42+
43+
return found_servers
44+
45+
46+
if __name__ == '__main__':
47+
ob = Solution()
48+
rows, cols = input().split(" ")
49+
_grid = []
50+
for row in range(int(rows)):
51+
line = input()
52+
_grid.append([int(x) for x in line.split(" ")])
53+
print(ob.countServers(_grid))

Arrays/sort_on_kth_attribute.py

+27
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
# Problem source: https://www.hackerrank.com/challenges/python-sort-sort/problem
2+
3+
import math
4+
import os
5+
import random
6+
import re
7+
import sys
8+
9+
if __name__ == '__main__':
10+
nm = input().split()
11+
12+
n = int(nm[0])
13+
14+
m = int(nm[1])
15+
16+
arr = []
17+
18+
for _ in range(n):
19+
arr.append(list(map(int, input().rstrip().split())))
20+
21+
k = int(input())
22+
23+
sorted_list = list(sorted(arr, key=lambda x: x[k]))
24+
for row in sorted_list:
25+
for c in row:
26+
print(c, end=" ")
27+
print()

DynamicProgramming/snake_ladder.py

+66
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
# Problem source: https://practice.geeksforgeeks.org/problems/snake-and-ladder-problem4816/1
2+
# input:
3+
# The input is represented by two things, the first is ‘N’ which
4+
# is a number of cells in the given board, second is an array ‘move[0…N-1]’ of size N.
5+
# An entry move[i] is -1 if there is no snake and no ladder from i,
6+
# otherwise move[i] contains index of destination cell for the snake or the ladder at i.
7+
8+
# output: Minimum number of dice throws required to reach the destination cell from the source or the 1st cell.
9+
10+
class QueueEntry:
11+
def __init__(self):
12+
self.v = 0
13+
self.dist = 0
14+
15+
16+
class Solution:
17+
def minThrow(self, N, arr):
18+
q = []
19+
qe = QueueEntry()
20+
visited = [False] * N+1
21+
q.append(qe)
22+
23+
mat = [-1] * 30
24+
for i in range(0, 2*N, 2):
25+
mat[arr[i]] = arr[i+1]
26+
27+
while q:
28+
qe = q.pop(0)
29+
v = qe.v
30+
if v == 30:
31+
break
32+
33+
for j in range(v+1, 7):
34+
if j > 30:
35+
break
36+
if visited[j] == 0:
37+
a = QueueEntry()
38+
a.dist = qe.dist + 1
39+
40+
if mat[j] != -1:
41+
a.v = mat[j]
42+
else:
43+
a.v = j
44+
45+
q.append(a)
46+
47+
return qe.dist
48+
49+
50+
# code here
51+
52+
53+
# {
54+
# Driver Code Starts
55+
# Initial Template for Python3
56+
57+
if __name__ == '__main__':
58+
t = int(input())
59+
for _ in range(t):
60+
N = int(input())
61+
arr = input().split()
62+
for i in range(2 * N):
63+
arr[i] = int(arr[i])
64+
65+
ob = Solution()
66+
print(ob.minThrow(N, arr))

Tree/BaseTree.py

+107
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
2+
class Node:
3+
def __init__(self, data=None):
4+
self.data = data
5+
self.left = None
6+
self.right = None
7+
8+
9+
class Tree:
10+
def __init__(self):
11+
self.root = None
12+
13+
def insert_node(self, data):
14+
15+
x = self.root
16+
y = None
17+
18+
# iterative approach
19+
while x is not None:
20+
y = x
21+
if data < x.data:
22+
x = x.left
23+
else:
24+
x = x.right
25+
26+
if y is None:
27+
y = Node(data)
28+
elif data < y.data:
29+
y.left = Node(data)
30+
else:
31+
y.right = Node(data)
32+
33+
return y
34+
35+
def inorder_traversal(self, node: Node):
36+
if node is None:
37+
return
38+
39+
if node.left is not None:
40+
self.inorder_traversal(node.left)
41+
42+
print(node.data, end=" ")
43+
44+
if node.right is not None:
45+
self.inorder_traversal(node.right)
46+
47+
def preorder_traversal(self, node: Node):
48+
if node is None:
49+
return
50+
51+
print(node.data, end=" ")
52+
53+
if node.left is not None:
54+
self.preorder_traversal(node.left)
55+
56+
if node.right is not None:
57+
self.preorder_traversal(node.right)
58+
59+
def postorder_traversal(self, node: Node):
60+
if node is None:
61+
return
62+
63+
if node.left is not None:
64+
self.postorder_traversal(node.left)
65+
66+
if node.right is not None:
67+
self.postorder_traversal(node.right)
68+
69+
print(node.data, end=" ")
70+
71+
def level_order_traversal(self):
72+
if self.root is None:
73+
return
74+
75+
queue = [self.root]
76+
77+
while len(queue) > 0:
78+
node = queue.pop(0)
79+
print(node.data, end=" ")
80+
81+
if node.left is not None:
82+
queue.append(node.left)
83+
84+
if node.right is not None:
85+
queue.append(node.right)
86+
87+
88+
if __name__ == '__main__':
89+
tree = Tree()
90+
_root = tree.root = tree.insert_node(1)
91+
_root.left = Node(2)
92+
_root.right = Node(3)
93+
_root.left.left = Node(4)
94+
_root.left.right = Node(5)
95+
# tree.insert_node(2)
96+
# tree.insert_node(3)
97+
# tree.insert_node(4)
98+
# tree.insert_node(5)
99+
100+
print("InOrder Traversal")
101+
tree.inorder_traversal(_root)
102+
103+
print("\nLevel Order Traversal")
104+
tree.level_order_traversal()
105+
106+
print("\nPreOrder Traversal")
107+
tree.preorder_traversal(tree.root)

0 commit comments

Comments
 (0)