Skip to content

Commit 8cb6826

Browse files
committed
More algos
1 parent e69accb commit 8cb6826

14 files changed

+515
-0
lines changed
+27
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
def solution(A):
2+
intersects=0
3+
n = len(A)
4+
5+
# Create all starts and ends
6+
points = []
7+
for i in range(n):
8+
points.append((i-A[i], "s"))
9+
points.append((A[i]+i, "e"))
10+
11+
# Order by second attribute (reverse is true because we need the s first)
12+
points.sort(key=lambda x: x[1], reverse=True)
13+
# Order by first attribute
14+
points.sort(key=lambda x: x[0])
15+
16+
total_open=0
17+
for i in points:
18+
if (i[1] == "s"):
19+
intersects += total_open
20+
total_open += 1
21+
elif(i[1] == "e"):
22+
total_open -= 1
23+
# print("intersects", intersects,"\t Total:",total_open)
24+
25+
if(intersects > 10_000_000):
26+
return -1
27+
return intersects
+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
# you can write to stdout for debugging purposes, e.g.
2+
# print("this is a debug message")
3+
4+
def solution(A):
5+
n = len(A)
6+
intersects = 0
7+
starts = [0]*n
8+
ends = [0]*n
9+
10+
for i in range(len(A)):
11+
s = i - A[i] if i > A[i] else 0
12+
e = i + A[i] if n-1-i > A[i] else n-1
13+
14+
starts[s] += 1
15+
ends[e] += 1
16+
17+
# print(starts, ends)
18+
active = 0
19+
for i in range(len(A)):
20+
# print(i, intersects, starts[i], ends[i], active, active * starts[i], starts[i] * (starts[i] - 1) // 2)
21+
intersects += active * starts[i]
22+
intersects += starts[i] * (starts[i] - 1) // 2
23+
if (10_000_000 < intersects):
24+
return -1
25+
26+
active += starts[i] - ends[i]
27+
28+
return intersects
+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
def solution(S):
2+
my_stack = []
3+
4+
for i in S:
5+
if (len(my_stack) > 0 and
6+
((i == ")" and my_stack[-1] == "(") or
7+
(i == "]" and my_stack[-1] == "[") or
8+
(i == "}" and my_stack[-1] == "{"))):
9+
my_stack.pop()
10+
else:
11+
my_stack.append(i)
12+
13+
if len(my_stack) == 0:
14+
return 1
15+
else:
16+
return 0
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
#!/bin/python3
2+
3+
import math
4+
import os
5+
import random
6+
import re
7+
import sys
8+
9+
#
10+
# Complete the 'birthday' function below.
11+
#
12+
# The function is expected to return an INTEGER.
13+
# The function accepts following parameters:
14+
# 1. INTEGER_ARRAY s
15+
# 2. INTEGER d
16+
# 3. INTEGER m
17+
#
18+
def birthday(s, d, m):
19+
if len(s) < m:
20+
return 0
21+
22+
range_sum = sum(s[0:m])
23+
count = 1 if range_sum == d else 0
24+
25+
for i in range(1, len(s)+1-m):
26+
range_sum -= s[i-1]
27+
range_sum += s[i+m-1]
28+
29+
if range_sum == d:
30+
count += 1
31+
32+
return count
33+
34+
if __name__ == '__main__':
35+
fptr = open(os.environ['OUTPUT_PATH'], 'w')
36+
37+
n = int(input().strip())
38+
39+
s = list(map(int, input().rstrip().split()))
40+
41+
first_multiple_input = input().rstrip().split()
42+
43+
d = int(first_multiple_input[0])
44+
45+
m = int(first_multiple_input[1])
46+
47+
result = birthday(s, d, m)
48+
49+
fptr.write(str(result) + '\n')
50+
51+
fptr.close()
+43
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
#!/bin/python3
2+
3+
import math
4+
import os
5+
import random
6+
import re
7+
import sys
8+
9+
#
10+
# Complete the 'birthday' function below.
11+
#
12+
# The function is expected to return an INTEGER.
13+
# The function accepts following parameters:
14+
# 1. INTEGER_ARRAY s
15+
# 2. INTEGER d
16+
# 3. INTEGER m
17+
#
18+
def birthday(s, d, m): # O (n*n)
19+
count = 0
20+
for i in range(len(s)+1-m):
21+
if sum(s[i:i+m]) == d:
22+
count += 1
23+
24+
return count
25+
26+
if __name__ == '__main__':
27+
fptr = open(os.environ['OUTPUT_PATH'], 'w')
28+
29+
n = int(input().strip())
30+
31+
s = list(map(int, input().rstrip().split()))
32+
33+
first_multiple_input = input().rstrip().split()
34+
35+
d = int(first_multiple_input[0])
36+
37+
m = int(first_multiple_input[1])
38+
39+
result = birthday(s, d, m)
40+
41+
fptr.write(str(result) + '\n')
42+
43+
fptr.close()
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
#!/bin/python3
2+
3+
import math
4+
import os
5+
import random
6+
import re
7+
import sys
8+
9+
#
10+
# Complete the 'countingSort' function below.
11+
#
12+
# The function is expected to return an INTEGER_ARRAY.
13+
# The function accepts INTEGER_ARRAY arr as parameter.
14+
#
15+
16+
def countingSort(arr):
17+
# Write your code here
18+
result = [0]*100
19+
20+
for i in range(len(arr)):
21+
n = arr[i]
22+
result[n] += 1
23+
24+
return result
25+
26+
if __name__ == '__main__':
27+
fptr = open(os.environ['OUTPUT_PATH'], 'w')
28+
29+
n = int(input().strip())
30+
31+
arr = list(map(int, input().rstrip().split()))
32+
33+
result = countingSort(arr)
34+
35+
fptr.write(' '.join(map(str, result)))
36+
fptr.write('\n')
37+
38+
fptr.close()
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
#!/bin/python3
2+
3+
import math
4+
import os
5+
import random
6+
import re
7+
import sys
8+
9+
#
10+
# Complete the 'diagonalDifference' function below.
11+
#
12+
# The function is expected to return an INTEGER.
13+
# The function accepts 2D_INTEGER_ARRAY arr as parameter.
14+
#
15+
16+
def diagonalDifference(arr):
17+
# Write your code here
18+
sumleft = 0
19+
sumright = 0
20+
n = len(arr)
21+
for i in range(n):
22+
sumleft += arr[i][i]
23+
sumright += arr[n-1-i][i]
24+
25+
return abs(sumleft-sumright)
26+
27+
if __name__ == '__main__':
28+
fptr = open(os.environ['OUTPUT_PATH'], 'w')
29+
30+
n = int(input().strip())
31+
32+
arr = []
33+
34+
for _ in range(n):
35+
arr.append(list(map(int, input().rstrip().split())))
36+
37+
result = diagonalDifference(arr)
38+
39+
fptr.write(str(result) + '\n')
40+
41+
fptr.close()
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
#!/bin/python3
2+
3+
import math
4+
import os
5+
import random
6+
import re
7+
import sys
8+
9+
#
10+
# Complete the 'pageCount' function below.
11+
#
12+
# The function is expected to return an INTEGER.
13+
# The function accepts following parameters:
14+
# 1. INTEGER n
15+
# 2. INTEGER p
16+
#
17+
18+
def pageCount(n, p):
19+
return min(p//2, n//2 - p//2)
20+
21+
if __name__ == '__main__':
22+
fptr = open(os.environ['OUTPUT_PATH'], 'w')
23+
24+
n = int(input().strip())
25+
26+
p = int(input().strip())
27+
28+
result = pageCount(n, p)
29+
30+
fptr.write(str(result) + '\n')
31+
32+
fptr.close()
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
#!/bin/python3
2+
3+
import math
4+
import os
5+
import random
6+
import re
7+
import sys
8+
9+
#
10+
# Complete the 'pageCount' function below.
11+
#
12+
# The function is expected to return an INTEGER.
13+
# The function accepts following parameters:
14+
# 1. INTEGER n
15+
# 2. INTEGER p
16+
#
17+
18+
def pageCount(n, p):
19+
# Last page
20+
if p!=1 and n-p == 1 and n%2 == 0:
21+
return 1
22+
23+
if p==1 and n-p == 1:
24+
return 0
25+
26+
27+
if (n-p)//2 < p//2:
28+
return (n-p)//2
29+
return p//2
30+
31+
if __name__ == '__main__':
32+
fptr = open(os.environ['OUTPUT_PATH'], 'w')
33+
34+
n = int(input().strip())
35+
36+
p = int(input().strip())
37+
38+
result = pageCount(n, p)
39+
40+
fptr.write(str(result) + '\n')
41+
42+
fptr.close()
+38
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
#!/bin/python3
2+
3+
import math
4+
import os
5+
import random
6+
import re
7+
import sys
8+
9+
#
10+
# Complete the 'pangrams' function below.
11+
#
12+
# The function is expected to return a STRING.
13+
# The function accepts STRING s as parameter.
14+
#
15+
16+
def pangrams(s):
17+
# Write your code here
18+
s_arr = [*s.lower().replace(' ','')]
19+
s_set = set(s_arr)
20+
21+
if len(s_set) == 26:
22+
return 'pangram'
23+
24+
return 'not pangram'
25+
26+
27+
28+
29+
if __name__ == '__main__':
30+
fptr = open(os.environ['OUTPUT_PATH'], 'w')
31+
32+
s = input()
33+
34+
result = pangrams(s)
35+
36+
fptr.write(result + '\n')
37+
38+
fptr.close()

0 commit comments

Comments
 (0)