summaryrefslogtreecommitdiff
path: root/python/problems/functions/friendly_numbers
diff options
context:
space:
mode:
Diffstat (limited to 'python/problems/functions/friendly_numbers')
-rw-r--r--python/problems/functions/friendly_numbers/common.py31
-rw-r--r--python/problems/functions/friendly_numbers/en.py4
-rw-r--r--python/problems/functions/friendly_numbers/sl.py6
3 files changed, 32 insertions, 9 deletions
diff --git a/python/problems/functions/friendly_numbers/common.py b/python/problems/functions/friendly_numbers/common.py
index 415040e..6588242 100644
--- a/python/problems/functions/friendly_numbers/common.py
+++ b/python/problems/functions/friendly_numbers/common.py
@@ -18,7 +18,7 @@ def divisors_sum(n):
s += i
return s
-def friendly_number(n):
+def amicable_number(n):
s = divisors_sum(n)
if n == divisors_sum(s):
return s
@@ -29,12 +29,35 @@ hint_type = {
}
def test(python, code):
- test_in = [1]
+ func_name = 'amicable_number'
+ tokens = get_tokens(code)
+ if not has_token_sequence(tokens, ['def', func_name]):
+ return False, [{'id' : 'no_func_name', 'args' : {'func_name' : func_name}}]
+
+ in_out = [
+ (220, 284),
+ (284, 220),
+ (1010, None),
+ (6, None),
+ (2620, 2924),
+ (1, None),
+ (10, None),
+ (1210, 1184)
+ ]
+
+ test_in = [(func_name+'(%s)'%str(l[0]), None) for l in in_out]
+ test_out = [l[1] for l in in_out]
+
+ answers = python(code=code, inputs=test_in, timeout=1.0)
n_correct = 0
+ tin, tout = None, None
+ for i, (ans, to) in enumerate(zip(answers, test_out)):
+ n_correct += ans[0] == to
+ if ans[0] != to:
+ tin = test_in[i][0]
+ tout = to
passed = n_correct == len(test_in)
- tin = None
- tout = None
hints = [{'id': 'test_results', 'args': {'passed': n_correct, 'total': len(test_in)}}]
if tin:
hints.append({'id': 'problematic_test_case', 'args': {'testin': str(tin), 'testout': str(tout)}})
diff --git a/python/problems/functions/friendly_numbers/en.py b/python/problems/functions/friendly_numbers/en.py
index ba740ae..c77dca1 100644
--- a/python/problems/functions/friendly_numbers/en.py
+++ b/python/problems/functions/friendly_numbers/en.py
@@ -1,8 +1,8 @@
# coding=utf-8
id = 233
-name = 'Friendly numbers'
-slug = 'Friendly numbers'
+name = 'Amicable numbers'
+slug = 'Amicable numbers'
description = '''\
<p>(translation missing)</p>'''
diff --git a/python/problems/functions/friendly_numbers/sl.py b/python/problems/functions/friendly_numbers/sl.py
index d1c15ff..51d47ae 100644
--- a/python/problems/functions/friendly_numbers/sl.py
+++ b/python/problems/functions/friendly_numbers/sl.py
@@ -12,12 +12,12 @@ description = '''\
<p>
220 in 284 sta prijateljski števili. Delitelji 220 so 1, 2, 4, 5, 10, 11, 20, 22, 44, 55 in 110.
Če jih seštejemo, dobimo 284. Delitelji 284 pa so 1, 2, 4, 71 in 142. Vsota teh števil pa je 220.
-Napiši funkcijo <code>friendly_number(n)</code>, ki vrne prijateljsko število številu <code>n</code>, če ga ima, oz.
+Napiši funkcijo <code>amicable_number(n)</code>, ki vrne prijateljsko število številu <code>n</code>, če ga ima, oz.
vrne <code>None</code>, če ga nima. Primer:
<pre>
->>> friendly_number(220)
+>>> amicable_number(220)
284
->>> friendly_number(222)
+>>> amicable_number(222)
None
</pre>
</p>