From a324af524fcfb8915441391a44e424cd9e49b0ea Mon Sep 17 00:00:00 2001 From: Seongbeom Park Date: Sat, 30 Apr 2022 03:10:53 +0900 Subject: [PATCH] initial implementation Verifying solution... Test 1 passed! Test 2 passed! Test 3 failed [Hidden] Test 4 failed [Hidden] Test 5 failed [Hidden] --- extra/find-the-access-codes/solution.py | 42 +++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 extra/find-the-access-codes/solution.py diff --git a/extra/find-the-access-codes/solution.py b/extra/find-the-access-codes/solution.py new file mode 100644 index 0000000..3bcc114 --- /dev/null +++ b/extra/find-the-access-codes/solution.py @@ -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)