summaryrefslogtreecommitdiff
path: root/python/problems/functions
diff options
context:
space:
mode:
authorMartin <martin@leo.fri1.uni-lj.si>2015-10-09 16:35:23 +0200
committerMartin <martin@leo.fri1.uni-lj.si>2015-10-09 16:35:23 +0200
commit95e107bf9e6a288969e4a83aee1a7062990f3b67 (patch)
treef69b15164a30d464f6f7b340634095716344b1ec /python/problems/functions
parentfd31d7d74e58796f3a5a7c84b4b19cb4af59ef4c (diff)
Fixed testing for most problems.
Diffstat (limited to 'python/problems/functions')
-rw-r--r--python/problems/functions/assign_numbers/common.py24
-rw-r--r--python/problems/functions/body_mass_index/common.py27
-rw-r--r--python/problems/functions/body_mass_index_2/common.py26
-rw-r--r--python/problems/functions/common.py1
-rw-r--r--python/problems/functions/divisors/common.py30
-rw-r--r--python/problems/functions/divisors_sum/common.py28
-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
-rw-r--r--python/problems/functions/greatest/common.py4
-rw-r--r--python/problems/functions/greatest_absolutist/common.py4
-rw-r--r--python/problems/functions/greatest_negative/common.py4
-rw-r--r--python/problems/functions/palindrome/common.py31
-rw-r--r--python/problems/functions/palindromic_numbers/common.py28
-rw-r--r--python/problems/functions/perfect_numbers/common.py27
-rw-r--r--python/problems/functions/prime_numbers/common.py27
16 files changed, 266 insertions, 36 deletions
diff --git a/python/problems/functions/assign_numbers/common.py b/python/problems/functions/assign_numbers/common.py
index f00305a..c9e87bf 100644
--- a/python/problems/functions/assign_numbers/common.py
+++ b/python/problems/functions/assign_numbers/common.py
@@ -23,12 +23,30 @@ hint_type = {
}
def test(python, code):
- test_in = [1]
+ func_name = 'numbers'
+ 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 = [
+ ([], []),
+ ([1], [(0, 1)]),
+ ([5, 1, 4, 2, 3], [(0, 5), (1, 1), (2, 4), (3, 2), (4, 3)]),
+ ]
+
+ 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/body_mass_index/common.py b/python/problems/functions/body_mass_index/common.py
index fba7570..22defeb 100644
--- a/python/problems/functions/body_mass_index/common.py
+++ b/python/problems/functions/body_mass_index/common.py
@@ -23,12 +23,33 @@ hint_type = {
}
def test(python, code):
- test_in = [1]
+ func_name = 'bmi'
+ 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 = [
+ ([], []),
+ ([('Ana', 55, 165), ('Berta', 60, 153)],
+ [('Ana', 20.202020202020204), ('Berta', 25.63116749967961)]),
+ ([('Ana', 55, 165), ('Berta', 60, 153), ('Cilka', 70, 183)],
+ [('Ana', 20.202020202020204), ('Berta', 25.63116749967961), ('Cilka', 20.902385858042937)]),
+ ]
+
+ 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/body_mass_index_2/common.py b/python/problems/functions/body_mass_index_2/common.py
index 58c7ab1..c94b7d1 100644
--- a/python/problems/functions/body_mass_index_2/common.py
+++ b/python/problems/functions/body_mass_index_2/common.py
@@ -23,12 +23,32 @@ hint_type = {
}
def test(python, code):
- test_in = [1]
+ func_name = 'bmi2'
+ 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 = [
+ (([], [], []), []),
+ ((['Ana', 'Berta'], [55, 60], [165, 153]),
+ [('Ana', 20.202020202020204), ('Berta', 25.63116749967961)]),
+ ((['Ana', 'Berta', 'Cilka'], [55, 60, 70], [165, 153, 183]),
+ [('Ana', 20.202020202020204), ('Berta', 25.63116749967961), ('Cilka', 20.902385858042937)]),
+ ]
+
+ 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/common.py b/python/problems/functions/common.py
index 1367877..ede78e6 100644
--- a/python/problems/functions/common.py
+++ b/python/problems/functions/common.py
@@ -1 +1,2 @@
id = 17
+number = 4 \ No newline at end of file
diff --git a/python/problems/functions/divisors/common.py b/python/problems/functions/divisors/common.py
index c3e71d8..0b6ba0d 100644
--- a/python/problems/functions/divisors/common.py
+++ b/python/problems/functions/divisors/common.py
@@ -22,12 +22,36 @@ hint_type = {
}
def test(python, code):
- test_in = [1]
+ func_name = 'divisors'
+ 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 = [
+ (8, [1,2,4]),
+ (6, [1,2,3]),
+ (5, [1]),
+ (1, []),
+ (2, [1]),
+ (15, [1,3,5]),
+ (20, [1,2,4,5,10])
+ ]
+
+ 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)):
+ numbers = sorted(int(n) for n in get_numbers(ans[1]))
+ if numbers == to:
+ n_correct += 1
+ else:
+ 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/divisors_sum/common.py b/python/problems/functions/divisors_sum/common.py
index d6a2b88..256fdc3 100644
--- a/python/problems/functions/divisors_sum/common.py
+++ b/python/problems/functions/divisors_sum/common.py
@@ -24,12 +24,34 @@ hint_type = {
}
def test(python, code):
- test_in = [1]
+ func_name = 'divisors_sum'
+ 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 = [
+ (8, 7),
+ (6, 6),
+ (5, 1),
+ (1, 0),
+ (2, 1),
+ (15, 9),
+ (20, 22)
+ ]
+
+ 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/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>
diff --git a/python/problems/functions/greatest/common.py b/python/problems/functions/greatest/common.py
index 6857603..e6b7139 100644
--- a/python/problems/functions/greatest/common.py
+++ b/python/problems/functions/greatest/common.py
@@ -32,6 +32,10 @@ hint_type = {
}
def test(python, code):
+ tokens = get_tokens(code)
+ if not has_token_sequence(tokens, ['def', 'max_val']):
+ return False, [{'id' : 'no_func_name', 'args' : {'func_name' : 'max_val'}}]
+
test_lists = [[6, 4, 2, 0],
[4, 6, 2, 0],
[4, 2, 6, 0],
diff --git a/python/problems/functions/greatest_absolutist/common.py b/python/problems/functions/greatest_absolutist/common.py
index 2d80097..564d0c8 100644
--- a/python/problems/functions/greatest_absolutist/common.py
+++ b/python/problems/functions/greatest_absolutist/common.py
@@ -35,6 +35,10 @@ hint_type = {
def test(python, code):
+ tokens = get_tokens(code)
+ if not has_token_sequence(tokens, ['def', 'max_abs']):
+ return False, [{'id' : 'no_func_name', 'args' : {'func_name' : 'max_abs'}}]
+
test_lists = [[6, 4, 2, 0],
[4, 6, 2, 0],
[4, 2, 6, 0],
diff --git a/python/problems/functions/greatest_negative/common.py b/python/problems/functions/greatest_negative/common.py
index 5d65438..7ab3aca 100644
--- a/python/problems/functions/greatest_negative/common.py
+++ b/python/problems/functions/greatest_negative/common.py
@@ -35,6 +35,10 @@ hint_type = {
def test(python, code):
+ tokens = get_tokens(code)
+ if not has_token_sequence(tokens, ['def', 'max_neg']):
+ return False, [{'id' : 'no_func_name', 'args' : {'func_name' : 'max_neg'}}]
+
test_lists = [[6, 4, 2, 0],
[4, 6, 2, -1],
[4, -2, -6, 0],
diff --git a/python/problems/functions/palindrome/common.py b/python/problems/functions/palindrome/common.py
index e012e8d..9bd82f4 100644
--- a/python/problems/functions/palindrome/common.py
+++ b/python/problems/functions/palindrome/common.py
@@ -20,12 +20,37 @@ hint_type = {
}
def test(python, code):
- test_in = [1]
+ func_name = 'palindrome'
+ 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 = [
+ ('', True),
+ ('a', True),
+ ('aa', True),
+ ('ab', False),
+ ('aba', True),
+ ('abc', False),
+ ('abcdefedcba', True),
+ ('abcdefgedcba', False),
+ ('pericarezeracirep', True),
+ ('perica', False),
+ ]
+
+ 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/palindromic_numbers/common.py b/python/problems/functions/palindromic_numbers/common.py
index ba518c7..b649719 100644
--- a/python/problems/functions/palindromic_numbers/common.py
+++ b/python/problems/functions/palindromic_numbers/common.py
@@ -25,12 +25,34 @@ hint_type = {
}
def test(python, code):
- test_in = [1]
+ func_name = 'numbers'
+ 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 = [
+ (906609, True),
+ (123456, False),
+ (1, True),
+ (11, True),
+ (12, False),
+ (113, False),
+ (131, True)
+ ]
+
+ 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/perfect_numbers/common.py b/python/problems/functions/perfect_numbers/common.py
index ad1a7cd..64acb23 100644
--- a/python/problems/functions/perfect_numbers/common.py
+++ b/python/problems/functions/perfect_numbers/common.py
@@ -27,12 +27,33 @@ hint_type = {
}
def test(python, code):
- test_in = [1]
+ func_name = 'perfect'
+ 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 = [
+ (6, True),
+ (28, True),
+ (1, False),
+ (5, False),
+ (496, True),
+ (497, False),
+ ]
+
+ 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/prime_numbers/common.py b/python/problems/functions/prime_numbers/common.py
index 0447c61..6806a08 100644
--- a/python/problems/functions/prime_numbers/common.py
+++ b/python/problems/functions/prime_numbers/common.py
@@ -25,12 +25,33 @@ hint_type = {
}
def test(python, code):
- test_in = [1]
+ func_name = 'prime'
+ 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 = [
+ (3, [2]),
+ (10, [2, 3, 5, 7]),
+ (100, [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]),
+ ]
+
+ 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)):
+ numbers = sorted([int(n) for n in get_numbers(ans[1])])
+
+ if numbers == to:
+ n_correct += 1
+ else:
+ 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)}})