initial implementation
Verifying solution... Test 1 passed! Test 2 passed! Test 3 failed [Hidden] Test 4 failed [Hidden] Test 5 failed [Hidden]
This commit is contained in:
parent
ef27d7f8e4
commit
a324af524f
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