finish extra/find-the-access-codes #13
42
extra/find-the-access-codes/solution.py
Normal file
42
extra/find-the-access-codes/solution.py
Normal file
@ -0,0 +1,42 @@
|
||||
def solution(l):
|
||||
edges = {n : {'count': 1, 'multiple': set(), 'divisor': set()} for n in set(l)}
|
||||
for i in range(len(l)):
|
||||
x = l[i]
|
||||
if edges[x]['count'] > 1:
|
||||
continue
|
||||
for j in range(i+1, len(l)):
|
||||
y = l[j]
|
||||
if x == y:
|
||||
edges[x]['count'] += 1
|
||||
elif x > y and x % y == 0:
|
||||
edges[x]['divisor'].add(y)
|
||||
edges[y]['multiple'].add(x)
|
||||
elif y > x and y % x == 0:
|
||||
edges[x]['multiple'].add(y)
|
||||
edges[y]['divisor'].add(x)
|
||||
|
||||
result = 0
|
||||
for x in edges:
|
||||
# 1. (d, x, m)
|
||||
result += len(edges[x]['divisor']) * len(edges[x]['multiple'])
|
||||
# 2. (d, x, x) (x, x, m)
|
||||
if edges[x]['count'] >= 2:
|
||||
result += len(edges[x]['divisor']) + len(edges[x]['multiple'])
|
||||
# 3. (x, x, x)
|
||||
if edges[x]['count'] >= 3:
|
||||
result += 1
|
||||
|
||||
return result
|
||||
|
||||
tests = [
|
||||
([1, 1, 1], 1),
|
||||
([1, 2, 3, 4, 5, 6], 3),
|
||||
([2, 3, 4], 0),
|
||||
([1, 1, 2, 3, 4, 5, 6], 8),
|
||||
([3 for i in range(2000)], 1),
|
||||
([i for i in range(1, 2000)], 40777),
|
||||
]
|
||||
|
||||
for i, o in tests:
|
||||
result = solution(i)
|
||||
print(i, result == o, result, o)
|
||||
Loading…
x
Reference in New Issue
Block a user