From bab0b0a2fe8b3aad853740750d4873fb929f5f41 Mon Sep 17 00:00:00 2001 From: Martin Date: Wed, 7 Oct 2015 16:07:05 +0200 Subject: Remove bold text since it looked strange. --- python/problems/while_and_if/buy_five/sl.py | 12 ++++++------ python/problems/while_and_if/checking_account/sl.py | 4 ++-- python/problems/while_and_if/competition/sl.py | 6 +++--- python/problems/while_and_if/consumers_anonymous/common.py | 2 +- python/problems/while_and_if/consumers_anonymous/sl.py | 10 +++++----- python/problems/while_and_if/minimax/common.py | 2 +- python/problems/while_and_if/minimax/sl.py | 2 +- python/problems/while_and_if/top_shop/common.py | 2 +- python/problems/while_and_if/top_shop/sl.py | 5 +++-- 9 files changed, 23 insertions(+), 22 deletions(-) (limited to 'python') diff --git a/python/problems/while_and_if/buy_five/sl.py b/python/problems/while_and_if/buy_five/sl.py index 22fa7b4..8008d91 100644 --- a/python/problems/while_and_if/buy_five/sl.py +++ b/python/problems/while_and_if/buy_five/sl.py @@ -22,7 +22,7 @@ Vsota: 16 ''' bad_solution = ['''\ -

Primer, kako NE reševati +

Primer, kako NE reševati

 cena1 = float(input('Cena artikla: '))
 cena2 = float(input('Cena artikla: '))
@@ -36,7 +36,7 @@ print ("Vsota: " + vsota)
 

Rešitev je slaba, saj imamo pet enakih vrstic! Uporabite zanko!

'''] main_plan = ['''\ -

Plan:

+

Plan:

 1. Ponavljaj 5x:
     2. Preberi ceno.
@@ -45,9 +45,9 @@ main_plan = ['''\
 
'''] while_clause = ['''\ -

Kako bi nekaj 5x ponovil?

''', +

Uporabi zanko while.

''', '''\ -

Zanka while ima naslednjo sintakso:

+

Zanka while ima naslednjo sintakso:

 while Pogoj:
     stavek 1
@@ -62,7 +62,7 @@ našem primeru s stavkom n.

''' ] reading_while = ['''\ -

Za večkratno branje želimo uporabiti zanko

''', +

Za večkratno branje želimo uporabiti zanko

''', '''\
@@ -94,7 +94,7 @@ while stevec < 5:
 ''']
 
 summation = ['''\
-

Računanje vsote bo najlažje sproti v zanki.

''', +

Računaj vsoto sproti v zanki.

''', '''\

Izmisli si spremenljivko, ki bo predstavljala vsoto, jo na diff --git a/python/problems/while_and_if/checking_account/sl.py b/python/problems/while_and_if/checking_account/sl.py index 2825431..91a877c 100644 --- a/python/problems/while_and_if/checking_account/sl.py +++ b/python/problems/while_and_if/checking_account/sl.py @@ -11,7 +11,7 @@ description = '''\

Državna agencija za varstvo potrošnikov je razpisala projekt za izdelavo programa, s katerimi bodo lahko potrošniki nadzorovali svoje tekoče račune. V program uporabniki vtipkavajo prejemke in izdatke (kot pozitivne in negativne zneske) na svojem tekočem računu. Program jim sproti izpisuje -stanje in se ustavi, ko je uporabnik v minusu za 100 evrov ali več.

+stanje in se ustavi, ko je uporabnik v minusu za 100 evrov ali več. Takrat naj program izpiše "Bankrot".

 Sprememba 23
 Stanje 23
@@ -32,7 +32,7 @@ Bankrot
 '''
 
 main_plan = ['''\
-

Plan

je enak kot pri prejšnjih nalogah, le vsebina je drugačna: +

Plan je enak kot pri prejšnjih nalogah, le vsebina je drugačna:

 1.Ponavljaj dokler ni bankrot
     2.Preberi ceno
diff --git a/python/problems/while_and_if/competition/sl.py b/python/problems/while_and_if/competition/sl.py
index 8d01ad4..2fedf14 100644
--- a/python/problems/while_and_if/competition/sl.py
+++ b/python/problems/while_and_if/competition/sl.py
@@ -21,7 +21,7 @@ Vsota: 7
 
''' main_plan = ['''\ -

Plan bo enak kot pri prejšnji nalogi, +

Plan bo enak kot pri prejšnji nalogi, le število ponavljanj se spremeni.

''', '''\
@@ -35,7 +35,7 @@ plan = [main_plan]
 
 
 while_clause = ['''\
-

Kako bi prebral 5 cen z uporabo zanke while?

''', +

Kako bi prebral N cen z uporabo zanke while?

''', '''\

Zanka while ima naslednjo sintakso:

@@ -52,7 +52,7 @@ našem primeru s stavkom n.

''' ] summation = ['''\ -

Računanje vsote bo najlažje sproti v zanki.

''', +

Računaj vsoto sproti v zanki.

''', '''\

Izmisli si spremenljivko, ki bo predstavljala vsoto, jo na diff --git a/python/problems/while_and_if/consumers_anonymous/common.py b/python/problems/while_and_if/consumers_anonymous/common.py index 07a0ebf..b955f49 100644 --- a/python/problems/while_and_if/consumers_anonymous/common.py +++ b/python/problems/while_and_if/consumers_anonymous/common.py @@ -111,7 +111,7 @@ def hint(python, code): return [{'id' : 'printing'}] # student does not print any values - if not get_numbers(answer[0][1]): + if len(get_numbers(answer[0][1])) < 2: return [{'id' : 'nonumber'}] # student's answer is not correct (three possibilities) diff --git a/python/problems/while_and_if/consumers_anonymous/sl.py b/python/problems/while_and_if/consumers_anonymous/sl.py index 284abbc..cc5bcb7 100644 --- a/python/problems/while_and_if/consumers_anonymous/sl.py +++ b/python/problems/while_and_if/consumers_anonymous/sl.py @@ -46,17 +46,17 @@ Porabili boste 10 evrov za 10 stvari. ''' main_plan = ['''\ -

Plan je enak kot pri prejšnjih nalogah: while zanka + izpis števca in vsote.

+

Plan je enak kot pri prejšnjih nalogah: while zanka + izpis števca in vsote.

'''] while_condition = ['''\ -

Pogoj v zanki while bo sestavljen iz več pogojev.

''', +

Pogoj v zanki while bo sestavljen iz več pogojev.

''', '''\

V Pythonu združujemo pogoje z logičnimi operatoriji and, or in not

''' '''\

Zanka se ustavi, če presežemo 100 EUR, če smo vpisali 0 ali kupili 10 stvari. -Vendar pazite: napisati moramo pogoj, kdaj se zanka nadaljuje!

''', +Vendar pazite: napisati moramo pogoj, kdaj se zanka nadaljuje!

''', '''\
 cena != 0 and vsota < 100 and artiklov < 10
@@ -110,10 +110,10 @@ hint = {
 Pravilna vsota [%=sum%], pravilno število stvari: [%=count%]'''],
 
     'final_hint': ['''\
-

Odlično! Naloga rešena.

+

Odlično! Naloga rešena.
Še zanimivost: v while zanki smo dobili ustavitveni pogoj tako, da smo negirali pogoj iz teksta (ali vnesemo 0 ali je vnešenih deset števil ali ko vsota cen doseže ali preseže 100 evrov). Pri tem smo ali (or) spremenili v in (and): -cena > 0 and stevec < 10 and vsota < 100. Temu pravimo De Morganov zakon. +cena > 0 and stevec < 10 and vsota < 100. Temu pravimo De Morganov zakon.

'''], 'eof_error':[mod.general_msg['eof_error'], diff --git a/python/problems/while_and_if/minimax/common.py b/python/problems/while_and_if/minimax/common.py index 71632b7..dcfb311 100644 --- a/python/problems/while_and_if/minimax/common.py +++ b/python/problems/while_and_if/minimax/common.py @@ -60,7 +60,7 @@ def test(python, code): n_correct = 0 tin = None for i, (output, correct) in enumerate(zip(outputs, test_out)): - if all(string_almost_equal(output, correct[i]) for i in range(4)): + if all(string_almost_equal(output, correct[i], prec=2) for i in range(4)): n_correct += 1 else: tin = test_in[i][1] diff --git a/python/problems/while_and_if/minimax/sl.py b/python/problems/while_and_if/minimax/sl.py index a76bd2e..2b07efa 100644 --- a/python/problems/while_and_if/minimax/sl.py +++ b/python/problems/while_and_if/minimax/sl.py @@ -22,7 +22,7 @@ Najvišja cena: 4 ''' main_plan = ['''\ -

Plan:

+

Plan:

 1. Ponavljaj dokler je cena večja od 0:
     2. Preberi ceno.
diff --git a/python/problems/while_and_if/top_shop/common.py b/python/problems/while_and_if/top_shop/common.py
index 115dc9e..887d43e 100644
--- a/python/problems/while_and_if/top_shop/common.py
+++ b/python/problems/while_and_if/top_shop/common.py
@@ -55,7 +55,7 @@ def test(python, code):
     n_correct = 0
     tin = None
     for i, (output, correct) in enumerate(zip(outputs, test_out)):
-        if all(string_almost_equal(output, correct[i]) for i in range(2)):
+        if all(string_almost_equal(output, correct[i], prec=2) for i in range(2)):
             n_correct += 1
         else:
             tin = test_in[i][1]
diff --git a/python/problems/while_and_if/top_shop/sl.py b/python/problems/while_and_if/top_shop/sl.py
index ee9d02d..b577633 100644
--- a/python/problems/while_and_if/top_shop/sl.py
+++ b/python/problems/while_and_if/top_shop/sl.py
@@ -24,7 +24,7 @@ Poprečna cena: 2.33333333333
 '''
 
 main_plan = ['''\
-

Plan:

+

Plan:

 1. Ponavljaj dokler je cena večja od 0:
     2. Preberi ceno.
@@ -94,7 +94,8 @@ while cena != 0:
     ...'''],
 
     'final_hint': ['''\
-

Odlično! Kaj bi pa moral narediti, da bi število -1 pomenilo konec?

''', +

Odlično, program je pravilen!
+Kaj bi pa moral narediti, da bi število -1 pomenilo konec?

''', '''\

Spremeniti pogoj in paziti, da se vrednost -1 ne prišteje vsoti!

'''], -- cgit v1.2.1 From 1f9f6de923e4b490c42a44d660b3e32dbe11426e Mon Sep 17 00:00:00 2001 From: Martin Date: Thu, 8 Oct 2015 11:17:16 +0200 Subject: Added final hint to contains_42. --- .../introduction/fahrenheit_to_celsius/common.py | 4 ++++ .../introduction/fahrenheit_to_celsius/sl.py | 2 +- python/problems/lists_and_for/contains_42/common.py | 14 +++++++++++++- python/problems/lists_and_for/contains_42/sl.py | 21 +++++++++++++++------ 4 files changed, 33 insertions(+), 8 deletions(-) (limited to 'python') diff --git a/python/problems/introduction/fahrenheit_to_celsius/common.py b/python/problems/introduction/fahrenheit_to_celsius/common.py index 6549c32..918c643 100644 --- a/python/problems/introduction/fahrenheit_to_celsius/common.py +++ b/python/problems/introduction/fahrenheit_to_celsius/common.py @@ -3,6 +3,7 @@ from python.util import has_token_sequence, string_almost_equal, \ string_contains_number, get_tokens, get_numbers, get_exception_desc from server.hints import Hint +import re id = 180 group = 'introduction' @@ -87,6 +88,9 @@ def hint(python, code): if not has_token_sequence(tokens, ['input']): return [{'id': 'no_input_call'}] + if not re.findall(r'=[^\n]*?input', code): + return [{'id': 'no_input_call'}] + # if tokens * or / or = are not in code, we have to teach them how to # evaluate expressions. if (not has_token_sequence(tokens, ['/']) or diff --git a/python/problems/introduction/fahrenheit_to_celsius/sl.py b/python/problems/introduction/fahrenheit_to_celsius/sl.py index b61c436..ae3db5f 100644 --- a/python/problems/introduction/fahrenheit_to_celsius/sl.py +++ b/python/problems/introduction/fahrenheit_to_celsius/sl.py @@ -12,7 +12,7 @@ stopinjah, program pa jo izpiše v Celzijevih. Med temperaturama pretvarjamo po formuli C = 5/9 (F – 32).

''' no_input_call = ['''\ -

Uporabnika nekaj vprašamo s funkcijo input.

''', +

Uporabi funkcijo input in shrani rezultat.

''', '''\

Funkcija input sprejme niz (angl. string), ki se prikaže uporabniku kot vprašanje in vrača, kar je uporabnik napisal.

''', diff --git a/python/problems/lists_and_for/contains_42/common.py b/python/problems/lists_and_for/contains_42/common.py index f91465f..d4c4af8 100644 --- a/python/problems/lists_and_for/contains_42/common.py +++ b/python/problems/lists_and_for/contains_42/common.py @@ -25,10 +25,15 @@ hint_type = { 'for_loop': Hint('for_loop'), 'if_clause': Hint('if_clause'), 'printing': Hint('printing'), - 'print_out_for': Hint('print_out_for') + 'print_out_for': Hint('print_out_for'), + 'seen_42': Hint('seen_42'), + 'final_hint': Hint('final_hint'), + 'final_hint_nobreak': Hint('final_hint_nobreak') } def test(python, code): + tokens = get_tokens(code) + test_xs = [[42, 5, 4, -7, 2, 12, -3, -4, 11, 42, 2], [42, 5, 4, -7, 2, 12, -3, -4, 11, 2], [5, 4, -7, 2, 12, -3, -4, 11, 2], @@ -71,6 +76,11 @@ def test(python, code): hints = [{'id': 'test_results', 'args': {'passed': n_correct, 'total': len(test_xs)}}] if tin: hints.append({'id': 'problematic_test_case', 'args': {'testin': str(tin), 'testout': str(tout)}}) + else: + if has_token_sequence(tokens, ['break']): + hints.append({'id' : 'final_hint'}) + else: + hints.append({'id' : 'final_hint_nobreak'}) return passed, hints def hint(python, code): @@ -101,5 +111,7 @@ def hint(python, code): if not has_token_sequence(tokens, ['\n', 'print']): return [{'id' : 'print_out_for'}] + if not has_token_sequence(tokens, ['=', 'True']): + return [{'id' : 'seen_42'}] return None diff --git a/python/problems/lists_and_for/contains_42/sl.py b/python/problems/lists_and_for/contains_42/sl.py index fe6b57e..1a40549 100644 --- a/python/problems/lists_and_for/contains_42/sl.py +++ b/python/problems/lists_and_for/contains_42/sl.py @@ -21,10 +21,10 @@ Seveda mora program delati za poljubne sezname in ne samo za seznam iz primera.< for_loop = ['''\

Pregledati bo treba vse elemente v seznamu xs''', '''\ -

Najlažje bo s for zanko. +

Najlažje bo s for zanko. ''', '''\ -

Poskusii naslednji dve vrstici:

+

Poskusi naslednji dve vrstici:

 for x in xs:
     print (x)
@@ -36,9 +36,9 @@ Kaj naj Python naredi s to spremenljivko, je zapisano v zamaknjenih vrsticah.
 Tokrat vrednost le izpišemo.

'''] if_clause = ['''\ -

Preveri, ali imamo število 42?

''', +

Preveri, ali imamo število 42?

''', '''\ -

Uporabi pogojni stavek if!

''', +

Uporabi pogojni stavek if!

''', '''\
 if x == 42:
@@ -57,7 +57,7 @@ videl42 = False
 

in jo tekom zanke ustrezno spremenimo.'''] plan = ['''\ -

Plan. Kako bi se tega lotil ročno? Nekako takole:

+

Kako bi se tega lotil ročno? Nekako takole:

 Za vsak element v seznamu
     Poglej, ali je 42?
@@ -82,6 +82,15 @@ hint = {
 

Izpiši rezultat.

'''], 'print_out_for': ['''\ -

Pazi, da izpišeš rezultat izven zanke!

'''] +

Pazi, da izpišeš rezultat izven zanke!

'''], + 'seen_42': seen_42, + + 'final_hint': ['''\ +

Program deluje pravilno!

'''], + + 'final_hint_nobreak': ['''\ +

Program deluje pravilno!
+Namig za bolj učinkovit program: ni vedno potrebno, da se program pregleda vse elemente. Če najdemo vrednost 42, nam ni +potrebno več naprej iskati - zanko lahko prekinemo z ukazom break

'''], } -- cgit v1.2.1 From 45474b5c8cefa916aeb64e1c15a79f647a86d58c Mon Sep 17 00:00:00 2001 From: Martin Date: Thu, 8 Oct 2015 12:02:43 +0200 Subject: Added final hints. --- python/problems/lists_and_for/contains_42/sl.py | 6 ++++++ .../problems/lists_and_for/contains_string/common.py | 10 +++++++--- python/problems/lists_and_for/contains_string/sl.py | 20 +++++++++++++++++--- python/problems/lists_and_for/counting/sl.py | 17 ++++++++++++----- python/problems/lists_and_for/divisors/sl.py | 9 +++++---- 5 files changed, 47 insertions(+), 15 deletions(-) (limited to 'python') diff --git a/python/problems/lists_and_for/contains_42/sl.py b/python/problems/lists_and_for/contains_42/sl.py index 1a40549..245d346 100644 --- a/python/problems/lists_and_for/contains_42/sl.py +++ b/python/problems/lists_and_for/contains_42/sl.py @@ -93,4 +93,10 @@ hint = {

Program deluje pravilno!
Namig za bolj učinkovit program: ni vedno potrebno, da se program pregleda vse elemente. Če najdemo vrednost 42, nam ni potrebno več naprej iskati - zanko lahko prekinemo z ukazom break

'''], + + 'problematic_test_case': ['''\ +

Program ne dela pravilno!
+Poskusi xs = [%=testin%]
+pravilen rezultat: [%=testout%]

+'''], } diff --git a/python/problems/lists_and_for/contains_string/common.py b/python/problems/lists_and_for/contains_string/common.py index 29bc9f2..1f19d7f 100644 --- a/python/problems/lists_and_for/contains_string/common.py +++ b/python/problems/lists_and_for/contains_string/common.py @@ -25,7 +25,8 @@ hint_type = { 'for_loop': Hint('for_loop'), 'if_clause': Hint('if_clause'), 'printing': Hint('printing'), - 'print_out_for': Hint('print_out_for') + 'print_out_for': Hint('print_out_for'), + 'final_hint': Hint('final_hint') } def test(python, code): @@ -36,12 +37,12 @@ def test(python, code): [], ['Waldo']] test_out = [ + False, True, True, True, False, - True, - False + True ] n_correct = 0 @@ -69,6 +70,9 @@ def test(python, code): hints = [{'id': 'test_results', 'args': {'passed': n_correct, 'total': len(test_xs)}}] if tin: hints.append({'id': 'problematic_test_case', 'args': {'testin': str(tin), 'testout': str(tout)}}) + if passed: + hints.append({'id': 'final_hint'}) + return passed, hints def hint(python, code): diff --git a/python/problems/lists_and_for/contains_string/sl.py b/python/problems/lists_and_for/contains_string/sl.py index d177463..49f0ed0 100644 --- a/python/problems/lists_and_for/contains_string/sl.py +++ b/python/problems/lists_and_for/contains_string/sl.py @@ -20,7 +20,7 @@ xs = ['foo', 'bar', 'baz', 'Waldo', 'foobar'] for_loop = ['''\

Pregledati bo treba vse elemente v seznamu xs''', '''\ -

Najlažje bo s for zanko. +

Najlažje bo s for zanko. ''', '''\

Poskusii naslednji dve vrstici:

@@ -43,7 +43,7 @@ if x == 'Waldo': plan = ['''\ -

Plan je enak kot pri prvi nalogi: +

Plan je enak kot pri prvi nalogi:

 Za vsak element v seznamu
     Poglej, ali je element enak 'Waldo'?
@@ -66,6 +66,20 @@ hint = {
 

Izpiši rezultat!

'''], 'print_out_for': ['''\ -

Pazi, da izpišeš rezultat izven zanke!

'''] +

Pazi, da izpišeš rezultat izven zanke!

'''], + + 'problematic_test_case': ['''\ +

Program ne dela pravilno!
+Poskusi xs = [%=testin%]
+pravilen rezultat: [%=testout%]

+'''], + + 'final_hint': ['''\ +

Program deluje pravilno!
+Nalogo lahko rešiš hitreje z operatorjem in

+
+xs = ['foo', 'bar', 'baz', 'Waldo', 'foobar']
+print('Waldo' in xs)
+
'''], } diff --git a/python/problems/lists_and_for/counting/sl.py b/python/problems/lists_and_for/counting/sl.py index 67dc323..c2fc820 100644 --- a/python/problems/lists_and_for/counting/sl.py +++ b/python/problems/lists_and_for/counting/sl.py @@ -80,11 +80,18 @@ hint = { 'print_out_for': ['''\

Pazi, da izpišeš rezultat izven zanke!

'''], - 'final_hint:': ['''\ -

Nalogo lahko rešiš bistveno hitreje, če poznaš metodo count

+ 'final_hint': ['''\ +

Program je pravilen!
+Nalogo lahko rešiš hitreje, če poznaš metodo count

- xs = [42, 5, 4, -7, 2, 12, -3, -4, 11, 42, 2]
- print('Število 42 se v seznamu pojavi', xs.count(42), 'krat.')
-
'''] +xs = [42, 5, 4, -7, 2, 12, -3, -4, 11, 42, 2] +print('Število 42 se v seznamu pojavi', xs.count(42), 'krat.') +
'''], + + 'problematic_test_case': ['''\ +

Program ne dela pravilno!
+Poskusi xs = [%=testin%]
+pravilen rezultat: [%=testout%]

+'''], } diff --git a/python/problems/lists_and_for/divisors/sl.py b/python/problems/lists_and_for/divisors/sl.py index 5ba36e1..cddeae8 100644 --- a/python/problems/lists_and_for/divisors/sl.py +++ b/python/problems/lists_and_for/divisors/sl.py @@ -74,15 +74,16 @@ hint = { 'last_number': ['''\

Število deli samega sebe!

'''], - 'final_hint:': ['''\ + 'final_hint': ['''\

Naloga rešena!

-

Dejansko ne potrebujemo pregledati vseh števil med 1 in n-1, +

Dejansko ne potrebujemo pregledati vseh števil med 1 in n-1, dovolj bo če gremo do kvadratnega korena od števila n:

-from math import sqrt
+from math import *
+
 n = int(input('Vnesi število: '))
-for i in range(1, sqrt(n)+1):
+for i in range(1, int(sqrt(n)+1)):
     if n % i == 0:
         print(i, n/i)
 
'''], -- cgit v1.2.1 From ce3b6703c153ba5c827996bfa8fd9bfa85fe2adb Mon Sep 17 00:00:00 2001 From: Timotej Lazar Date: Thu, 8 Oct 2015 16:02:17 +0200 Subject: Remove unneeded id field from {en,sl}.py files --- python/problems/functions/greatest/en.py | 1 - python/problems/functions/greatest/sl.py | 1 - python/problems/functions/greatest_absolutist/en.py | 1 - python/problems/functions/greatest_absolutist/sl.py | 1 - python/problems/functions/greatest_negative/en.py | 1 - python/problems/functions/greatest_negative/sl.py | 1 - python/problems/introduction/average/en.py | 1 - python/problems/introduction/average/sl.py | 1 - python/problems/introduction/ballistics/en.py | 1 - python/problems/introduction/ballistics/sl.py | 1 - python/problems/introduction/fahrenheit_to_celsius/en.py | 1 - python/problems/introduction/fahrenheit_to_celsius/sl.py | 1 - python/problems/introduction/fast_fingers/en.py | 1 - python/problems/introduction/fast_fingers/sl.py | 1 - python/problems/introduction/fast_fingers_2/en.py | 1 - python/problems/introduction/fast_fingers_2/sl.py | 1 - python/problems/introduction/pythagorean_theorem/en.py | 1 - python/problems/introduction/pythagorean_theorem/sl.py | 1 - python/problems/lists_and_for/contains_42/en.py | 1 - python/problems/lists_and_for/contains_42/sl.py | 1 - python/problems/lists_and_for/contains_string/en.py | 1 - python/problems/lists_and_for/contains_string/sl.py | 1 - python/problems/lists_and_for/counting/en.py | 1 - python/problems/lists_and_for/counting/sl.py | 1 - python/problems/lists_and_for/divisors/en.py | 1 - python/problems/lists_and_for/divisors/sl.py | 1 - python/problems/while_and_if/buy_five/en.py | 1 - python/problems/while_and_if/buy_five/sl.py | 1 - python/problems/while_and_if/checking_account/en.py | 1 - python/problems/while_and_if/checking_account/sl.py | 1 - python/problems/while_and_if/competition/en.py | 1 - python/problems/while_and_if/competition/sl.py | 1 - python/problems/while_and_if/consumers_anonymous/en.py | 1 - python/problems/while_and_if/consumers_anonymous/sl.py | 1 - python/problems/while_and_if/minimax/en.py | 1 - python/problems/while_and_if/minimax/sl.py | 1 - python/problems/while_and_if/top_shop/en.py | 1 - python/problems/while_and_if/top_shop/sl.py | 1 - 38 files changed, 38 deletions(-) (limited to 'python') diff --git a/python/problems/functions/greatest/en.py b/python/problems/functions/greatest/en.py index 8a0c883..acf4672 100644 --- a/python/problems/functions/greatest/en.py +++ b/python/problems/functions/greatest/en.py @@ -1,6 +1,5 @@ # coding=utf-8 -id = 195 name = 'Maximum number' slug = 'Maximum number' diff --git a/python/problems/functions/greatest/sl.py b/python/problems/functions/greatest/sl.py index a7916a5..12e07fe 100644 --- a/python/problems/functions/greatest/sl.py +++ b/python/problems/functions/greatest/sl.py @@ -3,7 +3,6 @@ import server mod = server.problems.load_language('python', 'sl') -id = 195 name = 'Največji' slug = 'Največji' diff --git a/python/problems/functions/greatest_absolutist/en.py b/python/problems/functions/greatest_absolutist/en.py index 03614e7..1ede4a9 100644 --- a/python/problems/functions/greatest_absolutist/en.py +++ b/python/problems/functions/greatest_absolutist/en.py @@ -1,6 +1,5 @@ # coding=utf-8 -id = 196 name = 'Greatest absolutist' slug = 'Greatest absolutist' diff --git a/python/problems/functions/greatest_absolutist/sl.py b/python/problems/functions/greatest_absolutist/sl.py index d51cd96..45440b2 100644 --- a/python/problems/functions/greatest_absolutist/sl.py +++ b/python/problems/functions/greatest_absolutist/sl.py @@ -3,7 +3,6 @@ import server mod = server.problems.load_language('python', 'sl') -id = 196 name = 'Največji absolutist' slug = 'Največji absolutist' diff --git a/python/problems/functions/greatest_negative/en.py b/python/problems/functions/greatest_negative/en.py index a57cb1f..5c2919a 100644 --- a/python/problems/functions/greatest_negative/en.py +++ b/python/problems/functions/greatest_negative/en.py @@ -1,6 +1,5 @@ # coding=utf-8 -id = 197 name = 'Greatest negativist' slug = 'Greatest negativist' diff --git a/python/problems/functions/greatest_negative/sl.py b/python/problems/functions/greatest_negative/sl.py index ea1e47c..31f1fd6 100644 --- a/python/problems/functions/greatest_negative/sl.py +++ b/python/problems/functions/greatest_negative/sl.py @@ -3,7 +3,6 @@ import server mod = server.problems.load_language('python', 'sl') -id = 197 name = 'Največji negativec' slug = 'Največji negativec' diff --git a/python/problems/introduction/average/en.py b/python/problems/introduction/average/en.py index 7742a7d..5ce621e 100644 --- a/python/problems/introduction/average/en.py +++ b/python/problems/introduction/average/en.py @@ -1,6 +1,5 @@ # coding=utf-8 -id = 1000 name = 'Average grade' slug = 'Average grade' diff --git a/python/problems/introduction/average/sl.py b/python/problems/introduction/average/sl.py index d7eafbb..540a9cc 100644 --- a/python/problems/introduction/average/sl.py +++ b/python/problems/introduction/average/sl.py @@ -2,7 +2,6 @@ import server mod = server.problems.load_language('python', 'sl') -id = 189 name = 'Povprečna ocena' slug = 'Povprečna ocena' diff --git a/python/problems/introduction/ballistics/en.py b/python/problems/introduction/ballistics/en.py index 34dca8a..6fab80f 100644 --- a/python/problems/introduction/ballistics/en.py +++ b/python/problems/introduction/ballistics/en.py @@ -1,6 +1,5 @@ # coding=utf-8 -id = 1000 name = 'Ballistics' slug = 'Ballistics' diff --git a/python/problems/introduction/ballistics/sl.py b/python/problems/introduction/ballistics/sl.py index fa0fe5d..ee073f8 100644 --- a/python/problems/introduction/ballistics/sl.py +++ b/python/problems/introduction/ballistics/sl.py @@ -2,7 +2,6 @@ import server mod = server.problems.load_language('python', 'sl') -id = 187 name = 'Topologija' slug = 'Topologija' diff --git a/python/problems/introduction/fahrenheit_to_celsius/en.py b/python/problems/introduction/fahrenheit_to_celsius/en.py index a2af212..5d7522e 100644 --- a/python/problems/introduction/fahrenheit_to_celsius/en.py +++ b/python/problems/introduction/fahrenheit_to_celsius/en.py @@ -1,6 +1,5 @@ # coding=utf-8 -id = 180 name = 'Converting Fahrenheit to Celsius' slug = 'Converting Fahrenheit to Celsius' diff --git a/python/problems/introduction/fahrenheit_to_celsius/sl.py b/python/problems/introduction/fahrenheit_to_celsius/sl.py index ae3db5f..f5ce4a4 100644 --- a/python/problems/introduction/fahrenheit_to_celsius/sl.py +++ b/python/problems/introduction/fahrenheit_to_celsius/sl.py @@ -2,7 +2,6 @@ import server mod = server.problems.load_language('python', 'sl') -id = 180 name = 'Pretvarjanje iz Fahrenheitov v Celzije' slug = 'Pretvarjanje iz Fahrenheitov v Celzije' diff --git a/python/problems/introduction/fast_fingers/en.py b/python/problems/introduction/fast_fingers/en.py index de07494..ab4637a 100644 --- a/python/problems/introduction/fast_fingers/en.py +++ b/python/problems/introduction/fast_fingers/en.py @@ -1,6 +1,5 @@ # coding=utf-8 -id = 1000 name = 'Fast fingers' slug = 'Fast fingers' diff --git a/python/problems/introduction/fast_fingers/sl.py b/python/problems/introduction/fast_fingers/sl.py index 0b38a3a..c181951 100644 --- a/python/problems/introduction/fast_fingers/sl.py +++ b/python/problems/introduction/fast_fingers/sl.py @@ -2,7 +2,6 @@ import server mod = server.problems.load_language('python', 'sl') -id = 190 name = 'Hitri prsti' slug = 'Hitri prsti' diff --git a/python/problems/introduction/fast_fingers_2/en.py b/python/problems/introduction/fast_fingers_2/en.py index 636f4d0..2172127 100644 --- a/python/problems/introduction/fast_fingers_2/en.py +++ b/python/problems/introduction/fast_fingers_2/en.py @@ -1,6 +1,5 @@ # coding=utf-8 -id = 1000 name = 'Fast fingers 2' slug = 'Fast fingers 2' diff --git a/python/problems/introduction/fast_fingers_2/sl.py b/python/problems/introduction/fast_fingers_2/sl.py index 125bd24..6606fbe 100644 --- a/python/problems/introduction/fast_fingers_2/sl.py +++ b/python/problems/introduction/fast_fingers_2/sl.py @@ -2,7 +2,6 @@ import server mod = server.problems.load_language('python', 'sl') -id = 191 name = 'Hitri prsti 2' slug = 'Hitri prsti 2' diff --git a/python/problems/introduction/pythagorean_theorem/en.py b/python/problems/introduction/pythagorean_theorem/en.py index b3c6117..79d7e39 100644 --- a/python/problems/introduction/pythagorean_theorem/en.py +++ b/python/problems/introduction/pythagorean_theorem/en.py @@ -1,6 +1,5 @@ # coding=utf-8 -id = 1000 name = 'Pythagorean theorem' slug = 'Pythagorean theorem' diff --git a/python/problems/introduction/pythagorean_theorem/sl.py b/python/problems/introduction/pythagorean_theorem/sl.py index 21aec9a..9500651 100644 --- a/python/problems/introduction/pythagorean_theorem/sl.py +++ b/python/problems/introduction/pythagorean_theorem/sl.py @@ -2,7 +2,6 @@ import server mod = server.problems.load_language('python', 'sl') -id = 188 name = 'Pitagorov izrek' slug = 'Pitagorov izrek' diff --git a/python/problems/lists_and_for/contains_42/en.py b/python/problems/lists_and_for/contains_42/en.py index 805b37c..7794063 100644 --- a/python/problems/lists_and_for/contains_42/en.py +++ b/python/problems/lists_and_for/contains_42/en.py @@ -1,6 +1,5 @@ # coding=utf-8 -id = 193 name = 'Contains 42' slug = 'Contains 42' diff --git a/python/problems/lists_and_for/contains_42/sl.py b/python/problems/lists_and_for/contains_42/sl.py index 245d346..65353a7 100644 --- a/python/problems/lists_and_for/contains_42/sl.py +++ b/python/problems/lists_and_for/contains_42/sl.py @@ -3,7 +3,6 @@ import server mod = server.problems.load_language('python', 'sl') -id = 193 name = 'Vsebuje' slug = 'Vsebuje' diff --git a/python/problems/lists_and_for/contains_string/en.py b/python/problems/lists_and_for/contains_string/en.py index fa17867..b57be95 100644 --- a/python/problems/lists_and_for/contains_string/en.py +++ b/python/problems/lists_and_for/contains_string/en.py @@ -1,6 +1,5 @@ # coding=utf-8 -id = 194 name = 'Contains string' slug = 'Contains string' diff --git a/python/problems/lists_and_for/contains_string/sl.py b/python/problems/lists_and_for/contains_string/sl.py index 49f0ed0..7061c59 100644 --- a/python/problems/lists_and_for/contains_string/sl.py +++ b/python/problems/lists_and_for/contains_string/sl.py @@ -3,7 +3,6 @@ import server mod = server.problems.load_language('python', 'sl') -id = 194 name = 'Vsebuje niz' slug = 'Vsebuje niz' diff --git a/python/problems/lists_and_for/counting/en.py b/python/problems/lists_and_for/counting/en.py index 19568e3..223a611 100644 --- a/python/problems/lists_and_for/counting/en.py +++ b/python/problems/lists_and_for/counting/en.py @@ -1,6 +1,5 @@ # coding=utf-8 -id = 203 name = 'Counting' slug = 'Counting' diff --git a/python/problems/lists_and_for/counting/sl.py b/python/problems/lists_and_for/counting/sl.py index c2fc820..926d2c6 100644 --- a/python/problems/lists_and_for/counting/sl.py +++ b/python/problems/lists_and_for/counting/sl.py @@ -3,7 +3,6 @@ import server mod = server.problems.load_language('python', 'sl') -id = 203 name = 'Štej' slug = 'Štej' diff --git a/python/problems/lists_and_for/divisors/en.py b/python/problems/lists_and_for/divisors/en.py index e98e9a7..8f4dbeb 100644 --- a/python/problems/lists_and_for/divisors/en.py +++ b/python/problems/lists_and_for/divisors/en.py @@ -1,6 +1,5 @@ # coding=utf-8 -id = 204 name = 'Divisors' slug = 'Divisors' diff --git a/python/problems/lists_and_for/divisors/sl.py b/python/problems/lists_and_for/divisors/sl.py index cddeae8..11bfb40 100644 --- a/python/problems/lists_and_for/divisors/sl.py +++ b/python/problems/lists_and_for/divisors/sl.py @@ -3,7 +3,6 @@ import server mod = server.problems.load_language('python', 'sl') -id = 204 name = 'Delitelji' slug = 'Delitelji' diff --git a/python/problems/while_and_if/buy_five/en.py b/python/problems/while_and_if/buy_five/en.py index 7e522da..9ad1f06 100644 --- a/python/problems/while_and_if/buy_five/en.py +++ b/python/problems/while_and_if/buy_five/en.py @@ -1,6 +1,5 @@ # coding=utf-8 -id = 185 name = 'Buy five' slug = 'Buy five' diff --git a/python/problems/while_and_if/buy_five/sl.py b/python/problems/while_and_if/buy_five/sl.py index 8008d91..3dbc9d3 100644 --- a/python/problems/while_and_if/buy_five/sl.py +++ b/python/problems/while_and_if/buy_five/sl.py @@ -2,7 +2,6 @@ import server mod = server.problems.load_language('python', 'sl') -id = 185 name = 'Blagajna "vse po pet"' slug = 'Blagajna "vse po pet"' diff --git a/python/problems/while_and_if/checking_account/en.py b/python/problems/while_and_if/checking_account/en.py index 1d36474..12ecf28 100644 --- a/python/problems/while_and_if/checking_account/en.py +++ b/python/problems/while_and_if/checking_account/en.py @@ -1,6 +1,5 @@ # coding=utf-8 -id = 199 name = 'Checking Account' slug = 'Checking Account' diff --git a/python/problems/while_and_if/checking_account/sl.py b/python/problems/while_and_if/checking_account/sl.py index 91a877c..86f973b 100644 --- a/python/problems/while_and_if/checking_account/sl.py +++ b/python/problems/while_and_if/checking_account/sl.py @@ -2,7 +2,6 @@ import server mod = server.problems.load_language('python', 'sl') -id = 200 name = 'Tekoči račun' slug = 'Tekoči račun' diff --git a/python/problems/while_and_if/competition/en.py b/python/problems/while_and_if/competition/en.py index f6399a2..215665c 100644 --- a/python/problems/while_and_if/competition/en.py +++ b/python/problems/while_and_if/competition/en.py @@ -1,6 +1,5 @@ # coding=utf-8 -id = 185 name = 'Competition' slug = 'Competition' diff --git a/python/problems/while_and_if/competition/sl.py b/python/problems/while_and_if/competition/sl.py index 2fedf14..195b51f 100644 --- a/python/problems/while_and_if/competition/sl.py +++ b/python/problems/while_and_if/competition/sl.py @@ -3,7 +3,6 @@ import server mod = server.problems.load_language('python', 'sl') -id = 192 name = 'Blagajna "konkurenca"' slug = 'Blagajna "konkurenca"' diff --git a/python/problems/while_and_if/consumers_anonymous/en.py b/python/problems/while_and_if/consumers_anonymous/en.py index 6331570..49fe465 100644 --- a/python/problems/while_and_if/consumers_anonymous/en.py +++ b/python/problems/while_and_if/consumers_anonymous/en.py @@ -2,7 +2,6 @@ import server mod = server.problems.load_language('python', 'sl') -id = 201 name = 'Consumers Anonymous' slug = 'Consumers Anonymous' diff --git a/python/problems/while_and_if/consumers_anonymous/sl.py b/python/problems/while_and_if/consumers_anonymous/sl.py index cc5bcb7..131a13b 100644 --- a/python/problems/while_and_if/consumers_anonymous/sl.py +++ b/python/problems/while_and_if/consumers_anonymous/sl.py @@ -2,7 +2,6 @@ import server mod = server.problems.load_language('python', 'sl') -id = 201 name = 'Klub anonimnih potrošnikov' slug = 'Klub anonimnih potrošnikov' diff --git a/python/problems/while_and_if/minimax/en.py b/python/problems/while_and_if/minimax/en.py index 10689ec..2aee417 100644 --- a/python/problems/while_and_if/minimax/en.py +++ b/python/problems/while_and_if/minimax/en.py @@ -1,6 +1,5 @@ # coding=utf-8 -id = 200 name = 'Minimax' slug = 'Minimax' diff --git a/python/problems/while_and_if/minimax/sl.py b/python/problems/while_and_if/minimax/sl.py index 2b07efa..0d934b8 100644 --- a/python/problems/while_and_if/minimax/sl.py +++ b/python/problems/while_and_if/minimax/sl.py @@ -2,7 +2,6 @@ import server mod = server.problems.load_language('python', 'sl') -id = 199 name = 'Blagajna "minimax"' slug = 'Blagajna "minimax"' diff --git a/python/problems/while_and_if/top_shop/en.py b/python/problems/while_and_if/top_shop/en.py index a69ae9a..b8e5119 100644 --- a/python/problems/while_and_if/top_shop/en.py +++ b/python/problems/while_and_if/top_shop/en.py @@ -1,6 +1,5 @@ # coding=utf-8 -id = 198 name = 'Top shop' slug = 'Top shop' diff --git a/python/problems/while_and_if/top_shop/sl.py b/python/problems/while_and_if/top_shop/sl.py index b577633..334736c 100644 --- a/python/problems/while_and_if/top_shop/sl.py +++ b/python/problems/while_and_if/top_shop/sl.py @@ -2,7 +2,6 @@ import server mod = server.problems.load_language('python', 'sl') -id = 198 name = 'Blagajna "top shop"' slug = 'Blagajna "top shop"' -- cgit v1.2.1 From 3d0fde9ac8bc568845cfef8391ea0f9b0fe2f4e6 Mon Sep 17 00:00:00 2001 From: Timotej Lazar Date: Thu, 8 Oct 2015 16:13:35 +0200 Subject: Add language/group IDs and group numbers for Prolog --- python/common.py | 2 ++ python/problems/functions/common.py | 1 + python/problems/introduction/common.py | 2 ++ python/problems/lists_and_for/common.py | 1 + python/problems/while_and_if/common.py | 1 + 5 files changed, 7 insertions(+) create mode 100644 python/problems/functions/common.py create mode 100644 python/problems/introduction/common.py create mode 100644 python/problems/lists_and_for/common.py create mode 100644 python/problems/while_and_if/common.py (limited to 'python') diff --git a/python/common.py b/python/common.py index c754a1a..2d89c19 100644 --- a/python/common.py +++ b/python/common.py @@ -3,6 +3,8 @@ import ast from server.hints import Hint +id = 2 + hint_type = { 'no_hint': Hint('no_hint'), 'program_already_correct': Hint('program_already_correct'), diff --git a/python/problems/functions/common.py b/python/problems/functions/common.py new file mode 100644 index 0000000..1367877 --- /dev/null +++ b/python/problems/functions/common.py @@ -0,0 +1 @@ +id = 17 diff --git a/python/problems/introduction/common.py b/python/problems/introduction/common.py new file mode 100644 index 0000000..8498d9c --- /dev/null +++ b/python/problems/introduction/common.py @@ -0,0 +1,2 @@ +id = 13 +number = 1 diff --git a/python/problems/lists_and_for/common.py b/python/problems/lists_and_for/common.py new file mode 100644 index 0000000..b490107 --- /dev/null +++ b/python/problems/lists_and_for/common.py @@ -0,0 +1 @@ +id = 16 diff --git a/python/problems/while_and_if/common.py b/python/problems/while_and_if/common.py new file mode 100644 index 0000000..3ca8844 --- /dev/null +++ b/python/problems/while_and_if/common.py @@ -0,0 +1 @@ +id = 14 -- cgit v1.2.1 From 84f3426c937d1bb9d44ba25a71706416fbb8b85d Mon Sep 17 00:00:00 2001 From: Martin Date: Fri, 9 Oct 2015 11:17:49 +0200 Subject: Added several new problems. They have no tests nor hints implemented. --- python/problems/functions/assign_numbers/common.py | 47 +++++++++ python/problems/functions/assign_numbers/en.py | 16 +++ python/problems/functions/assign_numbers/sl.py | 34 ++++++ .../problems/functions/body_mass_index/common.py | 47 +++++++++ python/problems/functions/body_mass_index/en.py | 16 +++ python/problems/functions/body_mass_index/sl.py | 35 +++++++ .../problems/functions/body_mass_index_2/common.py | 47 +++++++++ python/problems/functions/body_mass_index_2/en.py | 16 +++ python/problems/functions/body_mass_index_2/sl.py | 34 ++++++ python/problems/functions/divisors/common.py | 46 +++++++++ python/problems/functions/divisors/en.py | 16 +++ python/problems/functions/divisors/sl.py | 26 +++++ python/problems/functions/divisors_sum/common.py | 48 +++++++++ python/problems/functions/divisors_sum/en.py | 16 +++ python/problems/functions/divisors_sum/sl.py | 27 +++++ .../problems/functions/friendly_numbers/common.py | 53 ++++++++++ python/problems/functions/friendly_numbers/en.py | 16 +++ python/problems/functions/friendly_numbers/sl.py | 37 +++++++ .../problems/functions/greatest_absolutist/sl.py | 2 +- python/problems/functions/palindrome/common.py | 44 ++++++++ python/problems/functions/palindrome/en.py | 16 +++ python/problems/functions/palindrome/sl.py | 33 ++++++ .../functions/palindromic_numbers/common.py | 49 +++++++++ .../problems/functions/palindromic_numbers/en.py | 16 +++ .../problems/functions/palindromic_numbers/sl.py | 31 ++++++ .../problems/functions/perfect_numbers/common.py | 51 +++++++++ python/problems/functions/perfect_numbers/en.py | 16 +++ python/problems/functions/perfect_numbers/sl.py | 30 ++++++ python/problems/functions/prime_numbers/common.py | 49 +++++++++ python/problems/functions/prime_numbers/en.py | 16 +++ python/problems/functions/prime_numbers/sl.py | 27 +++++ .../problems/functions_and_modules/all/common.py | 47 +++++++++ python/problems/functions_and_modules/all/en.py | 16 +++ python/problems/functions_and_modules/all/sl.py | 40 ++++++++ .../problems/functions_and_modules/any/common.py | 47 +++++++++ python/problems/functions_and_modules/any/en.py | 16 +++ python/problems/functions_and_modules/any/sl.py | 34 ++++++ .../functions_and_modules/caesar_cipher/common.py | 52 ++++++++++ .../functions_and_modules/caesar_cipher/en.py | 16 +++ .../functions_and_modules/caesar_cipher/sl.py | 35 +++++++ .../functions_and_modules/dominoes/common.py | 47 +++++++++ .../problems/functions_and_modules/dominoes/en.py | 16 +++ .../problems/functions_and_modules/dominoes/sl.py | 29 ++++++ python/problems/functions_and_modules/en.py | 3 + .../largest_sublist/common.py | 53 ++++++++++ .../functions_and_modules/largest_sublist/en.py | 16 +++ .../functions_and_modules/largest_sublist/sl.py | 33 ++++++ .../functions_and_modules/lists_sum/common.py | 50 +++++++++ .../problems/functions_and_modules/lists_sum/en.py | 16 +++ .../problems/functions_and_modules/lists_sum/sl.py | 35 +++++++ .../functions_and_modules/longest_word/common.py | 48 +++++++++ .../functions_and_modules/longest_word/en.py | 16 +++ .../functions_and_modules/longest_word/sl.py | 30 ++++++ .../problems/functions_and_modules/map/common.py | 47 +++++++++ python/problems/functions_and_modules/map/en.py | 16 +++ python/problems/functions_and_modules/map/sl.py | 34 ++++++ .../multiplicative_range/common.py | 48 +++++++++ .../multiplicative_range/en.py | 16 +++ .../multiplicative_range/sl.py | 32 ++++++ .../functions_and_modules/similarity/common.py | 48 +++++++++ .../functions_and_modules/similarity/en.py | 16 +++ .../functions_and_modules/similarity/sl.py | 39 +++++++ python/problems/functions_and_modules/sl.py | 3 + .../suspicious_words/common.py | 48 +++++++++ .../functions_and_modules/suspicious_words/en.py | 16 +++ .../functions_and_modules/suspicious_words/sl.py | 32 ++++++ .../lists_and_for/calculator_polish/common.py | 70 +++++++++++++ .../problems/lists_and_for/calculator_polish/en.py | 16 +++ .../problems/lists_and_for/calculator_polish/sl.py | 61 +++++++++++ .../lists_and_for/contains_multiples/common.py | 49 +++++++++ .../lists_and_for/contains_multiples/en.py | 16 +++ .../lists_and_for/contains_multiples/sl.py | 29 ++++++ python/problems/lists_and_for/divisors/common.py | 4 +- python/problems/lists_and_for/divisors/sl.py | 2 +- .../problems/lists_and_for/divisors_sum/common.py | 111 ++++++++++++++++++++ python/problems/lists_and_for/divisors_sum/en.py | 16 +++ python/problems/lists_and_for/divisors_sum/sl.py | 101 ++++++++++++++++++ .../problems/lists_and_for/every_third/common.py | 50 +++++++++ python/problems/lists_and_for/every_third/en.py | 16 +++ python/problems/lists_and_for/every_third/sl.py | 35 +++++++ .../lists_and_for/perfect_numbers/common.py | 114 +++++++++++++++++++++ .../problems/lists_and_for/perfect_numbers/en.py | 16 +++ .../problems/lists_and_for/perfect_numbers/sl.py | 96 +++++++++++++++++ python/problems/lists_and_for/places/common.py | 49 +++++++++ python/problems/lists_and_for/places/en.py | 16 +++ python/problems/lists_and_for/places/sl.py | 32 ++++++ python/problems/lists_and_for/prefix/common.py | 48 +++++++++ python/problems/lists_and_for/prefix/en.py | 16 +++ python/problems/lists_and_for/prefix/sl.py | 31 ++++++ python/problems/lists_and_for/split_word/common.py | 48 +++++++++ python/problems/lists_and_for/split_word/en.py | 16 +++ python/problems/lists_and_for/split_word/sl.py | 31 ++++++ python/problems/lists_and_for/substrings/common.py | 51 +++++++++ python/problems/lists_and_for/substrings/en.py | 16 +++ python/problems/lists_and_for/substrings/sl.py | 33 ++++++ .../problems/while_and_if/checking_account/en.py | 4 +- .../while_and_if/consumers_anonymous/en.py | 4 +- 97 files changed, 3236 insertions(+), 8 deletions(-) create mode 100644 python/problems/functions/assign_numbers/common.py create mode 100644 python/problems/functions/assign_numbers/en.py create mode 100644 python/problems/functions/assign_numbers/sl.py create mode 100644 python/problems/functions/body_mass_index/common.py create mode 100644 python/problems/functions/body_mass_index/en.py create mode 100644 python/problems/functions/body_mass_index/sl.py create mode 100644 python/problems/functions/body_mass_index_2/common.py create mode 100644 python/problems/functions/body_mass_index_2/en.py create mode 100644 python/problems/functions/body_mass_index_2/sl.py create mode 100644 python/problems/functions/divisors/common.py create mode 100644 python/problems/functions/divisors/en.py create mode 100644 python/problems/functions/divisors/sl.py create mode 100644 python/problems/functions/divisors_sum/common.py create mode 100644 python/problems/functions/divisors_sum/en.py create mode 100644 python/problems/functions/divisors_sum/sl.py create mode 100644 python/problems/functions/friendly_numbers/common.py create mode 100644 python/problems/functions/friendly_numbers/en.py create mode 100644 python/problems/functions/friendly_numbers/sl.py create mode 100644 python/problems/functions/palindrome/common.py create mode 100644 python/problems/functions/palindrome/en.py create mode 100644 python/problems/functions/palindrome/sl.py create mode 100644 python/problems/functions/palindromic_numbers/common.py create mode 100644 python/problems/functions/palindromic_numbers/en.py create mode 100644 python/problems/functions/palindromic_numbers/sl.py create mode 100644 python/problems/functions/perfect_numbers/common.py create mode 100644 python/problems/functions/perfect_numbers/en.py create mode 100644 python/problems/functions/perfect_numbers/sl.py create mode 100644 python/problems/functions/prime_numbers/common.py create mode 100644 python/problems/functions/prime_numbers/en.py create mode 100644 python/problems/functions/prime_numbers/sl.py create mode 100644 python/problems/functions_and_modules/all/common.py create mode 100644 python/problems/functions_and_modules/all/en.py create mode 100644 python/problems/functions_and_modules/all/sl.py create mode 100644 python/problems/functions_and_modules/any/common.py create mode 100644 python/problems/functions_and_modules/any/en.py create mode 100644 python/problems/functions_and_modules/any/sl.py create mode 100644 python/problems/functions_and_modules/caesar_cipher/common.py create mode 100644 python/problems/functions_and_modules/caesar_cipher/en.py create mode 100644 python/problems/functions_and_modules/caesar_cipher/sl.py create mode 100644 python/problems/functions_and_modules/dominoes/common.py create mode 100644 python/problems/functions_and_modules/dominoes/en.py create mode 100644 python/problems/functions_and_modules/dominoes/sl.py create mode 100644 python/problems/functions_and_modules/en.py create mode 100644 python/problems/functions_and_modules/largest_sublist/common.py create mode 100644 python/problems/functions_and_modules/largest_sublist/en.py create mode 100644 python/problems/functions_and_modules/largest_sublist/sl.py create mode 100644 python/problems/functions_and_modules/lists_sum/common.py create mode 100644 python/problems/functions_and_modules/lists_sum/en.py create mode 100644 python/problems/functions_and_modules/lists_sum/sl.py create mode 100644 python/problems/functions_and_modules/longest_word/common.py create mode 100644 python/problems/functions_and_modules/longest_word/en.py create mode 100644 python/problems/functions_and_modules/longest_word/sl.py create mode 100644 python/problems/functions_and_modules/map/common.py create mode 100644 python/problems/functions_and_modules/map/en.py create mode 100644 python/problems/functions_and_modules/map/sl.py create mode 100644 python/problems/functions_and_modules/multiplicative_range/common.py create mode 100644 python/problems/functions_and_modules/multiplicative_range/en.py create mode 100644 python/problems/functions_and_modules/multiplicative_range/sl.py create mode 100644 python/problems/functions_and_modules/similarity/common.py create mode 100644 python/problems/functions_and_modules/similarity/en.py create mode 100644 python/problems/functions_and_modules/similarity/sl.py create mode 100644 python/problems/functions_and_modules/sl.py create mode 100644 python/problems/functions_and_modules/suspicious_words/common.py create mode 100644 python/problems/functions_and_modules/suspicious_words/en.py create mode 100644 python/problems/functions_and_modules/suspicious_words/sl.py create mode 100644 python/problems/lists_and_for/calculator_polish/common.py create mode 100644 python/problems/lists_and_for/calculator_polish/en.py create mode 100644 python/problems/lists_and_for/calculator_polish/sl.py create mode 100644 python/problems/lists_and_for/contains_multiples/common.py create mode 100644 python/problems/lists_and_for/contains_multiples/en.py create mode 100644 python/problems/lists_and_for/contains_multiples/sl.py create mode 100644 python/problems/lists_and_for/divisors_sum/common.py create mode 100644 python/problems/lists_and_for/divisors_sum/en.py create mode 100644 python/problems/lists_and_for/divisors_sum/sl.py create mode 100644 python/problems/lists_and_for/every_third/common.py create mode 100644 python/problems/lists_and_for/every_third/en.py create mode 100644 python/problems/lists_and_for/every_third/sl.py create mode 100644 python/problems/lists_and_for/perfect_numbers/common.py create mode 100644 python/problems/lists_and_for/perfect_numbers/en.py create mode 100644 python/problems/lists_and_for/perfect_numbers/sl.py create mode 100644 python/problems/lists_and_for/places/common.py create mode 100644 python/problems/lists_and_for/places/en.py create mode 100644 python/problems/lists_and_for/places/sl.py create mode 100644 python/problems/lists_and_for/prefix/common.py create mode 100644 python/problems/lists_and_for/prefix/en.py create mode 100644 python/problems/lists_and_for/prefix/sl.py create mode 100644 python/problems/lists_and_for/split_word/common.py create mode 100644 python/problems/lists_and_for/split_word/en.py create mode 100644 python/problems/lists_and_for/split_word/sl.py create mode 100644 python/problems/lists_and_for/substrings/common.py create mode 100644 python/problems/lists_and_for/substrings/en.py create mode 100644 python/problems/lists_and_for/substrings/sl.py (limited to 'python') diff --git a/python/problems/functions/assign_numbers/common.py b/python/problems/functions/assign_numbers/common.py new file mode 100644 index 0000000..f00305a --- /dev/null +++ b/python/problems/functions/assign_numbers/common.py @@ -0,0 +1,47 @@ +# coding=utf-8 + +import re +from python.util import has_token_sequence, string_almost_equal, \ + string_contains_number, get_tokens, get_numbers, get_exception_desc +from server.hints import Hint + +id = 225 +group = 'lists_and_for' +number = 4 +visible = True + +solution = '''\ +def numbers(xs): + ys = [] + for i in range(len(xs)): + ys.append((i, xs[i])) + return ys +''' + +hint_type = { + 'final_hint': Hint('final_hint') +} + +def test(python, code): + test_in = [1] + n_correct = 0 + + 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)}}) + if passed: + hints.append({'id': 'final_hint'}) + return passed, hints + +def hint(python, code): + tokens = get_tokens(code) + + # run one test first to see if there are any exceptions + answer = python(code=code, inputs=[(None, None)], timeout=1.0) + exc = get_exception_desc(answer[0][3]) + if exc: return exc + + return None diff --git a/python/problems/functions/assign_numbers/en.py b/python/problems/functions/assign_numbers/en.py new file mode 100644 index 0000000..a68c6c8 --- /dev/null +++ b/python/problems/functions/assign_numbers/en.py @@ -0,0 +1,16 @@ +# coding=utf-8 + +id = 225 +name = 'Assign numbers' +slug = 'Assign numbers' + +description = '''\ +

(translation missing)

''' + +hint = { + 'plan': '''\ +

(translation missing)

''', + + 'no_input_call': '''\ +

(translation missing)

''', +} diff --git a/python/problems/functions/assign_numbers/sl.py b/python/problems/functions/assign_numbers/sl.py new file mode 100644 index 0000000..97c0c3a --- /dev/null +++ b/python/problems/functions/assign_numbers/sl.py @@ -0,0 +1,34 @@ +# coding=utf-8 +import server +mod = server.problems.load_language('python', 'sl') + + +id = 225 +name = 'Oštevilči' +slug = 'Oštevilči' + + +description = '''\ +

+Napišite funkcijo numbers(xs), ki vrne seznam oblike [(0, xs[0]), (1, xs[1]), ..., (n, xs[n])]. +Število n je enako dolžini seznama xs minus ena. +

+>>> numbers([4, 4, 4])
+[(0, 4), (1, 4), (2, 4)]
+>>> numbers([5, 1, 4, 2, 3])
+[(0, 5), (1, 1), (2, 4), (3, 2), (4, 3)]
+
+

''' + +plan = ['''\ +

+''', + '''\ +

'''] + +hint = { + 'final_hint': ['''\ +

Program je pravilen!
+

+'''], +} diff --git a/python/problems/functions/body_mass_index/common.py b/python/problems/functions/body_mass_index/common.py new file mode 100644 index 0000000..fba7570 --- /dev/null +++ b/python/problems/functions/body_mass_index/common.py @@ -0,0 +1,47 @@ +# coding=utf-8 + +import re +from python.util import has_token_sequence, string_almost_equal, \ + string_contains_number, get_tokens, get_numbers, get_exception_desc +from server.hints import Hint + +id = 226 +group = 'functions' +number = 5 +visible = True + +solution = '''\ +def bmi(xs): + ys = [] + for name, weight, height in xs: + ys.append((name, weight / (height / 100)**2)) + return ys +''' + +hint_type = { + 'final_hint': Hint('final_hint') +} + +def test(python, code): + test_in = [1] + n_correct = 0 + + 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)}}) + if passed: + hints.append({'id': 'final_hint'}) + return passed, hints + +def hint(python, code): + tokens = get_tokens(code) + + # run one test first to see if there are any exceptions + answer = python(code=code, inputs=[(None, None)], timeout=1.0) + exc = get_exception_desc(answer[0][3]) + if exc: return exc + + return None diff --git a/python/problems/functions/body_mass_index/en.py b/python/problems/functions/body_mass_index/en.py new file mode 100644 index 0000000..fb4663f --- /dev/null +++ b/python/problems/functions/body_mass_index/en.py @@ -0,0 +1,16 @@ +# coding=utf-8 + +id = 226 +name = 'Body mass index' +slug = 'Body mass index' + +description = '''\ +

(translation missing)

''' + +hint = { + 'plan': '''\ +

(translation missing)

''', + + 'no_input_call': '''\ +

(translation missing)

''', +} diff --git a/python/problems/functions/body_mass_index/sl.py b/python/problems/functions/body_mass_index/sl.py new file mode 100644 index 0000000..fd67c88 --- /dev/null +++ b/python/problems/functions/body_mass_index/sl.py @@ -0,0 +1,35 @@ +# coding=utf-8 +import server +mod = server.problems.load_language('python', 'sl') + + +id = 226 +name = 'Indeks telesne teže' +slug = 'Indeks telesne teže' + + +description = '''\ +

+Podan imamo seznam trojk: ime osebe, teža, višina, na primer: +

+>>> osebe = [('Ana', 55, 165), ('Berta', 60, 153)]
+
+Napišite funkcijo bmi(osebe), ki na podlagi podanega seznama osebe, sestavi seznam dvojk: ime osebe, indeks telesne teže: +
+>>> bmi(osebe)
+[('Ana', 20.202020202020204), ('Berta', 25.63116749967961)]
+
+

''' + +plan = ['''\ +

+''', + '''\ +

'''] + +hint = { + 'final_hint': ['''\ +

Program je pravilen!
+

+'''], +} diff --git a/python/problems/functions/body_mass_index_2/common.py b/python/problems/functions/body_mass_index_2/common.py new file mode 100644 index 0000000..58c7ab1 --- /dev/null +++ b/python/problems/functions/body_mass_index_2/common.py @@ -0,0 +1,47 @@ +# coding=utf-8 + +import re +from python.util import has_token_sequence, string_almost_equal, \ + string_contains_number, get_tokens, get_numbers, get_exception_desc +from server.hints import Hint + +id = 226 +group = 'functions' +number = 6 +visible = True + +solution = '''\ +def bmi2(names, weights, heights): + ys = [] + for name, weight, height in zip(names, weights, heights): + ys.append((name, weight / (height / 100)**2)) + return ys +''' + +hint_type = { + 'final_hint': Hint('final_hint') +} + +def test(python, code): + test_in = [1] + n_correct = 0 + + 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)}}) + if passed: + hints.append({'id': 'final_hint'}) + return passed, hints + +def hint(python, code): + tokens = get_tokens(code) + + # run one test first to see if there are any exceptions + answer = python(code=code, inputs=[(None, None)], timeout=1.0) + exc = get_exception_desc(answer[0][3]) + if exc: return exc + + return None diff --git a/python/problems/functions/body_mass_index_2/en.py b/python/problems/functions/body_mass_index_2/en.py new file mode 100644 index 0000000..8ce2533 --- /dev/null +++ b/python/problems/functions/body_mass_index_2/en.py @@ -0,0 +1,16 @@ +# coding=utf-8 + +id = 226 +name = 'Body mass index 2' +slug = 'Body mass index 2' + +description = '''\ +

(translation missing)

''' + +hint = { + 'plan': '''\ +

(translation missing)

''', + + 'no_input_call': '''\ +

(translation missing)

''', +} diff --git a/python/problems/functions/body_mass_index_2/sl.py b/python/problems/functions/body_mass_index_2/sl.py new file mode 100644 index 0000000..21e7fa0 --- /dev/null +++ b/python/problems/functions/body_mass_index_2/sl.py @@ -0,0 +1,34 @@ +# coding=utf-8 +import server +mod = server.problems.load_language('python', 'sl') + + +id = 226 +name = 'Indeks telesne teže 2' +slug = 'Indeks telesne teže 2' + + +description = '''\ +

+Naloga je podobna prejšnji, le da imamo tokrat podatke v drugačni obliki: +

+>>> imena = ['Ana', 'Berta']
+>>> teze = [55, 60]
+>>> visine = [165, 153]
+>>> bmi2(imena, teze, visine)
+[('Ana', 20.202020202020204), ('Berta', 25.63116749967961)]
+
+

''' + +plan = ['''\ +

+''', + '''\ +

'''] + +hint = { + 'final_hint': ['''\ +

Program je pravilen!
+

+'''], +} diff --git a/python/problems/functions/divisors/common.py b/python/problems/functions/divisors/common.py new file mode 100644 index 0000000..c3e71d8 --- /dev/null +++ b/python/problems/functions/divisors/common.py @@ -0,0 +1,46 @@ +# coding=utf-8 + +import re +from python.util import has_token_sequence, string_almost_equal, \ + string_contains_number, get_tokens, get_numbers, get_exception_desc +from server.hints import Hint + +id = 230 +group = 'functions' +number = 9 +visible = True + +solution = '''\ +def divisors(n): + for i in range(1, n): + if n % i == 0: + print(i) +''' + +hint_type = { + 'final_hint': Hint('final_hint') +} + +def test(python, code): + test_in = [1] + n_correct = 0 + + 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)}}) + if passed: + hints.append({'id': 'final_hint'}) + return passed, hints + +def hint(python, code): + tokens = get_tokens(code) + + # run one test first to see if there are any exceptions + answer = python(code=code, inputs=[(None, None)], timeout=1.0) + exc = get_exception_desc(answer[0][3]) + if exc: return exc + + return None diff --git a/python/problems/functions/divisors/en.py b/python/problems/functions/divisors/en.py new file mode 100644 index 0000000..d1e71c2 --- /dev/null +++ b/python/problems/functions/divisors/en.py @@ -0,0 +1,16 @@ +# coding=utf-8 + +id = 230 +name = 'Divisors' +slug = 'Divisors' + +description = '''\ +

(translation missing)

''' + +hint = { + 'plan': '''\ +

(translation missing)

''', + + 'no_input_call': '''\ +

(translation missing)

''', +} diff --git a/python/problems/functions/divisors/sl.py b/python/problems/functions/divisors/sl.py new file mode 100644 index 0000000..76b0917 --- /dev/null +++ b/python/problems/functions/divisors/sl.py @@ -0,0 +1,26 @@ +# coding=utf-8 +import server +mod = server.problems.load_language('python', 'sl') + + +id = 230 +name = 'Delitelji' +slug = 'Delitelji' + + +description = '''\ +

+Napiši funkcijo divisors(n), ki izpiše vse delitelje števila (brez samega sebe), ki ga vnese uporabnik.

''' + +plan = ['''\ +

+''', + '''\ +

'''] + +hint = { + 'final_hint': ['''\ +

Program je pravilen!
+

+'''], +} diff --git a/python/problems/functions/divisors_sum/common.py b/python/problems/functions/divisors_sum/common.py new file mode 100644 index 0000000..d6a2b88 --- /dev/null +++ b/python/problems/functions/divisors_sum/common.py @@ -0,0 +1,48 @@ +# coding=utf-8 + +import re +from python.util import has_token_sequence, string_almost_equal, \ + string_contains_number, get_tokens, get_numbers, get_exception_desc +from server.hints import Hint + +id = 231 +group = 'functions' +number = 10 +visible = True + +solution = '''\ +def divisors_sum(n): + s = 0 + for i in range(1, n): + if n % i == 0: + s += i + return s +''' + +hint_type = { + 'final_hint': Hint('final_hint') +} + +def test(python, code): + test_in = [1] + n_correct = 0 + + 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)}}) + if passed: + hints.append({'id': 'final_hint'}) + return passed, hints + +def hint(python, code): + tokens = get_tokens(code) + + # run one test first to see if there are any exceptions + answer = python(code=code, inputs=[(None, None)], timeout=1.0) + exc = get_exception_desc(answer[0][3]) + if exc: return exc + + return None diff --git a/python/problems/functions/divisors_sum/en.py b/python/problems/functions/divisors_sum/en.py new file mode 100644 index 0000000..67806f7 --- /dev/null +++ b/python/problems/functions/divisors_sum/en.py @@ -0,0 +1,16 @@ +# coding=utf-8 + +id = 231 +name = 'Divisors sum' +slug = 'Divisors sum' + +description = '''\ +

(translation missing)

''' + +hint = { + 'plan': '''\ +

(translation missing)

''', + + 'no_input_call': '''\ +

(translation missing)

''', +} diff --git a/python/problems/functions/divisors_sum/sl.py b/python/problems/functions/divisors_sum/sl.py new file mode 100644 index 0000000..47b8719 --- /dev/null +++ b/python/problems/functions/divisors_sum/sl.py @@ -0,0 +1,27 @@ +# coding=utf-8 +import server +mod = server.problems.load_language('python', 'sl') + + +id = 231 +name = 'Vsota deliteljev' +slug = 'Vsota deliteljev' + + +description = '''\ +

+Napiši funkcijo divisors_sum(n), ki vrne vsoto vseh deliteljev števila, ki ga vnese uporabnik. +

''' + +plan = ['''\ +

+''', + '''\ +

'''] + +hint = { + 'final_hint': ['''\ +

Program je pravilen!
+

+'''], +} diff --git a/python/problems/functions/friendly_numbers/common.py b/python/problems/functions/friendly_numbers/common.py new file mode 100644 index 0000000..415040e --- /dev/null +++ b/python/problems/functions/friendly_numbers/common.py @@ -0,0 +1,53 @@ +# coding=utf-8 + +import re +from python.util import has_token_sequence, string_almost_equal, \ + string_contains_number, get_tokens, get_numbers, get_exception_desc +from server.hints import Hint + +id = 233 +group = 'functions' +number = 12 +visible = True + +solution = '''\ +def divisors_sum(n): + s = 0 + for i in range(1, n): + if n % i == 0: + s += i + return s + +def friendly_number(n): + s = divisors_sum(n) + if n == divisors_sum(s): + return s +''' + +hint_type = { + 'final_hint': Hint('final_hint') +} + +def test(python, code): + test_in = [1] + n_correct = 0 + + 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)}}) + if passed: + hints.append({'id': 'final_hint'}) + return passed, hints + +def hint(python, code): + tokens = get_tokens(code) + + # run one test first to see if there are any exceptions + answer = python(code=code, inputs=[(None, None)], timeout=1.0) + exc = get_exception_desc(answer[0][3]) + if exc: return exc + + return None diff --git a/python/problems/functions/friendly_numbers/en.py b/python/problems/functions/friendly_numbers/en.py new file mode 100644 index 0000000..ba740ae --- /dev/null +++ b/python/problems/functions/friendly_numbers/en.py @@ -0,0 +1,16 @@ +# coding=utf-8 + +id = 233 +name = 'Friendly numbers' +slug = 'Friendly numbers' + +description = '''\ +

(translation missing)

''' + +hint = { + 'plan': '''\ +

(translation missing)

''', + + 'no_input_call': '''\ +

(translation missing)

''', +} diff --git a/python/problems/functions/friendly_numbers/sl.py b/python/problems/functions/friendly_numbers/sl.py new file mode 100644 index 0000000..d1c15ff --- /dev/null +++ b/python/problems/functions/friendly_numbers/sl.py @@ -0,0 +1,37 @@ +# coding=utf-8 +import server +mod = server.problems.load_language('python', 'sl') + + +id = 233 +name = 'Prijateljska števila' +slug = 'Prijateljska števila' + + +description = '''\ +

+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 friendly_number(n), ki vrne prijateljsko število številu n, če ga ima, oz. +vrne None, če ga nima. Primer: +

+>>> friendly_number(220)
+284
+>>> friendly_number(222)
+None
+
+

+

Uporabite funkcijo za vsoto deliteljev!

''' + +plan = ['''\ +

+''', + '''\ +

'''] + +hint = { + 'final_hint': ['''\ +

Program je pravilen!
+

+'''], +} diff --git a/python/problems/functions/greatest_absolutist/sl.py b/python/problems/functions/greatest_absolutist/sl.py index d51cd96..ee33c6d 100644 --- a/python/problems/functions/greatest_absolutist/sl.py +++ b/python/problems/functions/greatest_absolutist/sl.py @@ -101,7 +101,7 @@ V tem primeru se lahko zgodi, da se zanka ne izteče do konca.

''', Tudi to nalogo lahko rešimo s funkcijo max:

 def max_abs(xs):
-    return max(xs, key = lambda x: abs(x))
+    return max(xs, key = abs(x))
 
''', } diff --git a/python/problems/functions/palindrome/common.py b/python/problems/functions/palindrome/common.py new file mode 100644 index 0000000..e012e8d --- /dev/null +++ b/python/problems/functions/palindrome/common.py @@ -0,0 +1,44 @@ +# coding=utf-8 + +import re +from python.util import has_token_sequence, string_almost_equal, \ + string_contains_number, get_tokens, get_numbers, get_exception_desc +from server.hints import Hint + +id = 228 +group = 'functions' +number = 7 +visible = True + +solution = '''\ +def palindrome(s): + return s == s[::-1] +''' + +hint_type = { + 'final_hint': Hint('final_hint') +} + +def test(python, code): + test_in = [1] + n_correct = 0 + + 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)}}) + if passed: + hints.append({'id': 'final_hint'}) + return passed, hints + +def hint(python, code): + tokens = get_tokens(code) + + # run one test first to see if there are any exceptions + answer = python(code=code, inputs=[(None, None)], timeout=1.0) + exc = get_exception_desc(answer[0][3]) + if exc: return exc + + return None diff --git a/python/problems/functions/palindrome/en.py b/python/problems/functions/palindrome/en.py new file mode 100644 index 0000000..784c395 --- /dev/null +++ b/python/problems/functions/palindrome/en.py @@ -0,0 +1,16 @@ +# coding=utf-8 + +id = 228 +name = 'Palindrome' +slug = 'Palindrome' + +description = '''\ +

(translation missing)

''' + +hint = { + 'plan': '''\ +

(translation missing)

''', + + 'no_input_call': '''\ +

(translation missing)

''', +} diff --git a/python/problems/functions/palindrome/sl.py b/python/problems/functions/palindrome/sl.py new file mode 100644 index 0000000..e005057 --- /dev/null +++ b/python/problems/functions/palindrome/sl.py @@ -0,0 +1,33 @@ +# coding=utf-8 +import server +mod = server.problems.load_language('python', 'sl') + + +id = 228 +name = 'Palindrom' +slug = 'Palindrom' + + +description = '''\ +

+Napišite funkcijo palindrome(s), ki preveri, ali je niz s palindrom. +

+>>> palindrome('pericarezeracirep')
+True
+>>> palindrome('perica')
+False
+
+

''' + +plan = ['''\ +

+''', + '''\ +

'''] + +hint = { + 'final_hint': ['''\ +

Program je pravilen!
+

+'''], +} diff --git a/python/problems/functions/palindromic_numbers/common.py b/python/problems/functions/palindromic_numbers/common.py new file mode 100644 index 0000000..ba518c7 --- /dev/null +++ b/python/problems/functions/palindromic_numbers/common.py @@ -0,0 +1,49 @@ +# coding=utf-8 + +import re +from python.util import has_token_sequence, string_almost_equal, \ + string_contains_number, get_tokens, get_numbers, get_exception_desc +from server.hints import Hint + +id = 229 +group = 'functions' +number = 8 +visible = True + +solution = '''\ +def palindromic_numbers(): + xs = [] + for i in range(100, 1000): + for j in range(100, 1000): + if str(i * j) == str(i * j)[::-1]: + xs.append(i * j) + return max(xs) +''' + +hint_type = { + 'final_hint': Hint('final_hint') +} + +def test(python, code): + test_in = [1] + n_correct = 0 + + 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)}}) + if passed: + hints.append({'id': 'final_hint'}) + return passed, hints + +def hint(python, code): + tokens = get_tokens(code) + + # run one test first to see if there are any exceptions + answer = python(code=code, inputs=[(None, None)], timeout=1.0) + exc = get_exception_desc(answer[0][3]) + if exc: return exc + + return None diff --git a/python/problems/functions/palindromic_numbers/en.py b/python/problems/functions/palindromic_numbers/en.py new file mode 100644 index 0000000..5f4ea76 --- /dev/null +++ b/python/problems/functions/palindromic_numbers/en.py @@ -0,0 +1,16 @@ +# coding=utf-8 + +id = 229 +name = 'Palindromic numbers' +slug = 'Palindromic numbers' + +description = '''\ +

(translation missing)

''' + +hint = { + 'plan': '''\ +

(translation missing)

''', + + 'no_input_call': '''\ +

(translation missing)

''', +} diff --git a/python/problems/functions/palindromic_numbers/sl.py b/python/problems/functions/palindromic_numbers/sl.py new file mode 100644 index 0000000..8d64bab --- /dev/null +++ b/python/problems/functions/palindromic_numbers/sl.py @@ -0,0 +1,31 @@ +# coding=utf-8 +import server +mod = server.problems.load_language('python', 'sl') + + +id = 229 +name = 'Palindromska števila' +slug = 'Palindromska števila' + + +description = '''\ +

+Največje palindromsko število, ki ga lahko dobimo kot produkt dveh dvomestnih števil je 9009 = 91 * 99. +Napišite funkcijo palindromic_number(), ki poišče in vrne največje palindromsko število, +ki ga lahko dobimo kot produkt dveh tromestnih števil. + +Vir: Project Euler, Problem 4. +

''' + +plan = ['''\ +

+''', + '''\ +

'''] + +hint = { + 'final_hint': ['''\ +

Program je pravilen!
+

+'''], +} diff --git a/python/problems/functions/perfect_numbers/common.py b/python/problems/functions/perfect_numbers/common.py new file mode 100644 index 0000000..ad1a7cd --- /dev/null +++ b/python/problems/functions/perfect_numbers/common.py @@ -0,0 +1,51 @@ +# coding=utf-8 + +import re +from python.util import has_token_sequence, string_almost_equal, \ + string_contains_number, get_tokens, get_numbers, get_exception_desc +from server.hints import Hint + +id = 232 +group = 'functions' +number = 11 +visible = True + +solution = '''\ +def divisors_sum(n): + s = 0 + for i in range(1, n): + if n % i == 0: + s += i + return s + +def perfect(n): + return n == divisors_sum(n) +''' + +hint_type = { + 'final_hint': Hint('final_hint') +} + +def test(python, code): + test_in = [1] + n_correct = 0 + + 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)}}) + if passed: + hints.append({'id': 'final_hint'}) + return passed, hints + +def hint(python, code): + tokens = get_tokens(code) + + # run one test first to see if there are any exceptions + answer = python(code=code, inputs=[(None, None)], timeout=1.0) + exc = get_exception_desc(answer[0][3]) + if exc: return exc + + return None diff --git a/python/problems/functions/perfect_numbers/en.py b/python/problems/functions/perfect_numbers/en.py new file mode 100644 index 0000000..a7cb94e --- /dev/null +++ b/python/problems/functions/perfect_numbers/en.py @@ -0,0 +1,16 @@ +# coding=utf-8 + +id = 232 +name = 'Perfect numbers' +slug = 'Perfect numbers' + +description = '''\ +

(translation missing)

''' + +hint = { + 'plan': '''\ +

(translation missing)

''', + + 'no_input_call': '''\ +

(translation missing)

''', +} diff --git a/python/problems/functions/perfect_numbers/sl.py b/python/problems/functions/perfect_numbers/sl.py new file mode 100644 index 0000000..a354a17 --- /dev/null +++ b/python/problems/functions/perfect_numbers/sl.py @@ -0,0 +1,30 @@ +# coding=utf-8 +import server +mod = server.problems.load_language('python', 'sl') + + +id = 232 +name = 'Popolna števila' +slug = 'Popolna števila' + + +description = '''\ +

+Napiši funkcijo perfect(n), ki vrne True, če je podano število popolno, oz. False, če ni. +Popolna števila so števila, ki so enaka vsoti svojih deliteljev (brez samega sebe). +Primer popolnega števila je 28, saj so njegovi delitelji 1, 2, 4, 7, 14, njihova vsota, 1+2+4+7+14 pa je spet enaka 28. +

+

Uporabite funkcijo za vsoto deliteljev!

''' + +plan = ['''\ +

+''', + '''\ +

'''] + +hint = { + 'final_hint': ['''\ +

Program je pravilen!
+

+'''], +} diff --git a/python/problems/functions/prime_numbers/common.py b/python/problems/functions/prime_numbers/common.py new file mode 100644 index 0000000..0447c61 --- /dev/null +++ b/python/problems/functions/prime_numbers/common.py @@ -0,0 +1,49 @@ +# coding=utf-8 + +import re +from python.util import has_token_sequence, string_almost_equal, \ + string_contains_number, get_tokens, get_numbers, get_exception_desc +from server.hints import Hint + +id = 234 +group = 'functions' +number = 13 +visible = True + +solution = '''\ +def prime(n): + for i in range(2, n): + for j in range(2, i): + if i % j == 0: + break + else: + print(i) +''' + +hint_type = { + 'final_hint': Hint('final_hint') +} + +def test(python, code): + test_in = [1] + n_correct = 0 + + 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)}}) + if passed: + hints.append({'id': 'final_hint'}) + return passed, hints + +def hint(python, code): + tokens = get_tokens(code) + + # run one test first to see if there are any exceptions + answer = python(code=code, inputs=[(None, None)], timeout=1.0) + exc = get_exception_desc(answer[0][3]) + if exc: return exc + + return None diff --git a/python/problems/functions/prime_numbers/en.py b/python/problems/functions/prime_numbers/en.py new file mode 100644 index 0000000..87c01a2 --- /dev/null +++ b/python/problems/functions/prime_numbers/en.py @@ -0,0 +1,16 @@ +# coding=utf-8 + +id = 234 +name = 'Prime numbers' +slug = 'Prime numbers' + +description = '''\ +

(translation missing)

''' + +hint = { + 'plan': '''\ +

(translation missing)

''', + + 'no_input_call': '''\ +

(translation missing)

''', +} diff --git a/python/problems/functions/prime_numbers/sl.py b/python/problems/functions/prime_numbers/sl.py new file mode 100644 index 0000000..f6c6b24 --- /dev/null +++ b/python/problems/functions/prime_numbers/sl.py @@ -0,0 +1,27 @@ +# coding=utf-8 +import server +mod = server.problems.load_language('python', 'sl') + + +id = 234 +name = 'Praštevila' +slug = 'Praštevila' + + +description = '''\ +

+Napišite funkcijo prime(n), ki izpiše vsa praštevila manjša od n. +

''' + +plan = ['''\ +

+''', + '''\ +

'''] + +hint = { + 'final_hint': ['''\ +

Program je pravilen!
+

+'''], +} diff --git a/python/problems/functions_and_modules/all/common.py b/python/problems/functions_and_modules/all/common.py new file mode 100644 index 0000000..7fb60f5 --- /dev/null +++ b/python/problems/functions_and_modules/all/common.py @@ -0,0 +1,47 @@ +# coding=utf-8 + +import re +from python.util import has_token_sequence, string_almost_equal, \ + string_contains_number, get_tokens, get_numbers, get_exception_desc +from server.hints import Hint + +id = 238 +group = 'functions_and_modules' +number = 4 +visible = True + +solution = '''\ +def all(xs): + for x in xs: + if not x: + return False + return True +''' + +hint_type = { + 'final_hint': Hint('final_hint') +} + +def test(python, code): + test_in = [1] + n_correct = 0 + + 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)}}) + if passed: + hints.append({'id': 'final_hint'}) + return passed, hints + +def hint(python, code): + tokens = get_tokens(code) + + # run one test first to see if there are any exceptions + answer = python(code=code, inputs=[(None, None)], timeout=1.0) + exc = get_exception_desc(answer[0][3]) + if exc: return exc + + return None diff --git a/python/problems/functions_and_modules/all/en.py b/python/problems/functions_and_modules/all/en.py new file mode 100644 index 0000000..3028ad4 --- /dev/null +++ b/python/problems/functions_and_modules/all/en.py @@ -0,0 +1,16 @@ +# coding=utf-8 + +id = 238 +name = 'All' +slug = 'All' + +description = '''\ +

(translation missing)

''' + +hint = { + 'plan': '''\ +

(translation missing)

''', + + 'no_input_call': '''\ +

(translation missing)

''', +} diff --git a/python/problems/functions_and_modules/all/sl.py b/python/problems/functions_and_modules/all/sl.py new file mode 100644 index 0000000..f71fa4b --- /dev/null +++ b/python/problems/functions_and_modules/all/sl.py @@ -0,0 +1,40 @@ +# coding=utf-8 +import server +mod = server.problems.load_language('python', 'sl') + + +id = 238 +name = 'Vsi' +slug = 'Vsi' + + +description = '''\ +

+Napišite funkcijo all, ki sprejme seznam xs in vrne True, +če so vse vrednosti v seznamu resnične. Elementi seznama xs so lahko poljubnega tipa, ne le bool. +

+>>> all([True, True, False])
+False
+>>> all([True, True])
+True
+>>> all([1, 2, 3, 0])
+False
+>>> all(['foo', 42, True])
+True
+>>> all([])
+True
+
+

''' + +plan = ['''\ +

+''', + '''\ +

'''] + +hint = { + 'final_hint': ['''\ +

Program je pravilen!
+

+'''], +} diff --git a/python/problems/functions_and_modules/any/common.py b/python/problems/functions_and_modules/any/common.py new file mode 100644 index 0000000..78867c5 --- /dev/null +++ b/python/problems/functions_and_modules/any/common.py @@ -0,0 +1,47 @@ +# coding=utf-8 + +import re +from python.util import has_token_sequence, string_almost_equal, \ + string_contains_number, get_tokens, get_numbers, get_exception_desc +from server.hints import Hint + +id = 239 +group = 'functions_and_modules' +number = 4 +visible = True + +solution = '''\ +def any(xs): + for x in xs: + if x: + return True + return False +''' + +hint_type = { + 'final_hint': Hint('final_hint') +} + +def test(python, code): + test_in = [1] + n_correct = 0 + + 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)}}) + if passed: + hints.append({'id': 'final_hint'}) + return passed, hints + +def hint(python, code): + tokens = get_tokens(code) + + # run one test first to see if there are any exceptions + answer = python(code=code, inputs=[(None, None)], timeout=1.0) + exc = get_exception_desc(answer[0][3]) + if exc: return exc + + return None diff --git a/python/problems/functions_and_modules/any/en.py b/python/problems/functions_and_modules/any/en.py new file mode 100644 index 0000000..f5b94d9 --- /dev/null +++ b/python/problems/functions_and_modules/any/en.py @@ -0,0 +1,16 @@ +# coding=utf-8 + +id = 239 +name = 'Any' +slug = 'Any' + +description = '''\ +

(translation missing)

''' + +hint = { + 'plan': '''\ +

(translation missing)

''', + + 'no_input_call': '''\ +

(translation missing)

''', +} diff --git a/python/problems/functions_and_modules/any/sl.py b/python/problems/functions_and_modules/any/sl.py new file mode 100644 index 0000000..f32e50e --- /dev/null +++ b/python/problems/functions_and_modules/any/sl.py @@ -0,0 +1,34 @@ +# coding=utf-8 +import server +mod = server.problems.load_language('python', 'sl') + + +id = 239 +name = 'Vsaj eden' +slug = 'Vsaj eden' + + +description = '''\ +

+Napišite funkcijo any(xs), ki deluje podobno kot all, le da vrne True, +če je vsaj ena vrednost v seznamu resnična. +

+>>> any([2, 3, 0])
+True
+>>> any([])
+False
+
+

''' + +plan = ['''\ +

+''', + '''\ +

'''] + +hint = { + 'final_hint': ['''\ +

Program je pravilen!
+

+'''], +} diff --git a/python/problems/functions_and_modules/caesar_cipher/common.py b/python/problems/functions_and_modules/caesar_cipher/common.py new file mode 100644 index 0000000..494a7f9 --- /dev/null +++ b/python/problems/functions_and_modules/caesar_cipher/common.py @@ -0,0 +1,52 @@ +# coding=utf-8 + +import re +from python.util import has_token_sequence, string_almost_equal, \ + string_contains_number, get_tokens, get_numbers, get_exception_desc +from server.hints import Hint + +id = 243 +group = 'functions_and_modules' +number = 9 +visible = True + +solution = '''\ +def caesar(s): + cipher = '' + for c in s: + if 'a' <= c <= 'w': + cipher += chr(ord(c) + 3) + elif 'x' <= c <= 'z': + cipher += chr(ord(c) - 23) + else: + cipher += c + return cipher) +''' + +hint_type = { + 'final_hint': Hint('final_hint') +} + +def test(python, code): + test_in = [1] + n_correct = 0 + + 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)}}) + if passed: + hints.append({'id': 'final_hint'}) + return passed, hints + +def hint(python, code): + tokens = get_tokens(code) + + # run one test first to see if there are any exceptions + answer = python(code=code, inputs=[(None, None)], timeout=1.0) + exc = get_exception_desc(answer[0][3]) + if exc: return exc + + return None diff --git a/python/problems/functions_and_modules/caesar_cipher/en.py b/python/problems/functions_and_modules/caesar_cipher/en.py new file mode 100644 index 0000000..bcfedee --- /dev/null +++ b/python/problems/functions_and_modules/caesar_cipher/en.py @@ -0,0 +1,16 @@ +# coding=utf-8 + +id = 243 +name = 'Caesar cipher' +slug = 'Caesar cipher' + +description = '''\ +

(translation missing)

''' + +hint = { + 'plan': '''\ +

(translation missing)

''', + + 'no_input_call': '''\ +

(translation missing)

''', +} diff --git a/python/problems/functions_and_modules/caesar_cipher/sl.py b/python/problems/functions_and_modules/caesar_cipher/sl.py new file mode 100644 index 0000000..ea4d9c8 --- /dev/null +++ b/python/problems/functions_and_modules/caesar_cipher/sl.py @@ -0,0 +1,35 @@ +# coding=utf-8 +import server +mod = server.problems.load_language('python', 'sl') + + +id = 243 +name = 'Cezarjeva šifra' +slug = 'Cezarjeva šifra' + + +description = '''\ +

+Napišite funkcijo caesar(s), ki podan niz zašifrira z uporabo cezarjeve šifre. +Preden se lotite naloge, se je morda vredno pozanimati kaj počneta funkciji +ord in +chr. +Predpostavite lahko, da niz s vsebuje le male črke angleške besede in presledke. +

+>>> caesar('the quick brown fox jumps over the lazy dog')
+'wkh txlfn eurzq ira mxpsv ryhu wkh odcb grj'
+
+

''' + +plan = ['''\ +

+''', + '''\ +

'''] + +hint = { + 'final_hint': ['''\ +

Program je pravilen!
+

+'''], +} diff --git a/python/problems/functions_and_modules/dominoes/common.py b/python/problems/functions_and_modules/dominoes/common.py new file mode 100644 index 0000000..5e73d8e --- /dev/null +++ b/python/problems/functions_and_modules/dominoes/common.py @@ -0,0 +1,47 @@ +# coding=utf-8 + +import re +from python.util import has_token_sequence, string_almost_equal, \ + string_contains_number, get_tokens, get_numbers, get_exception_desc +from server.hints import Hint + +id = 240 +group = 'functions_and_modules' +number = 6 +visible = True + +solution = '''\ +def dominoes(domine): + for i in range(len(domine) - 1): + if domine[i][1] != domine[i + 1][0]: + return False + return True +''' + +hint_type = { + 'final_hint': Hint('final_hint') +} + +def test(python, code): + test_in = [1] + n_correct = 0 + + 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)}}) + if passed: + hints.append({'id': 'final_hint'}) + return passed, hints + +def hint(python, code): + tokens = get_tokens(code) + + # run one test first to see if there are any exceptions + answer = python(code=code, inputs=[(None, None)], timeout=1.0) + exc = get_exception_desc(answer[0][3]) + if exc: return exc + + return None diff --git a/python/problems/functions_and_modules/dominoes/en.py b/python/problems/functions_and_modules/dominoes/en.py new file mode 100644 index 0000000..4d0d31b --- /dev/null +++ b/python/problems/functions_and_modules/dominoes/en.py @@ -0,0 +1,16 @@ +# coding=utf-8 + +id = 240 +name = 'Dominoes' +slug = 'Dominoes' + +description = '''\ +

(translation missing)

''' + +hint = { + 'plan': '''\ +

(translation missing)

''', + + 'no_input_call': '''\ +

(translation missing)

''', +} diff --git a/python/problems/functions_and_modules/dominoes/sl.py b/python/problems/functions_and_modules/dominoes/sl.py new file mode 100644 index 0000000..41cb860 --- /dev/null +++ b/python/problems/functions_and_modules/dominoes/sl.py @@ -0,0 +1,29 @@ +# coding=utf-8 +import server +mod = server.problems.load_language('python', 'sl') + + +id = 240 +name = 'Domine' +slug = 'Domine' + + +description = '''\ +

+Vrsta domin je podana s seznamom parov (terk), na primer +[(3, 6), (6, 6), (6, 1), (1, 0)] ali [(3, 6), (6, 6), (2, 3)]. Napišite funkcijo dominoes(xs), +ki prejme takšen seznam in pove, ali so domine pravilno zložene. Za prvi seznam mora vrniti True in za drugega False. +

''' + +plan = ['''\ +

+''', + '''\ +

'''] + +hint = { + 'final_hint': ['''\ +

Program je pravilen!
+

+'''], +} diff --git a/python/problems/functions_and_modules/en.py b/python/problems/functions_and_modules/en.py new file mode 100644 index 0000000..1218e73 --- /dev/null +++ b/python/problems/functions_and_modules/en.py @@ -0,0 +1,3 @@ +name = 'Functions and Modules' +description = 'Advanced functions and modules' + diff --git a/python/problems/functions_and_modules/largest_sublist/common.py b/python/problems/functions_and_modules/largest_sublist/common.py new file mode 100644 index 0000000..372e34f --- /dev/null +++ b/python/problems/functions_and_modules/largest_sublist/common.py @@ -0,0 +1,53 @@ +# coding=utf-8 + +import re +from python.util import has_token_sequence, string_almost_equal, \ + string_contains_number, get_tokens, get_numbers, get_exception_desc +from server.hints import Hint + +id = 242 +group = 'functions_and_modules' +number = 8 +visible = True + +solution = '''\ +def largest_sublist(xss): + najvecji = [] + najvecji_vsota = float('-inf') + for xs in xss: + vsota = 0 + for x in xs: + vsota += x + if vsota > najvecji_vsota: + najvecji = xs + najvecji_vsota = vsota + return najvecji +''' + +hint_type = { + 'final_hint': Hint('final_hint') +} + +def test(python, code): + test_in = [1] + n_correct = 0 + + 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)}}) + if passed: + hints.append({'id': 'final_hint'}) + return passed, hints + +def hint(python, code): + tokens = get_tokens(code) + + # run one test first to see if there are any exceptions + answer = python(code=code, inputs=[(None, None)], timeout=1.0) + exc = get_exception_desc(answer[0][3]) + if exc: return exc + + return None diff --git a/python/problems/functions_and_modules/largest_sublist/en.py b/python/problems/functions_and_modules/largest_sublist/en.py new file mode 100644 index 0000000..132eb39 --- /dev/null +++ b/python/problems/functions_and_modules/largest_sublist/en.py @@ -0,0 +1,16 @@ +# coding=utf-8 + +id = 242 +name = 'Largest sublist' +slug = 'Largest sublist' + +description = '''\ +

(translation missing)

''' + +hint = { + 'plan': '''\ +

(translation missing)

''', + + 'no_input_call': '''\ +

(translation missing)

''', +} diff --git a/python/problems/functions_and_modules/largest_sublist/sl.py b/python/problems/functions_and_modules/largest_sublist/sl.py new file mode 100644 index 0000000..b550ce2 --- /dev/null +++ b/python/problems/functions_and_modules/largest_sublist/sl.py @@ -0,0 +1,33 @@ +# coding=utf-8 +import server +mod = server.problems.load_language('python', 'sl') + + +id = 242 +name = 'Največji podseznam' +slug = 'Največji podseznam' + + +description = '''\ +

+Napiši funkcijo largest_sublist, ki vrne podseznam z največjo vsoto elementov. +

+>>> largest_sublist([[1, 1, 1], [1, 1]])
+[1, 1, 1]
+>>> largest_sublist([[2, 4, 1], [3, 1], [], [8, 2], [1, 1, 1, 1]])
+[8, 2]
+
+

''' + +plan = ['''\ +

+''', + '''\ +

'''] + +hint = { + 'final_hint': ['''\ +

Program je pravilen!
+

+'''], +} diff --git a/python/problems/functions_and_modules/lists_sum/common.py b/python/problems/functions_and_modules/lists_sum/common.py new file mode 100644 index 0000000..d3afef4 --- /dev/null +++ b/python/problems/functions_and_modules/lists_sum/common.py @@ -0,0 +1,50 @@ +# coding=utf-8 + +import re +from python.util import has_token_sequence, string_almost_equal, \ + string_contains_number, get_tokens, get_numbers, get_exception_desc +from server.hints import Hint + +id = 241 +group = 'functions_and_modules' +number = 7 +visible = True + +solution = '''\ +def lists_sum(xss): + vsote = [] + for xs in xss: + vsota = 0 + for x in xs: + vsota += x + vsote.append(vsota) + return vsote +''' + +hint_type = { + 'final_hint': Hint('final_hint') +} + +def test(python, code): + test_in = [1] + n_correct = 0 + + 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)}}) + if passed: + hints.append({'id': 'final_hint'}) + return passed, hints + +def hint(python, code): + tokens = get_tokens(code) + + # run one test first to see if there are any exceptions + answer = python(code=code, inputs=[(None, None)], timeout=1.0) + exc = get_exception_desc(answer[0][3]) + if exc: return exc + + return None diff --git a/python/problems/functions_and_modules/lists_sum/en.py b/python/problems/functions_and_modules/lists_sum/en.py new file mode 100644 index 0000000..12eaf0b --- /dev/null +++ b/python/problems/functions_and_modules/lists_sum/en.py @@ -0,0 +1,16 @@ +# coding=utf-8 + +id = 241 +name = 'Lists sum' +slug = 'Lists sum' + +description = '''\ +

(translation missing)

''' + +hint = { + 'plan': '''\ +

(translation missing)

''', + + 'no_input_call': '''\ +

(translation missing)

''', +} diff --git a/python/problems/functions_and_modules/lists_sum/sl.py b/python/problems/functions_and_modules/lists_sum/sl.py new file mode 100644 index 0000000..4baa002 --- /dev/null +++ b/python/problems/functions_and_modules/lists_sum/sl.py @@ -0,0 +1,35 @@ +# coding=utf-8 +import server +mod = server.problems.load_language('python', 'sl') + + +id = 241 +name = 'Vsota seznamov' +slug = 'Vsota seznamov' + + +description = '''\ +

+Podan je seznam seznamov, npr. [[2, 4, 1], [3, 1], [], [8, 2], [1, 1, 1, 1]]. +Napiši funkcijo lists_sum(xxs), ki v seznamu vrne vsote vseh elementov v posameznih podseznamih. +Za gornji seznam naj funkcija vrne seznam [7, 4, 0, 10, 4], saj je, na primer, 2 + 4 + 1 = 7. +

+>>> lists_sum([[1, 1, 1], [1, 1]])
+[3, 2]
+>>> lists_sum([[2, 4, 1], [3, 1], [], [8, 2], [1, 1, 1, 1]])
+[7, 4, 0, 10, 4]
+
+

''' + +plan = ['''\ +

+''', + '''\ +

'''] + +hint = { + 'final_hint': ['''\ +

Program je pravilen!
+

+'''], +} diff --git a/python/problems/functions_and_modules/longest_word/common.py b/python/problems/functions_and_modules/longest_word/common.py new file mode 100644 index 0000000..1201c1d --- /dev/null +++ b/python/problems/functions_and_modules/longest_word/common.py @@ -0,0 +1,48 @@ +# coding=utf-8 + +import re +from python.util import has_token_sequence, string_almost_equal, \ + string_contains_number, get_tokens, get_numbers, get_exception_desc +from server.hints import Hint + +id = 235 +group = 'functions_and_modules' +number = 1 +visible = True + +solution = '''\ +def longest(s): + naj = '' + for beseda in s.split(): + if len(beseda) > len(naj): + naj = beseda + return naj +''' + +hint_type = { + 'final_hint': Hint('final_hint') +} + +def test(python, code): + test_in = [1] + n_correct = 0 + + 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)}}) + if passed: + hints.append({'id': 'final_hint'}) + return passed, hints + +def hint(python, code): + tokens = get_tokens(code) + + # run one test first to see if there are any exceptions + answer = python(code=code, inputs=[(None, None)], timeout=1.0) + exc = get_exception_desc(answer[0][3]) + if exc: return exc + + return None diff --git a/python/problems/functions_and_modules/longest_word/en.py b/python/problems/functions_and_modules/longest_word/en.py new file mode 100644 index 0000000..7bd4dc2 --- /dev/null +++ b/python/problems/functions_and_modules/longest_word/en.py @@ -0,0 +1,16 @@ +# coding=utf-8 + +id = 235 +name = 'Longest word' +slug = 'Longest word' + +description = '''\ +

(translation missing)

''' + +hint = { + 'plan': '''\ +

(translation missing)

''', + + 'no_input_call': '''\ +

(translation missing)

''', +} diff --git a/python/problems/functions_and_modules/longest_word/sl.py b/python/problems/functions_and_modules/longest_word/sl.py new file mode 100644 index 0000000..eb85509 --- /dev/null +++ b/python/problems/functions_and_modules/longest_word/sl.py @@ -0,0 +1,30 @@ +# coding=utf-8 +import server +mod = server.problems.load_language('python', 'sl') + + +id = 235 +name = 'Najdaljša beseda' +slug = 'Najdaljša beseda' + + +description = '''\ +

+Napiši funkcijo longest(s), ki vrne najdaljšo besedo v nizu s. +

+>>> longest('an ban pet podgan')
+'podgan'
+

''' + +plan = ['''\ +

+''', + '''\ +

'''] + +hint = { + 'final_hint': ['''\ +

Program je pravilen!
+

+'''], +} diff --git a/python/problems/functions_and_modules/map/common.py b/python/problems/functions_and_modules/map/common.py new file mode 100644 index 0000000..e28f356 --- /dev/null +++ b/python/problems/functions_and_modules/map/common.py @@ -0,0 +1,47 @@ +# coding=utf-8 + +import re +from python.util import has_token_sequence, string_almost_equal, \ + string_contains_number, get_tokens, get_numbers, get_exception_desc +from server.hints import Hint + +id = 245 +group = 'functions_and_modules' +number = 11 +visible = True + +solution = '''\ +def map(f, xs): + ys = [] + for x in xs: + ys.append(f(x)) + return ys +''' + +hint_type = { + 'final_hint': Hint('final_hint') +} + +def test(python, code): + test_in = [1] + n_correct = 0 + + 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)}}) + if passed: + hints.append({'id': 'final_hint'}) + return passed, hints + +def hint(python, code): + tokens = get_tokens(code) + + # run one test first to see if there are any exceptions + answer = python(code=code, inputs=[(None, None)], timeout=1.0) + exc = get_exception_desc(answer[0][3]) + if exc: return exc + + return None diff --git a/python/problems/functions_and_modules/map/en.py b/python/problems/functions_and_modules/map/en.py new file mode 100644 index 0000000..dcc1785 --- /dev/null +++ b/python/problems/functions_and_modules/map/en.py @@ -0,0 +1,16 @@ +# coding=utf-8 + +id = 245 +name = 'Map' +slug = 'Map' + +description = '''\ +

(translation missing)

''' + +hint = { + 'plan': '''\ +

(translation missing)

''', + + 'no_input_call': '''\ +

(translation missing)

''', +} diff --git a/python/problems/functions_and_modules/map/sl.py b/python/problems/functions_and_modules/map/sl.py new file mode 100644 index 0000000..18c47fb --- /dev/null +++ b/python/problems/functions_and_modules/map/sl.py @@ -0,0 +1,34 @@ +# coding=utf-8 +import server +mod = server.problems.load_language('python', 'sl') + + +id = 245 +name = 'Slikaj' +slug = 'Slikaj' + + +description = '''\ +

+Napišite funkcijo map(f, xs), ki sprejme funkcijo f in seznam [x_1, x_2, ..., x_n] +in vrne nov seznam [f(x_1), f(x_2), ..., f(x_n)]. +

+>>> map(abs, [-5, 8, -3, -1, 3])
+[5, 8, 3, 1, 3]
+>>> map(len, "Daydream delusion limousine eyelash".split())
+[8, 8, 9, 7]
+
+

''' + +plan = ['''\ +

+''', + '''\ +

'''] + +hint = { + 'final_hint': ['''\ +

Program je pravilen!
+

+'''], +} diff --git a/python/problems/functions_and_modules/multiplicative_range/common.py b/python/problems/functions_and_modules/multiplicative_range/common.py new file mode 100644 index 0000000..9a52dce --- /dev/null +++ b/python/problems/functions_and_modules/multiplicative_range/common.py @@ -0,0 +1,48 @@ +# coding=utf-8 + +import re +from python.util import has_token_sequence, string_almost_equal, \ + string_contains_number, get_tokens, get_numbers, get_exception_desc +from server.hints import Hint + +id = 244 +group = 'functions_and_modules' +number = 10 +visible = True + +solution = '''\ +def mrange(s, r, l): + xs = [] + for i in range(l): + xs.append(s) + s *= r + return xs +''' + +hint_type = { + 'final_hint': Hint('final_hint') +} + +def test(python, code): + test_in = [1] + n_correct = 0 + + 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)}}) + if passed: + hints.append({'id': 'final_hint'}) + return passed, hints + +def hint(python, code): + tokens = get_tokens(code) + + # run one test first to see if there are any exceptions + answer = python(code=code, inputs=[(None, None)], timeout=1.0) + exc = get_exception_desc(answer[0][3]) + if exc: return exc + + return None diff --git a/python/problems/functions_and_modules/multiplicative_range/en.py b/python/problems/functions_and_modules/multiplicative_range/en.py new file mode 100644 index 0000000..566ef5f --- /dev/null +++ b/python/problems/functions_and_modules/multiplicative_range/en.py @@ -0,0 +1,16 @@ +# coding=utf-8 + +id = 244 +name = 'Multiplicative range' +slug = 'Multiplicative range' + +description = '''\ +

(translation missing)

''' + +hint = { + 'plan': '''\ +

(translation missing)

''', + + 'no_input_call': '''\ +

(translation missing)

''', +} diff --git a/python/problems/functions_and_modules/multiplicative_range/sl.py b/python/problems/functions_and_modules/multiplicative_range/sl.py new file mode 100644 index 0000000..8bd4bd0 --- /dev/null +++ b/python/problems/functions_and_modules/multiplicative_range/sl.py @@ -0,0 +1,32 @@ +# coding=utf-8 +import server +mod = server.problems.load_language('python', 'sl') + + +id = 244 +name = 'Multiplikativni range' +slug = 'Multiplikativni range' + + +description = '''\ +

+Napišite funkcijo mrange(start, factor, length), ki vrne seznam, kjer je vsako naslednje število za +factor večje od prejšnjega. Npr., v seznamu [1, 2, 4, 8, 16] je vsako naslednje število 2-krat večje od prejšnjega. +

+>>> print(mrange(7, 4, 7))
+[7, 28, 112, 448, 1792, 7168, 28672]
+
+

''' + +plan = ['''\ +

+''', + '''\ +

'''] + +hint = { + 'final_hint': ['''\ +

Program je pravilen!
+

+'''], +} diff --git a/python/problems/functions_and_modules/similarity/common.py b/python/problems/functions_and_modules/similarity/common.py new file mode 100644 index 0000000..5cb8fe7 --- /dev/null +++ b/python/problems/functions_and_modules/similarity/common.py @@ -0,0 +1,48 @@ +# coding=utf-8 + +import re +from python.util import has_token_sequence, string_almost_equal, \ + string_contains_number, get_tokens, get_numbers, get_exception_desc +from server.hints import Hint + +id = 236 +group = 'functions_and_modules' +number = 2 +visible = True + +solution = '''\ +def similarity(s1, s2): + stevec = 0 + for i in range(min(len(s1), len(s2))): + if s1[i] == s2[i]: + stevec += 1 + return stevec +''' + +hint_type = { + 'final_hint': Hint('final_hint') +} + +def test(python, code): + test_in = [1] + n_correct = 0 + + 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)}}) + if passed: + hints.append({'id': 'final_hint'}) + return passed, hints + +def hint(python, code): + tokens = get_tokens(code) + + # run one test first to see if there are any exceptions + answer = python(code=code, inputs=[(None, None)], timeout=1.0) + exc = get_exception_desc(answer[0][3]) + if exc: return exc + + return None diff --git a/python/problems/functions_and_modules/similarity/en.py b/python/problems/functions_and_modules/similarity/en.py new file mode 100644 index 0000000..e1dc014 --- /dev/null +++ b/python/problems/functions_and_modules/similarity/en.py @@ -0,0 +1,16 @@ +# coding=utf-8 + +id = 236 +name = 'Similarity' +slug = 'Similarity' + +description = '''\ +

(translation missing)

''' + +hint = { + 'plan': '''\ +

(translation missing)

''', + + 'no_input_call': '''\ +

(translation missing)

''', +} diff --git a/python/problems/functions_and_modules/similarity/sl.py b/python/problems/functions_and_modules/similarity/sl.py new file mode 100644 index 0000000..8aaf0b0 --- /dev/null +++ b/python/problems/functions_and_modules/similarity/sl.py @@ -0,0 +1,39 @@ +# coding=utf-8 +import server +mod = server.problems.load_language('python', 'sl') + + +id = 236 +name = 'Podobnost' +slug = 'Podobnost' + + +description = '''\ +

+Napišite funkcijo similarity(s1, s2), ki izračuna podobnost med dvema nizoma. +Podobnost definirajmo kot število mest v katerih se niza ujemata. +

+sobota
+robot
+------
+011110 -> 4
+
+>>> podobnost('sobota', 'robot')
+4
+>>> podobnost('robot', 'sobota')
+4
+
+

''' + +plan = ['''\ +

+''', + '''\ +

'''] + +hint = { + 'final_hint': ['''\ +

Program je pravilen!
+

+'''], +} diff --git a/python/problems/functions_and_modules/sl.py b/python/problems/functions_and_modules/sl.py new file mode 100644 index 0000000..fb4f520 --- /dev/null +++ b/python/problems/functions_and_modules/sl.py @@ -0,0 +1,3 @@ +name = 'Funkcije in delo z moduli' +description = 'Uporaba funkcij in delo z moduli (predvsem z nizi)' + diff --git a/python/problems/functions_and_modules/suspicious_words/common.py b/python/problems/functions_and_modules/suspicious_words/common.py new file mode 100644 index 0000000..74868ab --- /dev/null +++ b/python/problems/functions_and_modules/suspicious_words/common.py @@ -0,0 +1,48 @@ +# coding=utf-8 + +import re +from python.util import has_token_sequence, string_almost_equal, \ + string_contains_number, get_tokens, get_numbers, get_exception_desc +from server.hints import Hint + +id = 237 +group = 'functions_and_modules' +number = 3 +visible = True + +solution = '''\ +def suspicious(s): + susp = [] + for word in s.split(): + if 'u' in word and 'a' in word: + susp.append(word) + return susp +''' + +hint_type = { + 'final_hint': Hint('final_hint') +} + +def test(python, code): + test_in = [1] + n_correct = 0 + + 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)}}) + if passed: + hints.append({'id': 'final_hint'}) + return passed, hints + +def hint(python, code): + tokens = get_tokens(code) + + # run one test first to see if there are any exceptions + answer = python(code=code, inputs=[(None, None)], timeout=1.0) + exc = get_exception_desc(answer[0][3]) + if exc: return exc + + return None diff --git a/python/problems/functions_and_modules/suspicious_words/en.py b/python/problems/functions_and_modules/suspicious_words/en.py new file mode 100644 index 0000000..9a406bf --- /dev/null +++ b/python/problems/functions_and_modules/suspicious_words/en.py @@ -0,0 +1,16 @@ +# coding=utf-8 + +id = 237 +name = 'Suspicious words' +slug = 'Suspicious words' + +description = '''\ +

(translation missing)

''' + +hint = { + 'plan': '''\ +

(translation missing)

''', + + 'no_input_call': '''\ +

(translation missing)

''', +} diff --git a/python/problems/functions_and_modules/suspicious_words/sl.py b/python/problems/functions_and_modules/suspicious_words/sl.py new file mode 100644 index 0000000..3bf2c7b --- /dev/null +++ b/python/problems/functions_and_modules/suspicious_words/sl.py @@ -0,0 +1,32 @@ +# coding=utf-8 +import server +mod = server.problems.load_language('python', 'sl') + + +id = 237 +name = 'Sumljive besede' +slug = 'Sumljive besede' + + +description = '''\ +

+Napiši funkcijo suspicious(s), ki vrne seznam vseh sumljivih besed v danem nizu. +Beseda je sumljiva, če vsebuje tako črko u kot črko a. +

+>>> susupicious('Muha pa je rekla: "Tale juha se je pa res prilegla, najlepša huala," in odletela.')
+['Muha', 'juha', 'huala,"']
+
+

''' + +plan = ['''\ +

+''', + '''\ +

'''] + +hint = { + 'final_hint': ['''\ +

Program je pravilen!
+

+'''], +} diff --git a/python/problems/lists_and_for/calculator_polish/common.py b/python/problems/lists_and_for/calculator_polish/common.py new file mode 100644 index 0000000..d08f19c --- /dev/null +++ b/python/problems/lists_and_for/calculator_polish/common.py @@ -0,0 +1,70 @@ +# coding=utf-8 + +import re +from python.util import has_token_sequence, string_almost_equal, \ + string_contains_number, get_tokens, get_numbers, get_exception_desc +from server.hints import Hint + +id = 224 +group = 'lists_and_for' +number = 10 +visible = True + +solution = '''\ +operacije = ["*", "+", "-", "/", "%"] + +while True: + izraz = input("Izraz: ").split() + if not izraz: + break + + sklad = [] + for e in izraz: + sklad.append(e) + if sklad[-1] in operacije: + operacija = sklad.pop() + o2 = int(sklad.pop()) + o1 = int(sklad.pop()) + if operacija == "+": + rezultat = o1 + o2 + elif operacija == "-": + rezultat = o1 - o2 + elif operacija == "*": + rezultat = o1 * o2 + elif operacija == "/": + rezultat = o1 // o2 + elif operacija == "%": + rezultat = o1 % o2 + sklad.append(rezultat) + + print("Rezultat:", sklad[0]) + print() +''' + +hint_type = { + 'final_hint': Hint('final_hint') +} + +def test(python, code): + test_in = [1] + n_correct = 0 + + 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)}}) + if passed: + hints.append({'id': 'final_hint'}) + return passed, hints + +def hint(python, code): + tokens = get_tokens(code) + + # run one test first to see if there are any exceptions + answer = python(code=code, inputs=[(None, None)], timeout=1.0) + exc = get_exception_desc(answer[0][3]) + if exc: return exc + + return None diff --git a/python/problems/lists_and_for/calculator_polish/en.py b/python/problems/lists_and_for/calculator_polish/en.py new file mode 100644 index 0000000..f0618e8 --- /dev/null +++ b/python/problems/lists_and_for/calculator_polish/en.py @@ -0,0 +1,16 @@ +# coding=utf-8 + +id = 224 +name = 'Reverse polish potation calculator' +slug = 'Reverse polish potation calculator' + +description = '''\ +

(translation missing)

''' + +hint = { + 'plan': '''\ +

(translation missing)

''', + + 'no_input_call': '''\ +

(translation missing)

''', +} diff --git a/python/problems/lists_and_for/calculator_polish/sl.py b/python/problems/lists_and_for/calculator_polish/sl.py new file mode 100644 index 0000000..b7ff8a1 --- /dev/null +++ b/python/problems/lists_and_for/calculator_polish/sl.py @@ -0,0 +1,61 @@ +# coding=utf-8 +import server +mod = server.problems.load_language('python', 'sl') + + +id = 224 +name = 'Kalkulator v inverzni poljski notaciji' +slug = 'Kalkulator v inverzni poljski notaciji' + + +description = '''\ +

+V inverzni poljski ali postfiksni notaciji ne potrebujemo oklepajev: +računska operacija sledi številoma in se vedno izvede takoj ter zamenja predhodni števili in operacijo z rezultatom operacije. + +Poglejmo si računanje (3 + 5) * 2 - 10 * (2 - 1) ali postfiksno 3 5 + 2 * 10 2 1 - * -: + +

    +
  • Beremo vhod do prve operacije.
  • +
  • 3 5 + ; izvede se seštevanje, tri elemente zamenja rezultat 8, beremo dalje.
  • +
  • 8 2 * ; rezultat je 16, beremo dalje.
  • +
  • 16 10 2 1 -; rezultat 1, beremo dalje.
  • +
  • 16 10 1 *; rezultat 10, beremo dalje.
  • +
  • 16 10 -; rezultat 6, beremo dalje.
  • +
  • 6; vhoda je konec zato se se računanje ustavi.
  • +
+Napišite kalkulator s celoštevilskimi operacijami seštevanja, odštevanja, množenja, deljenja in izračunom ostanka, +ki prejme vhod v inverzni poljski notaciji. Ko uporabnik ne poda ničesar (pritisne le enter), naj se program zaključi. +Števila ter operande ločujte s presledkom. +
+Izraz: 3 5 +
+Rezultat: 8
+
+Izraz: 16 5 %
+Rezultat: 1
+
+Izraz: 16 5 /
+Rezultat: 3
+
+Izraz: 3 3 3 + +
+Rezultat: 9
+
+Izraz: 3 5 + 2 * 10 2 1 - * -
+Rezultat: 6
+
+Izraz:
+
+

''' + +plan = ['''\ +

+''', + '''\ +

'''] + +hint = { + 'final_hint': ['''\ +

Program je pravilen!
+

+'''], +} diff --git a/python/problems/lists_and_for/contains_multiples/common.py b/python/problems/lists_and_for/contains_multiples/common.py new file mode 100644 index 0000000..8bdcc36 --- /dev/null +++ b/python/problems/lists_and_for/contains_multiples/common.py @@ -0,0 +1,49 @@ +# coding=utf-8 + +import re +from python.util import has_token_sequence, string_almost_equal, \ + string_contains_number, get_tokens, get_numbers, get_exception_desc +from server.hints import Hint + +id = 219 +group = 'lists_and_for' +number = 5 +visible = True + +solution = '''\ +xs = [42, 5, 4, -7, 2, 12, -3, -4, 11, 42, 2] + +vsebuje = False +for x in xs: + if x % 42 == 0: + vsebuje = True +print(vsebuje) +''' + +hint_type = { + 'final_hint': Hint('final_hint') +} + +def test(python, code): + test_in = [1] + n_correct = 0 + + 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)}}) + if passed: + hints.append({'id': 'final_hint'}) + return passed, hints + +def hint(python, code): + tokens = get_tokens(code) + + # run one test first to see if there are any exceptions + answer = python(code=code, inputs=[(None, None)], timeout=1.0) + exc = get_exception_desc(answer[0][3]) + if exc: return exc + + return None diff --git a/python/problems/lists_and_for/contains_multiples/en.py b/python/problems/lists_and_for/contains_multiples/en.py new file mode 100644 index 0000000..47bf004 --- /dev/null +++ b/python/problems/lists_and_for/contains_multiples/en.py @@ -0,0 +1,16 @@ +# coding=utf-8 + +id = 219 +name = 'Contains multiples' +slug = 'Contains multiples' + +description = '''\ +

(translation missing)

''' + +hint = { + 'plan': '''\ +

(translation missing)

''', + + 'no_input_call': '''\ +

(translation missing)

''', +} diff --git a/python/problems/lists_and_for/contains_multiples/sl.py b/python/problems/lists_and_for/contains_multiples/sl.py new file mode 100644 index 0000000..ae4c845 --- /dev/null +++ b/python/problems/lists_and_for/contains_multiples/sl.py @@ -0,0 +1,29 @@ +# coding=utf-8 +import server +mod = server.problems.load_language('python', 'sl') + + +id = 219 +name = 'Vsebuje večkratnik' +slug = 'Vsebuje večkratnik' + + +description = '''\ +

+Napiši program, ki izpiše True, če se v seznamu števil pojavi večkratnik števila +42, sicer izpiše False. +Seznam xs definiraj na vrhu programa. +

''' + +plan = ['''\ +

+''', + '''\ +

'''] + +hint = { + 'final_hint': ['''\ +

Program je pravilen!
+

+'''], +} diff --git a/python/problems/lists_and_for/divisors/common.py b/python/problems/lists_and_for/divisors/common.py index 4f440e4..f9334be 100644 --- a/python/problems/lists_and_for/divisors/common.py +++ b/python/problems/lists_and_for/divisors/common.py @@ -7,8 +7,8 @@ from server.hints import Hint id = 204 group = 'lists_and_for' -number = 4 -visible = True +number = 20 +visible = False solution = '''\ n = int(input('Vnesi število: ')) diff --git a/python/problems/lists_and_for/divisors/sl.py b/python/problems/lists_and_for/divisors/sl.py index cddeae8..3edf2bb 100644 --- a/python/problems/lists_and_for/divisors/sl.py +++ b/python/problems/lists_and_for/divisors/sl.py @@ -78,7 +78,7 @@ hint = {

Naloga rešena!

Dejansko ne potrebujemo pregledati vseh števil med 1 in n-1, - dovolj bo če gremo do kvadratnega korena od števila n:

+ dovolj bo če gremo do kvadratnega korena števila n:

 from math import *
 
diff --git a/python/problems/lists_and_for/divisors_sum/common.py b/python/problems/lists_and_for/divisors_sum/common.py
new file mode 100644
index 0000000..651f657
--- /dev/null
+++ b/python/problems/lists_and_for/divisors_sum/common.py
@@ -0,0 +1,111 @@
+# coding=utf-8
+
+import re
+from python.util import has_token_sequence, string_almost_equal, \
+    string_contains_number, get_tokens, get_numbers, get_exception_desc
+from server.hints import Hint
+
+id = 216
+group = 'lists_and_for'
+number = 21
+visible = False
+
+solution = '''\
+n = int(input('Vnesi število: '))
+vsota = 0
+for i in range(1, n):
+    if n % i == 0:
+        vsota += i
+print(vsota)
+'''
+
+hint_type = {
+    'input_clause': Hint('input_clause'),
+    'range_function': Hint('range_function'),
+    'printing': Hint('printing'),
+    'divisor': Hint('divisor'),
+    'final_hint': Hint('final_hint'),
+    'zero_division': Hint('zero_division'),
+    'last_number': Hint('last_number'),
+    'summing': Hint('summing'),
+}
+
+def test(python, code):
+    test_in = [
+        (None, '8\n'),
+        (None, '6\n'),
+        (None, '5\n'),
+        (None, '2\n'),
+        (None, '15\n'),
+        (None, '20\n'),
+    ]
+    test_out = [
+            7,
+            6,
+            1,
+            1,
+            9,
+            22]
+
+    # List of outputs: (expression result, stdout, stderr, exception).
+    answers = python(code=code, inputs=test_in, timeout=1.0)
+    outputs = [ans[1] for ans in answers]
+
+    n_correct, tin = 0, None
+    for i, (output, result) in enumerate(zip(outputs, test_out)):
+        if result in get_numbers(output):
+            n_correct += 1
+        else:
+            tin = test_in[i][1]
+            tout = result
+
+    passed = n_correct == len(test_in)
+    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)}})
+    if passed:
+        hints.append({'id': 'final_hint'})
+    return passed, hints
+
+def hint(python, code):
+    tokens = get_tokens(code)
+    # run one test first to see if there are any exceptions
+    answer = python(code=code, inputs=[(None, '8\n')], timeout=1.0)
+    exc = get_exception_desc(answer[0][3])
+    if exc:
+        if 'ZeroDivisionError' in answer[0][3]:
+            return [{'id' : 'zero_division', 'args': {'message': answer[0][3]}}]
+        else:
+            return exc
+
+    # if has no input, tell him how to ask questions
+    if not has_token_sequence(tokens, ['input']):
+        return [{'id' : 'input_clause'}]
+
+    # if it has no range, explain how we can create a list (generator) from a number
+    if not has_token_sequence(tokens, ['range']):
+        return [{'id' : 'range_function'}]
+
+    # if it has no print function, tell him to use print
+    if not has_token_sequence(tokens, ['print']):
+        return [{'id' : 'printing'}]
+
+    # if it has no divisoin-by-modulo operator, explain that operator
+    if not has_token_sequence(tokens, ['%']):
+        return [{'id' : 'divisor'}]
+
+    # if the program prints 15 instead of 7,
+    # it means that is adds also itself
+    nums = get_numbers(answer[0][1])
+    if 15 in nums and 7 not in nums:
+        return [{'id' : 'last_number'}]
+
+    # if program prints only the last number or 
+    # only the first number, explain how to sum
+    # elements in iterations
+    if 7 not in nums and \
+       (1 in nums or 4 in nums or 8 in nums):
+        return [{'id' : 'summing'}]
+
+
+    return None
diff --git a/python/problems/lists_and_for/divisors_sum/en.py b/python/problems/lists_and_for/divisors_sum/en.py
new file mode 100644
index 0000000..4ca12b9
--- /dev/null
+++ b/python/problems/lists_and_for/divisors_sum/en.py
@@ -0,0 +1,16 @@
+# coding=utf-8
+
+id = 216
+name = 'Divisors sum'
+slug = 'Divisors sum'
+
+description = '''\
+

(translation missing)

''' + +hint = { + 'plan': '''\ +

(translation missing)

''', + + 'no_input_call': '''\ +

(translation missing)

''', +} diff --git a/python/problems/lists_and_for/divisors_sum/sl.py b/python/problems/lists_and_for/divisors_sum/sl.py new file mode 100644 index 0000000..4f5c10a --- /dev/null +++ b/python/problems/lists_and_for/divisors_sum/sl.py @@ -0,0 +1,101 @@ +# coding=utf-8 +import server +mod = server.problems.load_language('python', 'sl') + + +id = 216 +name = 'Vsota deliteljev' +slug = 'Vsota deliteljev' + + +description = '''\ +

Napiši program, ki izpiše vsoto vseh deliteljev števila, ki ga vnese uporabnik. +Med delitelji izpustite vnešeno število. Primer:

+
+>>> Vpiši število: 6
+Vsota deliteljev: 6
+
''' + +input_clause = ['''\ +Uporabi funkcijo input. +'''] + +range_function = ['''\ +Uporabi funkcijo range(a,b) +''', + '''\ +

Funkcija range(a, b) pripravi seznam števil od a do števila b-1. Poskusi!

''', + '''\ +

Z zanko for se sprehodi čez elemente seznama oz. v našem primeru +čez vsa števila od a do b-1.

+'''] + +divisor = ['''\ +

Operator % vrne ostanek pri deljenju.

''', + '''\ +
+>>> 5%3
+2
+>>> 17%8
+1
+
''', + '''\ +

Če je ostanek pri deljenju števila a s številom b enak 0, potem b +deli število a.

''', + '''\ +
+if a%b == 0:
+    # b je delitelj števila a
+
+'''] + +summing = ['''\ +

Če hočemo delitelje prišteti vsoti, moramo imeti vsoto nekje shranjeno. +Torej potrebujemo spremenljivko.

''', + '''\ +

Nekako tako:

+
+vsota = 0
+for ....
+    if ...
+        vsota += d # d deli izbrano število
+
'''] + +plan = ['''\ +

Plan bo podoben kot v prejšnji naloge, kjer smo delitelje izpisali. +Tokrat delitelja ne izpišemo, ampak ga prištejemo vsoti.

+''', + summing] + + +hint = { + 'input_clause': input_clause, + + 'range_function': range_function, + + 'printing': ['''\ +

Izpiši rezultat.

'''], + + 'divisor': divisor, + + 'last_number': ['''\ +

Tokrat med delitelji ne upoštevamo vnešenega števila!

'''], + + 'final_hint': ['''\ +

Naloga rešena!
+Nakoč bomo znali to napisati krajše:

+
+n = int(input("Vpiši število: "))
+print(sum(i for i in range(1, n) if n % i == 0))
+
'''], + + 'summing': summing, + + 'zero_division': [mod.general_msg['error_head'], + mod.general_msg['general_exception'], + '''\ +

Deljenje z nič ni dovoljeno!

''', + '''\ +

Računanje ostanka z operatorjem % je tudi deljenje.'''] + +} diff --git a/python/problems/lists_and_for/every_third/common.py b/python/problems/lists_and_for/every_third/common.py new file mode 100644 index 0000000..9c27446 --- /dev/null +++ b/python/problems/lists_and_for/every_third/common.py @@ -0,0 +1,50 @@ +# coding=utf-8 + +import re +from python.util import has_token_sequence, string_almost_equal, \ + string_contains_number, get_tokens, get_numbers, get_exception_desc +from server.hints import Hint + +id = 220 +group = 'lists_and_for' +number = 6 +visible = True + +solution = '''\ +xs = [42, 5, 4, -7, 2, 12, -3, -4, 11, 42, 2] + +ys = [] +i = 2 +while i < len(xs): + ys.append(xs[i]) + i += 3 +print(ys) +''' + +hint_type = { + 'final_hint': Hint('final_hint') +} + +def test(python, code): + test_in = [1] + n_correct = 0 + + 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)}}) + if passed: + hints.append({'id': 'final_hint'}) + return passed, hints + +def hint(python, code): + tokens = get_tokens(code) + + # run one test first to see if there are any exceptions + answer = python(code=code, inputs=[(None, None)], timeout=1.0) + exc = get_exception_desc(answer[0][3]) + if exc: return exc + + return None diff --git a/python/problems/lists_and_for/every_third/en.py b/python/problems/lists_and_for/every_third/en.py new file mode 100644 index 0000000..e7c843e --- /dev/null +++ b/python/problems/lists_and_for/every_third/en.py @@ -0,0 +1,16 @@ +# coding=utf-8 + +id = 220 +name = 'Every third' +slug = 'Every third' + +description = '''\ +

(translation missing)

''' + +hint = { + 'plan': '''\ +

(translation missing)

''', + + 'no_input_call': '''\ +

(translation missing)

''', +} diff --git a/python/problems/lists_and_for/every_third/sl.py b/python/problems/lists_and_for/every_third/sl.py new file mode 100644 index 0000000..3bac8a3 --- /dev/null +++ b/python/problems/lists_and_for/every_third/sl.py @@ -0,0 +1,35 @@ +# coding=utf-8 +import server +mod = server.problems.load_language('python', 'sl') + + +id = 220 +name = 'Vsak tretji' +slug = 'Vsak tretji' + + +description = '''\ +

+Napiši program, ki iz podanega seznama sestavi nov seznam, ki vsebuje le vsak tretji element podanega seznama. +Kot dosedaj, naj se program začne z +

+xs = [42, 5, 4, -7, 2, 12, -3, -4, 11, 42, 2]
+
+in (v tem primeru) izpiše +
+[4, 12, 11]
+
+

''' + +plan = ['''\ +

+''', + '''\ +

'''] + +hint = { + 'final_hint': ['''\ +

Program je pravilen!
+

+'''], +} diff --git a/python/problems/lists_and_for/perfect_numbers/common.py b/python/problems/lists_and_for/perfect_numbers/common.py new file mode 100644 index 0000000..c1c7645 --- /dev/null +++ b/python/problems/lists_and_for/perfect_numbers/common.py @@ -0,0 +1,114 @@ +# coding=utf-8 + +import re +from python.util import has_token_sequence, string_almost_equal, \ + string_contains_number, get_tokens, get_numbers, get_exception_desc +from server.hints import Hint + +id = 217 +group = 'lists_and_for' +number = 22 +visible = False + +solution = '''\ +n = int(input('Vnesi število: ')) +vsota = 0 +for i in range(1, n): + if n % i == 0: + vsota += i +if vsota == n: + print('Je popolno') +else: + print('Ni popolno') +''' + +hint_type = { + 'input_clause': Hint('input_clause'), + 'range_function': Hint('range_function'), + 'printing': Hint('printing'), + 'divisor': Hint('divisor'), + 'final_hint': Hint('final_hint'), + 'zero_division': Hint('zero_division'), + 'last_number': Hint('last_number'), + 'summing': Hint('summing'), +} + +def test(python, code): + test_in = [ + (None, '8\n'), + (None, '6\n'), + (None, '5\n'), + (None, '2\n'), + (None, '15\n'), + (None, '20\n'), + ] + test_out = [ + 7, + 6, + 1, + 1, + 9, + 22] + + # List of outputs: (expression result, stdout, stderr, exception). + answers = python(code=code, inputs=test_in, timeout=1.0) + outputs = [ans[1] for ans in answers] + + n_correct, tin = 0, None + for i, (output, result) in enumerate(zip(outputs, test_out)): + if result in get_numbers(output): + n_correct += 1 + else: + tin = test_in[i][1] + tout = result + + passed = n_correct == len(test_in) + 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)}}) + if passed: + hints.append({'id': 'final_hint'}) + return passed, hints + +def hint(python, code): + tokens = get_tokens(code) + # run one test first to see if there are any exceptions + answer = python(code=code, inputs=[(None, '8\n')], timeout=1.0) + exc = get_exception_desc(answer[0][3]) + if exc: + if 'ZeroDivisionError' in answer[0][3]: + return [{'id' : 'zero_division', 'args': {'message': answer[0][3]}}] + else: + return exc + + # if has no input, tell him how to ask questions + if not has_token_sequence(tokens, ['input']): + return [{'id' : 'input_clause'}] + + # if it has no range, explain how we can create a list (generator) from a number + if not has_token_sequence(tokens, ['range']): + return [{'id' : 'range_function'}] + + # if it has no print function, tell him to use print + if not has_token_sequence(tokens, ['print']): + return [{'id' : 'printing'}] + + # if it has no divisoin-by-modulo operator, explain that operator + if not has_token_sequence(tokens, ['%']): + return [{'id' : 'divisor'}] + + # if the program prints 15 instead of 7, + # it means that is adds also itself + nums = get_numbers(answer[0][1]) + if 15 in nums and 7 not in nums: + return [{'id' : 'last_number'}] + + # if program prints only the last number or + # only the first number, explain how to sum + # elements in iterations + if 7 not in nums and \ + (1 in nums or 4 in nums or 8 in nums): + return [{'id' : 'summing'}] + + + return None diff --git a/python/problems/lists_and_for/perfect_numbers/en.py b/python/problems/lists_and_for/perfect_numbers/en.py new file mode 100644 index 0000000..19d5262 --- /dev/null +++ b/python/problems/lists_and_for/perfect_numbers/en.py @@ -0,0 +1,16 @@ +# coding=utf-8 + +id = 217 +name = 'Perfect number' +slug = 'Perfect number' + +description = '''\ +

(translation missing)

''' + +hint = { + 'plan': '''\ +

(translation missing)

''', + + 'no_input_call': '''\ +

(translation missing)

''', +} diff --git a/python/problems/lists_and_for/perfect_numbers/sl.py b/python/problems/lists_and_for/perfect_numbers/sl.py new file mode 100644 index 0000000..bc02d00 --- /dev/null +++ b/python/problems/lists_and_for/perfect_numbers/sl.py @@ -0,0 +1,96 @@ +# coding=utf-8 +import server +mod = server.problems.load_language('python', 'sl') + + +id = 217 +name = 'Popolna števila' +slug = 'Popolna števila' + + +description = '''\ +

Napiši program, ki izpiše "je popolno", če je podano število popolno, oz. +"ni popolno", če ni. Popolna števila so števila, ki so enaka vsoti svojih +deliteljev (brez samega sebe). Primer popolnega števila je 28, +saj so njegovi delitelji 1, 2, 4, 7, 14, njihova vsota, +1+2+4+7+14 pa je spet enaka 28.

''' + +input_clause = ['''\ +Uporabi funkcijo input. +'''] + +range_function = ['''\ +Uporabi funkcijo range(a,b) +''', + '''\ +

Funkcija range(a, b) pripravi seznam števil od a do števila b-1. Poskusi!

''', + '''\ +

Z zanko for se sprehodi čez elemente seznama oz. v našem primeru +čez vsa števila od a do b-1.

+'''] + +divisor = ['''\ +

Operator % vrne ostanek pri deljenju.

''', + '''\ +
+>>> 5%3
+2
+>>> 17%8
+1
+
''', + '''\ +

Če je ostanek pri deljenju števila a s številom b enak 0, potem b +deli število a.

''', + '''\ +
+if a%b == 0:
+    # b je delitelj števila a
+
+'''] + +summing = ['''\ +

Če hočemo delitelje prišteti vsoti, moramo imeti vsoto nekje shranjeno. +Torej potrebujemo spremenljivko.

''', + '''\ +

Nekako tako:

+
+vsota = 0
+for ....
+    if ...
+        vsota += d # d deli izbrano število
+
'''] + +plan = ['''\ +

Gre za praktično enako nalogo, kot je bila prejšnja. Le na koncu +moramo preveriti, če je vsota deliteljev enaka vnešenemu številu.

+'''] + + +hint = { + 'input_clause': input_clause, + + 'range_function': range_function, + + 'printing': ['''\ +

Izpiši rezultat.

'''], + + 'divisor': divisor, + + 'final_hint': ['''\ +

Naloga rešena!
+Podobno kot prejšnjo, lahko rešitev napišemo krajše:

+
+n = int(input("Vpiši število: "))
+print(n == sum(i for i in range(1, n) if n % i == 0))
+
'''], + + 'summing': summing, + + 'zero_division': [mod.general_msg['error_head'], + mod.general_msg['general_exception'], + '''\ +

Deljenje z nič ni dovoljeno!

''', + '''\ +

Računanje ostanka z operatorjem % je tudi deljenje.'''] + +} diff --git a/python/problems/lists_and_for/places/common.py b/python/problems/lists_and_for/places/common.py new file mode 100644 index 0000000..66db7a3 --- /dev/null +++ b/python/problems/lists_and_for/places/common.py @@ -0,0 +1,49 @@ +# coding=utf-8 + +import re +from python.util import has_token_sequence, string_almost_equal, \ + string_contains_number, get_tokens, get_numbers, get_exception_desc +from server.hints import Hint + +id = 218 +group = 'lists_and_for' +number = 4 +visible = True + +solution = '''\ +xs = [42, 5, 4, -7, 2, 12, -3, -4, 11, 42, 2] + +mesta = [] +for i in range(len(xs)): + if xs[i] == 42: + mesta.append(i) +print(mesta) +''' + +hint_type = { + 'final_hint': Hint('final_hint') +} + +def test(python, code): + test_in = [1] + n_correct = 0 + + 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)}}) + if passed: + hints.append({'id': 'final_hint'}) + return passed, hints + +def hint(python, code): + tokens = get_tokens(code) + + # run one test first to see if there are any exceptions + answer = python(code=code, inputs=[(None, None)], timeout=1.0) + exc = get_exception_desc(answer[0][3]) + if exc: return exc + + return None diff --git a/python/problems/lists_and_for/places/en.py b/python/problems/lists_and_for/places/en.py new file mode 100644 index 0000000..95b119f --- /dev/null +++ b/python/problems/lists_and_for/places/en.py @@ -0,0 +1,16 @@ +# coding=utf-8 + +id = 218 +name = 'Places' +slug = 'Places' + +description = '''\ +

(translation missing)

''' + +hint = { + 'plan': '''\ +

(translation missing)

''', + + 'no_input_call': '''\ +

(translation missing)

''', +} diff --git a/python/problems/lists_and_for/places/sl.py b/python/problems/lists_and_for/places/sl.py new file mode 100644 index 0000000..716da30 --- /dev/null +++ b/python/problems/lists_and_for/places/sl.py @@ -0,0 +1,32 @@ +# coding=utf-8 +import server +mod = server.problems.load_language('python', 'sl') + + +id = 218 +name = 'Mesta' +slug = 'Mesta' + + +description = '''\ +

+Program naj sestavi seznam vseh mest, na katerih se v podanem seznamu pojavi število 42. +Za seznam iz prve naloge +

+xs = [42, 5, 4, -7, 2, 12, -3, -4, 11, 42, 2]
+
+naj vaš program izpiše [0, 9], saj se število 42 pojavi na ničtem in devetem mestu (če začnemo šteti z 0). +

''' + +plan = ['''\ +

+''', + '''\ +

'''] + +hint = { + 'final_hint': ['''\ +

Program je pravilen!
+

+'''], +} diff --git a/python/problems/lists_and_for/prefix/common.py b/python/problems/lists_and_for/prefix/common.py new file mode 100644 index 0000000..cb8d706 --- /dev/null +++ b/python/problems/lists_and_for/prefix/common.py @@ -0,0 +1,48 @@ +# coding=utf-8 + +import re +from python.util import has_token_sequence, string_almost_equal, \ + string_contains_number, get_tokens, get_numbers, get_exception_desc +from server.hints import Hint + +id = 221 +group = 'lists_and_for' +number = 7 +visible = True + +solution = '''\ +s = input('Vpiši besedo: ') + +xs = [] +for i in range(len(s) + 1): + xs.append(s[:i]) +print(xs) +''' + +hint_type = { + 'final_hint': Hint('final_hint') +} + +def test(python, code): + test_in = [1] + n_correct = 0 + + 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)}}) + if passed: + hints.append({'id': 'final_hint'}) + return passed, hints + +def hint(python, code): + tokens = get_tokens(code) + + # run one test first to see if there are any exceptions + answer = python(code=code, inputs=[(None, None)], timeout=1.0) + exc = get_exception_desc(answer[0][3]) + if exc: return exc + + return None diff --git a/python/problems/lists_and_for/prefix/en.py b/python/problems/lists_and_for/prefix/en.py new file mode 100644 index 0000000..ea26765 --- /dev/null +++ b/python/problems/lists_and_for/prefix/en.py @@ -0,0 +1,16 @@ +# coding=utf-8 + +id = 221 +name = 'Prefix' +slug = 'Prefix' + +description = '''\ +

(translation missing)

''' + +hint = { + 'plan': '''\ +

(translation missing)

''', + + 'no_input_call': '''\ +

(translation missing)

''', +} diff --git a/python/problems/lists_and_for/prefix/sl.py b/python/problems/lists_and_for/prefix/sl.py new file mode 100644 index 0000000..0a3d391 --- /dev/null +++ b/python/problems/lists_and_for/prefix/sl.py @@ -0,0 +1,31 @@ +# coding=utf-8 +import server +mod = server.problems.load_language('python', 'sl') + + +id = 221 +name = 'Predpone' +slug = 'Predpone' + + +description = '''\ +

+Uporabnika prosite, da vam zaupa besedo, nato pa sestavite in izpišite seznam vseh predpon te besede. +

+Vpiši besedo: drevo
+['', 'd', 'dr', 'dre', 'drev', 'drevo']
+
+

''' + +plan = ['''\ +

+''', + '''\ +

'''] + +hint = { + 'final_hint': ['''\ +

Program je pravilen!
+

+'''], +} diff --git a/python/problems/lists_and_for/split_word/common.py b/python/problems/lists_and_for/split_word/common.py new file mode 100644 index 0000000..0947b09 --- /dev/null +++ b/python/problems/lists_and_for/split_word/common.py @@ -0,0 +1,48 @@ +# coding=utf-8 + +import re +from python.util import has_token_sequence, string_almost_equal, \ + string_contains_number, get_tokens, get_numbers, get_exception_desc +from server.hints import Hint + +id = 222 +group = 'lists_and_for' +number = 8 +visible = True + +solution = '''\ +s = input('Vpiši besedo: ') + +xs = [] +for i in range(len(s) + 1): + xs.append((s[:i], s[i:])) +print(x) +''' + +hint_type = { + 'final_hint': Hint('final_hint') +} + +def test(python, code): + test_in = [1] + n_correct = 0 + + 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)}}) + if passed: + hints.append({'id': 'final_hint'}) + return passed, hints + +def hint(python, code): + tokens = get_tokens(code) + + # run one test first to see if there are any exceptions + answer = python(code=code, inputs=[(None, None)], timeout=1.0) + exc = get_exception_desc(answer[0][3]) + if exc: return exc + + return None diff --git a/python/problems/lists_and_for/split_word/en.py b/python/problems/lists_and_for/split_word/en.py new file mode 100644 index 0000000..a6519d0 --- /dev/null +++ b/python/problems/lists_and_for/split_word/en.py @@ -0,0 +1,16 @@ +# coding=utf-8 + +id = 222 +name = 'Split word' +slug = 'Split word' + +description = '''\ +

(translation missing)

''' + +hint = { + 'plan': '''\ +

(translation missing)

''', + + 'no_input_call': '''\ +

(translation missing)

''', +} diff --git a/python/problems/lists_and_for/split_word/sl.py b/python/problems/lists_and_for/split_word/sl.py new file mode 100644 index 0000000..80ecfc4 --- /dev/null +++ b/python/problems/lists_and_for/split_word/sl.py @@ -0,0 +1,31 @@ +# coding=utf-8 +import server +mod = server.problems.load_language('python', 'sl') + + +id = 222 +name = 'Deli' +slug = 'Deli' + + +description = '''\ +

+Program naj sestavi sezam vseh delitev podane besede. +

+Vpiši besedo: gozd
+[('', 'gozd'), ('g', 'ozd'), ('go', 'zd'), ('goz', 'd'), ('gozd', '')]
+
+

''' + +plan = ['''\ +

+''', + '''\ +

'''] + +hint = { + 'final_hint': ['''\ +

Program je pravilen!
+

+'''], +} diff --git a/python/problems/lists_and_for/substrings/common.py b/python/problems/lists_and_for/substrings/common.py new file mode 100644 index 0000000..32a3d4c --- /dev/null +++ b/python/problems/lists_and_for/substrings/common.py @@ -0,0 +1,51 @@ +# coding=utf-8 + +import re +from python.util import has_token_sequence, string_almost_equal, \ + string_contains_number, get_tokens, get_numbers, get_exception_desc +from server.hints import Hint + +id = 223 +group = 'lists_and_for' +number = 9 +visible = True + +solution = '''\ +s = input('Vpiši besedo: ') + +xs = [''] +# Zanka po dolžini podniza. +for i in range(1, len(s) + 1): + # Zanka po začetku podniza. + for j in range(len(s) - i + 1): + xs.append(s[j:j + i]) +print(xs) +''' + +hint_type = { + 'final_hint': Hint('final_hint') +} + +def test(python, code): + test_in = [1] + n_correct = 0 + + 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)}}) + if passed: + hints.append({'id': 'final_hint'}) + return passed, hints + +def hint(python, code): + tokens = get_tokens(code) + + # run one test first to see if there are any exceptions + answer = python(code=code, inputs=[(None, None)], timeout=1.0) + exc = get_exception_desc(answer[0][3]) + if exc: return exc + + return None diff --git a/python/problems/lists_and_for/substrings/en.py b/python/problems/lists_and_for/substrings/en.py new file mode 100644 index 0000000..053bee4 --- /dev/null +++ b/python/problems/lists_and_for/substrings/en.py @@ -0,0 +1,16 @@ +# coding=utf-8 + +id = 223 +name = 'Substrings' +slug = 'Substrings' + +description = '''\ +

(translation missing)

''' + +hint = { + 'plan': '''\ +

(translation missing)

''', + + 'no_input_call': '''\ +

(translation missing)

''', +} diff --git a/python/problems/lists_and_for/substrings/sl.py b/python/problems/lists_and_for/substrings/sl.py new file mode 100644 index 0000000..595aee8 --- /dev/null +++ b/python/problems/lists_and_for/substrings/sl.py @@ -0,0 +1,33 @@ +# coding=utf-8 +import server +mod = server.problems.load_language('python', 'sl') + + +id = 223 +name = 'Podnizi' +slug = 'Podnizi' + + +description = '''\ +

+Program naj sestavi seznam vseh podnizov podane besede. +

+Vpiši besedo: tema
+['', 't', 'e', 'm', 'a', 'te', 'em', 'ma', 'tem', 'ema', 'tema']
+
+Vrstni red naj bo točno tak kot ga prikazuje primer. Začnemo s praznim nizom, +nato pridejo na vrsto podnizi dolžine ena, dva, tri, ... +

''' + +plan = ['''\ +

+''', + '''\ +

'''] + +hint = { + 'final_hint': ['''\ +

Program je pravilen!
+

+'''], +} diff --git a/python/problems/while_and_if/checking_account/en.py b/python/problems/while_and_if/checking_account/en.py index 1d36474..47633e8 100644 --- a/python/problems/while_and_if/checking_account/en.py +++ b/python/problems/while_and_if/checking_account/en.py @@ -1,8 +1,8 @@ # coding=utf-8 id = 199 -name = 'Checking Account' -slug = 'Checking Account' +name = 'Checking account' +slug = 'Checking account' description = '''\

(translation missing)

''' diff --git a/python/problems/while_and_if/consumers_anonymous/en.py b/python/problems/while_and_if/consumers_anonymous/en.py index 6331570..9691ac2 100644 --- a/python/problems/while_and_if/consumers_anonymous/en.py +++ b/python/problems/while_and_if/consumers_anonymous/en.py @@ -3,8 +3,8 @@ import server mod = server.problems.load_language('python', 'sl') id = 201 -name = 'Consumers Anonymous' -slug = 'Consumers Anonymous' +name = 'Consumers anonymous' +slug = 'Consumers anonymous' description = '''\

(translation missing)

''' -- cgit v1.2.1 From 95e107bf9e6a288969e4a83aee1a7062990f3b67 Mon Sep 17 00:00:00 2001 From: Martin Date: Fri, 9 Oct 2015 16:35:23 +0200 Subject: Fixed testing for most problems. --- python/problems/functions/assign_numbers/common.py | 24 +++++++++++-- .../problems/functions/body_mass_index/common.py | 27 +++++++++++++-- .../problems/functions/body_mass_index_2/common.py | 26 ++++++++++++-- python/problems/functions/common.py | 1 + python/problems/functions/divisors/common.py | 30 ++++++++++++++-- python/problems/functions/divisors_sum/common.py | 28 +++++++++++++-- .../problems/functions/friendly_numbers/common.py | 31 ++++++++++++++--- python/problems/functions/friendly_numbers/en.py | 4 +-- python/problems/functions/friendly_numbers/sl.py | 6 ++-- python/problems/functions/greatest/common.py | 4 +++ .../functions/greatest_absolutist/common.py | 4 +++ .../problems/functions/greatest_negative/common.py | 4 +++ python/problems/functions/palindrome/common.py | 31 +++++++++++++++-- .../functions/palindromic_numbers/common.py | 28 +++++++++++++-- .../problems/functions/perfect_numbers/common.py | 27 +++++++++++++-- python/problems/functions/prime_numbers/common.py | 27 +++++++++++++-- .../problems/functions_and_modules/all/common.py | 32 +++++++++++++++-- .../problems/functions_and_modules/any/common.py | 30 ++++++++++++++-- .../functions_and_modules/caesar_cipher/common.py | 36 ++++++++++++++++--- python/problems/functions_and_modules/common.py | 2 ++ .../functions_and_modules/dominoes/common.py | 29 ++++++++++++++-- .../largest_sublist/common.py | 27 +++++++++++++-- .../functions_and_modules/lists_sum/common.py | 29 ++++++++++++++-- .../functions_and_modules/longest_word/common.py | 30 ++++++++++++++-- .../problems/functions_and_modules/map/common.py | 25 ++++++++++++-- .../multiplicative_range/common.py | 27 +++++++++++++-- .../functions_and_modules/similarity/common.py | 32 +++++++++++++++-- .../suspicious_words/common.py | 29 ++++++++++++++-- .../lists_and_for/calculator_polish/common.py | 33 ++++++++++++++++-- python/problems/lists_and_for/common.py | 1 + .../lists_and_for/contains_multiples/common.py | 40 ++++++++++++++++++++-- python/problems/lists_and_for/divisors/common.py | 2 +- .../problems/lists_and_for/divisors_sum/common.py | 2 +- .../problems/lists_and_for/every_third/common.py | 34 ++++++++++++++++-- .../lists_and_for/perfect_numbers/common.py | 2 +- python/problems/lists_and_for/places/common.py | 38 ++++++++++++++++++-- python/problems/lists_and_for/prefix/common.py | 25 ++++++++++++-- python/problems/lists_and_for/split_word/common.py | 26 +++++++++++--- python/problems/lists_and_for/substrings/common.py | 24 +++++++++++-- python/problems/while_and_if/common.py | 1 + python/sl.py | 2 +- 41 files changed, 764 insertions(+), 96 deletions(-) create mode 100644 python/problems/functions_and_modules/common.py (limited to 'python') 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 = '''\

(translation missing)

''' 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 = '''\

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 friendly_number(n), ki vrne prijateljsko število številu n, če ga ima, oz. +Napiši funkcijo amicable_number(n), ki vrne prijateljsko število številu n, če ga ima, oz. vrne None, če ga nima. Primer:

->>> friendly_number(220)
+>>> amicable_number(220)
 284
->>> friendly_number(222)
+>>> amicable_number(222)
 None
 

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)}}) diff --git a/python/problems/functions_and_modules/all/common.py b/python/problems/functions_and_modules/all/common.py index 7fb60f5..e87aa74 100644 --- a/python/problems/functions_and_modules/all/common.py +++ b/python/problems/functions_and_modules/all/common.py @@ -23,12 +23,37 @@ hint_type = { } def test(python, code): - test_in = [1] + func_name = 'all' + 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, True, False], False), + ([True, True], True), + ([1, 2, 3, 0], False), + (['foo', 42, True], True), + (['foo', '', 42, True], False), + (['foo', 0.0, 42, True], False), + (['foo', None, 42, True], False), + (['foo', (), 42, True], False), + (['foo', [], 42, True], False), + ([], 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)}}) @@ -36,6 +61,7 @@ def test(python, code): hints.append({'id': 'final_hint'}) return passed, hints + def hint(python, code): tokens = get_tokens(code) diff --git a/python/problems/functions_and_modules/any/common.py b/python/problems/functions_and_modules/any/common.py index 78867c5..a96ae04 100644 --- a/python/problems/functions_and_modules/any/common.py +++ b/python/problems/functions_and_modules/any/common.py @@ -23,12 +23,35 @@ hint_type = { } def test(python, code): - test_in = [1] + func_name = 'any' + 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 = [ + ([2, 3, 0], True), + ([], False), + ([True, False, False], True), + ([False, False], False), + (['foo', 42, True], True), + ([False, 0, 0.0, '', None, (), []], False), + ([False, 0, 0.42, '', None, (), []], True), + ([False, 0, 0.0, '', None, (), [42]], 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)}}) @@ -36,6 +59,7 @@ def test(python, code): hints.append({'id': 'final_hint'}) return passed, hints + def hint(python, code): tokens = get_tokens(code) diff --git a/python/problems/functions_and_modules/caesar_cipher/common.py b/python/problems/functions_and_modules/caesar_cipher/common.py index 494a7f9..3c53369 100644 --- a/python/problems/functions_and_modules/caesar_cipher/common.py +++ b/python/problems/functions_and_modules/caesar_cipher/common.py @@ -20,7 +20,7 @@ def caesar(s): cipher += chr(ord(c) - 23) else: cipher += c - return cipher) + return cipher ''' hint_type = { @@ -28,12 +28,39 @@ hint_type = { } def test(python, code): - test_in = [1] + func_name = 'caesar' + 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 = [ + ('', ''), + ('a', 'd'), + ('aa', 'dd'), + ('ab', 'de'), + ('z', 'c'), + ('xyz', 'abc'), + (' ', ' '), + ('a a', 'd d'), + ('julij cezar je seveda uporabljal cezarjevo sifro', + 'mxolm fhcdu mh vhyhgd xsrudeomdo fhcdumhyr vliur'), + ('the quick brown fox jumps over the lazy dog', + 'wkh txlfn eurzq ira mxpsv ryhu wkh odcb grj'), + ] + + 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)}}) @@ -41,6 +68,7 @@ def test(python, code): hints.append({'id': 'final_hint'}) return passed, hints + def hint(python, code): tokens = get_tokens(code) diff --git a/python/problems/functions_and_modules/common.py b/python/problems/functions_and_modules/common.py new file mode 100644 index 0000000..915b041 --- /dev/null +++ b/python/problems/functions_and_modules/common.py @@ -0,0 +1,2 @@ +id = 18 +number = 5 \ No newline at end of file diff --git a/python/problems/functions_and_modules/dominoes/common.py b/python/problems/functions_and_modules/dominoes/common.py index 5e73d8e..4a0f439 100644 --- a/python/problems/functions_and_modules/dominoes/common.py +++ b/python/problems/functions_and_modules/dominoes/common.py @@ -23,12 +23,34 @@ hint_type = { } def test(python, code): - test_in = [1] + func_name = 'dominoes' + 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), + ([(2, 4), (4, 4)], True), + ([(2, 4), (4, 4), (4, 2)], True), + ([(2, 4), (4, 4), (4, 2), (2, 9), (9, 1)], True), + ([(2, 4), (4, 3), (4, 2), (2, 9), (9, 1)], False), + ([(3, 6), (6, 6), (6, 1), (1, 0)], True), + ([(3, 6), (6, 6), (2, 3)], 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)}}) @@ -36,6 +58,7 @@ def test(python, code): hints.append({'id': 'final_hint'}) return passed, hints + def hint(python, code): tokens = get_tokens(code) diff --git a/python/problems/functions_and_modules/largest_sublist/common.py b/python/problems/functions_and_modules/largest_sublist/common.py index 372e34f..90e3ae4 100644 --- a/python/problems/functions_and_modules/largest_sublist/common.py +++ b/python/problems/functions_and_modules/largest_sublist/common.py @@ -29,12 +29,32 @@ hint_type = { } def test(python, code): - test_in = [1] + func_name = 'largest_sublist' + 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 = [ + ([[0]], [0]), + ([[1, 2]], [1, 2]), + ([[1, 2], [], [0]], [1, 2]), + ([[2, 4, 1], [3, 1], [], [8, 2], [1, 1, 1, 1]], [8, 2]), + ([[5, 3, 6, 3], [1, 2, 3, 4], [5, -1, 0]], [5, 3, 6, 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)}}) @@ -42,6 +62,7 @@ def test(python, code): hints.append({'id': 'final_hint'}) return passed, hints + def hint(python, code): tokens = get_tokens(code) diff --git a/python/problems/functions_and_modules/lists_sum/common.py b/python/problems/functions_and_modules/lists_sum/common.py index d3afef4..d6ba72f 100644 --- a/python/problems/functions_and_modules/lists_sum/common.py +++ b/python/problems/functions_and_modules/lists_sum/common.py @@ -26,12 +26,34 @@ hint_type = { } def test(python, code): - test_in = [1] + func_name = 'lists_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 = [ + ([], []), + ([[]], [0]), + ([[0]], [0]), + ([[1, 2]], [3]), + ([[1, 2], [], [0]], [3, 0, 0]), + ([[2, 4, 1], [3, 1], [], [8, 2], [1, 1, 1, 1]], [7, 4, 0, 10, 4]), + ([[5, 3, 6, 3], [1, 2, 3, 4], [5, -1, 0]], [17, 10, 4]), + ] + + 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)}}) @@ -39,6 +61,7 @@ def test(python, code): hints.append({'id': 'final_hint'}) return passed, hints + def hint(python, code): tokens = get_tokens(code) diff --git a/python/problems/functions_and_modules/longest_word/common.py b/python/problems/functions_and_modules/longest_word/common.py index 1201c1d..3ddb269 100644 --- a/python/problems/functions_and_modules/longest_word/common.py +++ b/python/problems/functions_and_modules/longest_word/common.py @@ -24,12 +24,35 @@ hint_type = { } def test(python, code): - test_in = [1] + func_name = 'longest' + 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 = [ + ('beseda', 'beseda'), + ('an ban', 'ban'), + ('an ban pet podgan', 'podgan'), + ('an ban pet podgan stiri misi', 'podgan'), + ('ta clanek je lepo napisan', 'napisan'), + ('123456 12345 1234 123 12 1', '123456'), + ('12345 123456 12345 1234 123 12 1', '123456'), + ('1234 12345 123456 12345 1234 123 12 1', '123456'), + ] + + 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)}}) @@ -37,6 +60,7 @@ def test(python, code): hints.append({'id': 'final_hint'}) return passed, hints + def hint(python, code): tokens = get_tokens(code) diff --git a/python/problems/functions_and_modules/map/common.py b/python/problems/functions_and_modules/map/common.py index e28f356..ace0a09 100644 --- a/python/problems/functions_and_modules/map/common.py +++ b/python/problems/functions_and_modules/map/common.py @@ -23,12 +23,30 @@ hint_type = { } def test(python, code): - test_in = [1] + func_name = 'map' + 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 = [ + (('abs', [-5, 8, -3, -1, 3]), [5, 8, 3, 1, 3]), + (('len', 'Daydream delusion limousine eyelash'.split()), [8, 8, 9, 7]), + (('int', '1 3 5 42'.split()), [1, 3, 5, 42]), + ] + + test_in = [(func_name+'({l[0]},{l[1]})'.format(l = 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)}}) @@ -36,6 +54,7 @@ def test(python, code): hints.append({'id': 'final_hint'}) return passed, hints + def hint(python, code): tokens = get_tokens(code) diff --git a/python/problems/functions_and_modules/multiplicative_range/common.py b/python/problems/functions_and_modules/multiplicative_range/common.py index 9a52dce..0cb2fef 100644 --- a/python/problems/functions_and_modules/multiplicative_range/common.py +++ b/python/problems/functions_and_modules/multiplicative_range/common.py @@ -24,12 +24,32 @@ hint_type = { } def test(python, code): - test_in = [1] + func_name = 'mrange' + 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 = [ + ((32, 2, 0), []), + ((32, 2, 1), [32]), + ((32, 2, 2), [32, 64]), + ((42, -1, 5), [42, -42, 42, -42, 42]), + ((7, 4, 7), [7, 28, 112, 448, 1792, 7168, 28672]), + ] + + 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)}}) @@ -37,6 +57,7 @@ def test(python, code): hints.append({'id': 'final_hint'}) return passed, hints + def hint(python, code): tokens = get_tokens(code) diff --git a/python/problems/functions_and_modules/similarity/common.py b/python/problems/functions_and_modules/similarity/common.py index 5cb8fe7..d71137e 100644 --- a/python/problems/functions_and_modules/similarity/common.py +++ b/python/problems/functions_and_modules/similarity/common.py @@ -24,12 +24,37 @@ hint_type = { } def test(python, code): - test_in = [1] + func_name = 'similarity' + 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 = [ + (('sobota', 'robot'), 4), + (('', 'robot'), 0), + (('sobota', ''), 0), + (('', ''), 0), + (('a', 'b'), 0), + (('a', 'a'), 1), + (('aaa', 'a'), 1), + (('amper', 'amonijak'), 2), + (('1000 let', 'tisoc let'), 0), + (('hamming distance', 'haming distance'), 12) + ] + + 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)}}) @@ -37,6 +62,7 @@ def test(python, code): hints.append({'id': 'final_hint'}) return passed, hints + def hint(python, code): tokens = get_tokens(code) diff --git a/python/problems/functions_and_modules/suspicious_words/common.py b/python/problems/functions_and_modules/suspicious_words/common.py index 74868ab..e6e119a 100644 --- a/python/problems/functions_and_modules/suspicious_words/common.py +++ b/python/problems/functions_and_modules/suspicious_words/common.py @@ -24,12 +24,34 @@ hint_type = { } def test(python, code): - test_in = [1] + func_name = 'suspicious' + 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 = [ + ('', []), + ('aa uu', []), + ('aa uu au', ['au']), + ('muha', ['muha']), + ('Muha pa je rekla: "Tale juha se je pa res prilegla, najlepša huala," in odletela.', + ['Muha', 'juha', 'huala,"']), + ('ameba nima aja in uja, ampak samo a', ['uja,']), + ] + + test_in = [(func_name+"('"+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)}}) @@ -37,6 +59,7 @@ def test(python, code): hints.append({'id': 'final_hint'}) return passed, hints + def hint(python, code): tokens = get_tokens(code) diff --git a/python/problems/lists_and_for/calculator_polish/common.py b/python/problems/lists_and_for/calculator_polish/common.py index d08f19c..7ea25ce 100644 --- a/python/problems/lists_and_for/calculator_polish/common.py +++ b/python/problems/lists_and_for/calculator_polish/common.py @@ -46,12 +46,39 @@ hint_type = { } def test(python, code): - test_in = [1] + in_out = [ + (['6 3 +'], [9]), + (['6 3 -'], [3]), + (['6 3 /'], [2]), + (['7 3 /'], [2]), + (['6 3 *'], [18]), + (['6 3 %'], [0]), + (['1 2 +', '2 3 +', '1 2 3 4 5 * * * *'], [3, 5, 120]), + (['1 2 + 3 +'], [6]), + (['1 2 3 + +'], [6]), + (['1 2 + 3 4 + *'], [21]), + (['1 2 3 * 4 + +'], [11]), + (['3 5 + 2 * 10 2 1 - * -'], [6]), + (['11 22 33 * * 7 + 2 / 100 % 1 2 - -'], [97]), + ] + + test_in = [(None, '\n'.join(s[0])+'\n') for s in in_out] + test_out = [s[1] for s in in_out] + # List of outputs: (expression result, stdout, stderr, exception). + answers = python(code=code, inputs=test_in, timeout=1.0) + outputs = [ans[1] for ans in answers] + n_correct = 0 + tin = None + for i, (output, correct) in enumerate(zip(outputs, test_out)): + if all(string_almost_equal(output, c, prec=2) for c in correct): + n_correct += 1 + else: + tin = test_in[i][1] + tout = correct 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/lists_and_for/common.py b/python/problems/lists_and_for/common.py index b490107..fe6aa94 100644 --- a/python/problems/lists_and_for/common.py +++ b/python/problems/lists_and_for/common.py @@ -1 +1,2 @@ id = 16 +number = 3 \ No newline at end of file diff --git a/python/problems/lists_and_for/contains_multiples/common.py b/python/problems/lists_and_for/contains_multiples/common.py index 8bdcc36..4712106 100644 --- a/python/problems/lists_and_for/contains_multiples/common.py +++ b/python/problems/lists_and_for/contains_multiples/common.py @@ -25,12 +25,46 @@ hint_type = { } def test(python, code): - test_in = [1] + in_out = [ + ([], False), + ([0], True), + ([42], True), + ([42 * 43], True), + ([4, 2], False), + ([42, 42], True), + ([1, 2, 3, 4, 5, 5, 4, 3, 2, 1], False), + ([1, 2, 3, 4, 5, 5, 4, 3, 2, 1, -42], True), + ([1, 2, 3, 4, 5, 42 * 3, 5, 4, 3, 2, 1], True), + ([1, 2, 42, 4, 5, 42 * 5, 5, 4, 42 * 3, 2, 1], True), + ([42, 5, 4, -7, 2, 12, -3, -4, 11, 42, 2], True) + ] + + + test_in = [t[0] for t in in_out] + test_out = [t[1] for t in in_out] + n_correct = 0 + tin = None + for xs_i, xs in enumerate(test_in): + # change code to contain new xs instead of the one + # given by user + tcode = re.sub(r'^xs\s*=\s*\[.*?\]', + 'xs = ' + str(xs), + code, + flags = re.DOTALL | re.MULTILINE) + # use python session to call tcode + answers = python(code=tcode, inputs=[(None, None)], timeout=1.0) + output = answers[0][1] + + if str(test_out[xs_i]) in output and \ + str((not test_out[xs_i])) not in output: + n_correct += 1 + else: + tin = test_in[xs_i] + tout = test_out[xs_i] 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/lists_and_for/divisors/common.py b/python/problems/lists_and_for/divisors/common.py index f9334be..89092eb 100644 --- a/python/problems/lists_and_for/divisors/common.py +++ b/python/problems/lists_and_for/divisors/common.py @@ -8,7 +8,7 @@ from server.hints import Hint id = 204 group = 'lists_and_for' number = 20 -visible = False +visible = True solution = '''\ n = int(input('Vnesi število: ')) diff --git a/python/problems/lists_and_for/divisors_sum/common.py b/python/problems/lists_and_for/divisors_sum/common.py index 651f657..c557278 100644 --- a/python/problems/lists_and_for/divisors_sum/common.py +++ b/python/problems/lists_and_for/divisors_sum/common.py @@ -8,7 +8,7 @@ from server.hints import Hint id = 216 group = 'lists_and_for' number = 21 -visible = False +visible = True solution = '''\ n = int(input('Vnesi število: ')) diff --git a/python/problems/lists_and_for/every_third/common.py b/python/problems/lists_and_for/every_third/common.py index 9c27446..6f42663 100644 --- a/python/problems/lists_and_for/every_third/common.py +++ b/python/problems/lists_and_for/every_third/common.py @@ -26,12 +26,40 @@ hint_type = { } def test(python, code): - test_in = [1] + in_out = [ + ([], []), + ([0], []), + ([0, 1], []), + ([0, 1, 2], [2]), + ([1, 2, 3, 4, 5, 5, 4, 3, 2, 1], [3, 5, 2]), + ([42, 5, 4, -7, 2, 12, -3, -4, 11, 42, 2], [4, 12, 11]), + (list(range(15)), [2, 5, 8, 11, 14]) + ] + + test_in = [t[0] for t in in_out] + test_out = [t[1] for t in in_out] + n_correct = 0 + tin = None + for xs_i, xs in enumerate(test_in): + # change code to contain new xs instead of the one + # given by user + tcode = re.sub(r'^xs\s*=\s*\[.*?\]', + 'xs = ' + str(xs), + code, + flags = re.DOTALL | re.MULTILINE) + # use python session to call tcode + answers = python(code=tcode, inputs=[(None, None)], timeout=1.0) + output = answers[0][1] + + if str(test_out[xs_i]) in output: + n_correct += 1 + else: + tin = test_in[xs_i] + tout = test_out[xs_i] 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/lists_and_for/perfect_numbers/common.py b/python/problems/lists_and_for/perfect_numbers/common.py index c1c7645..2628fab 100644 --- a/python/problems/lists_and_for/perfect_numbers/common.py +++ b/python/problems/lists_and_for/perfect_numbers/common.py @@ -8,7 +8,7 @@ from server.hints import Hint id = 217 group = 'lists_and_for' number = 22 -visible = False +visible = True solution = '''\ n = int(input('Vnesi število: ')) diff --git a/python/problems/lists_and_for/places/common.py b/python/problems/lists_and_for/places/common.py index 66db7a3..0a90771 100644 --- a/python/problems/lists_and_for/places/common.py +++ b/python/problems/lists_and_for/places/common.py @@ -25,12 +25,44 @@ hint_type = { } def test(python, code): - test_in = [1] + in_out = [ + ([], []), + ([0], []), + ([42], [0]), + ([4, 2], []), + ([42, 42], [0, 1]), + ([1, 2, 3, 4, 5, 5, 4, 3, 2, 1], []), + ([1, 2, 3, 4, 5, 5, 4, 3, 2, 1, 42], [10]), + ([1, 2, 3, 4, 5, 42, 5, 4, 3, 2, 1], [5]), + ([1, 2, 42, 4, 5, 42, 5, 4, 42, 2, 1], [2, 5, 8]), + ([42, 5, 4, -7, 2, 12, -3, -4, 11, 42, 2], [0, 9]), + ([42] * 10, [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]), + ] + + test_in = [t[0] for t in in_out] + test_out = [t[1] for t in in_out] + n_correct = 0 + tin = None + for xs_i, xs in enumerate(test_in): + # change code to contain new xs instead of the one + # given by user + tcode = re.sub(r'^xs\s*=\s*\[.*?\]', + 'xs = ' + str(xs), + code, + flags = re.DOTALL | re.MULTILINE) + + # use python session to call tcode + answers = python(code=tcode, inputs=[(None, None)], timeout=1.0) + output = answers[0][1] + + if str(test_out[xs_i]) in output: + n_correct += 1 + else: + tin = test_in[xs_i] + tout = test_out[xs_i] 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/lists_and_for/prefix/common.py b/python/problems/lists_and_for/prefix/common.py index cb8d706..1198e65 100644 --- a/python/problems/lists_and_for/prefix/common.py +++ b/python/problems/lists_and_for/prefix/common.py @@ -24,12 +24,29 @@ hint_type = { } def test(python, code): - test_in = [1] + in_out = [ + ('a', ['', 'a']), + ('ab', ['', 'a', 'ab']), + ('abc', ['', 'a', 'ab', 'abc']), + ('drevo', ['', 'd', 'dr', 'dre', 'drev', 'drevo']), + ] + + test_in = [(None, s[0]+'\n') for s in in_out] + test_out = [str(s[1]) for s in in_out] + # List of outputs: (expression result, stdout, stderr, exception). + answers = python(code=code, inputs=test_in, timeout=1.0) + outputs = [ans[1] for ans in answers] + n_correct = 0 + tin = None + for i, (output, correct) in enumerate(zip(outputs, test_out)): + if correct in output: + n_correct += 1 + else: + tin = test_in[i][1] + tout = correct 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)}}) @@ -46,3 +63,5 @@ def hint(python, code): if exc: return exc return None + + diff --git a/python/problems/lists_and_for/split_word/common.py b/python/problems/lists_and_for/split_word/common.py index 0947b09..0f5c5b9 100644 --- a/python/problems/lists_and_for/split_word/common.py +++ b/python/problems/lists_and_for/split_word/common.py @@ -16,7 +16,7 @@ s = input('Vpiši besedo: ') xs = [] for i in range(len(s) + 1): xs.append((s[:i], s[i:])) -print(x) +print(xs) ''' hint_type = { @@ -24,12 +24,30 @@ hint_type = { } def test(python, code): - test_in = [1] + in_out = [ + ('a', [('', 'a'), ('a', '')]), + ('ab', [('', 'ab'), ('a', 'b'), ('ab', '')]), + ('abc', [('', 'abc'), ('a', 'bc'), ('ab', 'c'), ('abc', '')]), + ('gozd', [('', 'gozd'), ('g', 'ozd'), ('go', 'zd'), ('goz', 'd'), ('gozd', '')]), + ] + + test_in = [(None, s[0]+'\n') for s in in_out] + test_out = [str(s[1]) for s in in_out] + # List of outputs: (expression result, stdout, stderr, exception). + answers = python(code=code, inputs=test_in, timeout=1.0) + outputs = [ans[1] for ans in answers] + n_correct = 0 + tin = None + for i, (output, correct) in enumerate(zip(outputs, test_out)): + if correct in output: + n_correct += 1 + else: + tin = test_in[i][1] + tout = correct 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/lists_and_for/substrings/common.py b/python/problems/lists_and_for/substrings/common.py index 32a3d4c..bdc356a 100644 --- a/python/problems/lists_and_for/substrings/common.py +++ b/python/problems/lists_and_for/substrings/common.py @@ -27,12 +27,30 @@ hint_type = { } def test(python, code): - test_in = [1] + in_out = [ + ('a', ['', 'a']), + ('ab', ['', 'a', 'b', 'ab']), + ('abc', ['', 'a', 'b', 'c', 'ab', 'bc', 'abc']), + ('tema', ['', 't', 'e', 'm', 'a', 'te', 'em', 'ma', 'tem', 'ema', 'tema']), + ] + + test_in = [(None, s[0]+'\n') for s in in_out] + test_out = [str(s[1]) for s in in_out] + # List of outputs: (expression result, stdout, stderr, exception). + answers = python(code=code, inputs=test_in, timeout=1.0) + outputs = [ans[1] for ans in answers] + n_correct = 0 + tin = None + for i, (output, correct) in enumerate(zip(outputs, test_out)): + if correct in output: + n_correct += 1 + else: + tin = test_in[i][1] + tout = correct 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/while_and_if/common.py b/python/problems/while_and_if/common.py index 3ca8844..c4071df 100644 --- a/python/problems/while_and_if/common.py +++ b/python/problems/while_and_if/common.py @@ -1 +1,2 @@ id = 14 +number = 2 \ No newline at end of file diff --git a/python/sl.py b/python/sl.py index af06db9..0f30a8f 100644 --- a/python/sl.py +++ b/python/sl.py @@ -57,7 +57,7 @@ pravilen rezultat: [%=testout%]

'''], 'no_func_name': ['''\ -

Funkcija z imenom [%=func_name%] ni definirana.

+

Funkcija z imenom [%=func_name%] ni definirana.

'''], 'syntax_error': ['''\ -- cgit v1.2.1 From d43958c3b5ea7f61e772c80f63b96d8fdb61110b Mon Sep 17 00:00:00 2001 From: Timotej Lazar Date: Sun, 11 Oct 2015 19:58:42 +0200 Subject: Fix ID for python/functions/body_mass_index_2 --- python/problems/functions/body_mass_index_2/common.py | 2 +- python/problems/functions/body_mass_index_2/en.py | 1 - python/problems/functions/body_mass_index_2/sl.py | 3 --- 3 files changed, 1 insertion(+), 5 deletions(-) (limited to 'python') diff --git a/python/problems/functions/body_mass_index_2/common.py b/python/problems/functions/body_mass_index_2/common.py index c94b7d1..a88ad1c 100644 --- a/python/problems/functions/body_mass_index_2/common.py +++ b/python/problems/functions/body_mass_index_2/common.py @@ -5,7 +5,7 @@ from python.util import has_token_sequence, string_almost_equal, \ string_contains_number, get_tokens, get_numbers, get_exception_desc from server.hints import Hint -id = 226 +id = 227 group = 'functions' number = 6 visible = True diff --git a/python/problems/functions/body_mass_index_2/en.py b/python/problems/functions/body_mass_index_2/en.py index 8ce2533..b34718b 100644 --- a/python/problems/functions/body_mass_index_2/en.py +++ b/python/problems/functions/body_mass_index_2/en.py @@ -1,6 +1,5 @@ # coding=utf-8 -id = 226 name = 'Body mass index 2' slug = 'Body mass index 2' diff --git a/python/problems/functions/body_mass_index_2/sl.py b/python/problems/functions/body_mass_index_2/sl.py index 21e7fa0..8cd56c7 100644 --- a/python/problems/functions/body_mass_index_2/sl.py +++ b/python/problems/functions/body_mass_index_2/sl.py @@ -2,12 +2,9 @@ import server mod = server.problems.load_language('python', 'sl') - -id = 226 name = 'Indeks telesne teže 2' slug = 'Indeks telesne teže 2' - description = '''\

Naloga je podobna prejšnji, le da imamo tokrat podatke v drugačni obliki: -- cgit v1.2.1 From 6e281624b9a0ae29f1f1862f9d581b219ba3b95a Mon Sep 17 00:00:00 2001 From: Timotej Lazar Date: Mon, 12 Oct 2015 11:46:08 +0200 Subject: Remove group attribute from problem common.py files --- python/problems/functions/assign_numbers/common.py | 1 - python/problems/functions/body_mass_index/common.py | 1 - python/problems/functions/body_mass_index_2/common.py | 1 - python/problems/functions/divisors/common.py | 1 - python/problems/functions/divisors_sum/common.py | 1 - python/problems/functions/friendly_numbers/common.py | 1 - python/problems/functions/greatest/common.py | 1 - python/problems/functions/greatest_absolutist/common.py | 1 - python/problems/functions/greatest_negative/common.py | 1 - python/problems/functions/palindrome/common.py | 1 - python/problems/functions/palindromic_numbers/common.py | 1 - python/problems/functions/perfect_numbers/common.py | 1 - python/problems/functions/prime_numbers/common.py | 1 - python/problems/functions_and_modules/all/common.py | 1 - python/problems/functions_and_modules/any/common.py | 1 - python/problems/functions_and_modules/caesar_cipher/common.py | 1 - python/problems/functions_and_modules/dominoes/common.py | 1 - python/problems/functions_and_modules/largest_sublist/common.py | 1 - python/problems/functions_and_modules/lists_sum/common.py | 1 - python/problems/functions_and_modules/longest_word/common.py | 1 - python/problems/functions_and_modules/map/common.py | 1 - python/problems/functions_and_modules/multiplicative_range/common.py | 1 - python/problems/functions_and_modules/similarity/common.py | 1 - python/problems/functions_and_modules/suspicious_words/common.py | 1 - python/problems/introduction/average/common.py | 1 - python/problems/introduction/ballistics/common.py | 1 - python/problems/introduction/fahrenheit_to_celsius/common.py | 1 - python/problems/introduction/fast_fingers/common.py | 1 - python/problems/introduction/fast_fingers_2/common.py | 1 - python/problems/introduction/pythagorean_theorem/common.py | 1 - python/problems/lists_and_for/calculator_polish/common.py | 1 - python/problems/lists_and_for/contains_42/common.py | 1 - python/problems/lists_and_for/contains_multiples/common.py | 1 - python/problems/lists_and_for/contains_string/common.py | 1 - python/problems/lists_and_for/counting/common.py | 1 - python/problems/lists_and_for/divisors/common.py | 1 - python/problems/lists_and_for/divisors_sum/common.py | 1 - python/problems/lists_and_for/every_third/common.py | 1 - python/problems/lists_and_for/perfect_numbers/common.py | 1 - python/problems/lists_and_for/places/common.py | 1 - python/problems/lists_and_for/prefix/common.py | 1 - python/problems/lists_and_for/split_word/common.py | 1 - python/problems/lists_and_for/substrings/common.py | 1 - python/problems/while_and_if/buy_five/common.py | 1 - python/problems/while_and_if/checking_account/common.py | 1 - python/problems/while_and_if/competition/common.py | 1 - python/problems/while_and_if/consumers_anonymous/common.py | 1 - python/problems/while_and_if/minimax/common.py | 1 - python/problems/while_and_if/top_shop/common.py | 1 - 49 files changed, 49 deletions(-) (limited to 'python') diff --git a/python/problems/functions/assign_numbers/common.py b/python/problems/functions/assign_numbers/common.py index c9e87bf..effd061 100644 --- a/python/problems/functions/assign_numbers/common.py +++ b/python/problems/functions/assign_numbers/common.py @@ -6,7 +6,6 @@ from python.util import has_token_sequence, string_almost_equal, \ from server.hints import Hint id = 225 -group = 'lists_and_for' number = 4 visible = True diff --git a/python/problems/functions/body_mass_index/common.py b/python/problems/functions/body_mass_index/common.py index 22defeb..8e774be 100644 --- a/python/problems/functions/body_mass_index/common.py +++ b/python/problems/functions/body_mass_index/common.py @@ -6,7 +6,6 @@ from python.util import has_token_sequence, string_almost_equal, \ from server.hints import Hint id = 226 -group = 'functions' number = 5 visible = True diff --git a/python/problems/functions/body_mass_index_2/common.py b/python/problems/functions/body_mass_index_2/common.py index a88ad1c..c6cf2b3 100644 --- a/python/problems/functions/body_mass_index_2/common.py +++ b/python/problems/functions/body_mass_index_2/common.py @@ -6,7 +6,6 @@ from python.util import has_token_sequence, string_almost_equal, \ from server.hints import Hint id = 227 -group = 'functions' number = 6 visible = True diff --git a/python/problems/functions/divisors/common.py b/python/problems/functions/divisors/common.py index 0b6ba0d..afff7c5 100644 --- a/python/problems/functions/divisors/common.py +++ b/python/problems/functions/divisors/common.py @@ -6,7 +6,6 @@ from python.util import has_token_sequence, string_almost_equal, \ from server.hints import Hint id = 230 -group = 'functions' number = 9 visible = True diff --git a/python/problems/functions/divisors_sum/common.py b/python/problems/functions/divisors_sum/common.py index 256fdc3..142a448 100644 --- a/python/problems/functions/divisors_sum/common.py +++ b/python/problems/functions/divisors_sum/common.py @@ -6,7 +6,6 @@ from python.util import has_token_sequence, string_almost_equal, \ from server.hints import Hint id = 231 -group = 'functions' number = 10 visible = True diff --git a/python/problems/functions/friendly_numbers/common.py b/python/problems/functions/friendly_numbers/common.py index 6588242..fe121dc 100644 --- a/python/problems/functions/friendly_numbers/common.py +++ b/python/problems/functions/friendly_numbers/common.py @@ -6,7 +6,6 @@ from python.util import has_token_sequence, string_almost_equal, \ from server.hints import Hint id = 233 -group = 'functions' number = 12 visible = True diff --git a/python/problems/functions/greatest/common.py b/python/problems/functions/greatest/common.py index e6b7139..726fa88 100644 --- a/python/problems/functions/greatest/common.py +++ b/python/problems/functions/greatest/common.py @@ -6,7 +6,6 @@ from python.util import has_token_sequence, string_almost_equal, \ from server.hints import Hint id = 195 -group = 'functions' number = 1 visible = True diff --git a/python/problems/functions/greatest_absolutist/common.py b/python/problems/functions/greatest_absolutist/common.py index 564d0c8..3226b87 100644 --- a/python/problems/functions/greatest_absolutist/common.py +++ b/python/problems/functions/greatest_absolutist/common.py @@ -6,7 +6,6 @@ from python.util import has_token_sequence, string_almost_equal, \ from server.hints import Hint id = 196 -group = 'functions' number = 2 visible = True diff --git a/python/problems/functions/greatest_negative/common.py b/python/problems/functions/greatest_negative/common.py index 7ab3aca..72754e2 100644 --- a/python/problems/functions/greatest_negative/common.py +++ b/python/problems/functions/greatest_negative/common.py @@ -6,7 +6,6 @@ from python.util import has_token_sequence, string_almost_equal, \ from server.hints import Hint id = 197 -group = 'functions' number = 3 visible = True diff --git a/python/problems/functions/palindrome/common.py b/python/problems/functions/palindrome/common.py index 9bd82f4..eec8211 100644 --- a/python/problems/functions/palindrome/common.py +++ b/python/problems/functions/palindrome/common.py @@ -6,7 +6,6 @@ from python.util import has_token_sequence, string_almost_equal, \ from server.hints import Hint id = 228 -group = 'functions' number = 7 visible = True diff --git a/python/problems/functions/palindromic_numbers/common.py b/python/problems/functions/palindromic_numbers/common.py index b649719..6f49896 100644 --- a/python/problems/functions/palindromic_numbers/common.py +++ b/python/problems/functions/palindromic_numbers/common.py @@ -6,7 +6,6 @@ from python.util import has_token_sequence, string_almost_equal, \ from server.hints import Hint id = 229 -group = 'functions' number = 8 visible = True diff --git a/python/problems/functions/perfect_numbers/common.py b/python/problems/functions/perfect_numbers/common.py index 64acb23..72267e6 100644 --- a/python/problems/functions/perfect_numbers/common.py +++ b/python/problems/functions/perfect_numbers/common.py @@ -6,7 +6,6 @@ from python.util import has_token_sequence, string_almost_equal, \ from server.hints import Hint id = 232 -group = 'functions' number = 11 visible = True diff --git a/python/problems/functions/prime_numbers/common.py b/python/problems/functions/prime_numbers/common.py index 6806a08..33eb134 100644 --- a/python/problems/functions/prime_numbers/common.py +++ b/python/problems/functions/prime_numbers/common.py @@ -6,7 +6,6 @@ from python.util import has_token_sequence, string_almost_equal, \ from server.hints import Hint id = 234 -group = 'functions' number = 13 visible = True diff --git a/python/problems/functions_and_modules/all/common.py b/python/problems/functions_and_modules/all/common.py index e87aa74..a02cb4b 100644 --- a/python/problems/functions_and_modules/all/common.py +++ b/python/problems/functions_and_modules/all/common.py @@ -6,7 +6,6 @@ from python.util import has_token_sequence, string_almost_equal, \ from server.hints import Hint id = 238 -group = 'functions_and_modules' number = 4 visible = True diff --git a/python/problems/functions_and_modules/any/common.py b/python/problems/functions_and_modules/any/common.py index a96ae04..9d0d0d2 100644 --- a/python/problems/functions_and_modules/any/common.py +++ b/python/problems/functions_and_modules/any/common.py @@ -6,7 +6,6 @@ from python.util import has_token_sequence, string_almost_equal, \ from server.hints import Hint id = 239 -group = 'functions_and_modules' number = 4 visible = True diff --git a/python/problems/functions_and_modules/caesar_cipher/common.py b/python/problems/functions_and_modules/caesar_cipher/common.py index 3c53369..497ce34 100644 --- a/python/problems/functions_and_modules/caesar_cipher/common.py +++ b/python/problems/functions_and_modules/caesar_cipher/common.py @@ -6,7 +6,6 @@ from python.util import has_token_sequence, string_almost_equal, \ from server.hints import Hint id = 243 -group = 'functions_and_modules' number = 9 visible = True diff --git a/python/problems/functions_and_modules/dominoes/common.py b/python/problems/functions_and_modules/dominoes/common.py index 4a0f439..9a46a78 100644 --- a/python/problems/functions_and_modules/dominoes/common.py +++ b/python/problems/functions_and_modules/dominoes/common.py @@ -6,7 +6,6 @@ from python.util import has_token_sequence, string_almost_equal, \ from server.hints import Hint id = 240 -group = 'functions_and_modules' number = 6 visible = True diff --git a/python/problems/functions_and_modules/largest_sublist/common.py b/python/problems/functions_and_modules/largest_sublist/common.py index 90e3ae4..237b817 100644 --- a/python/problems/functions_and_modules/largest_sublist/common.py +++ b/python/problems/functions_and_modules/largest_sublist/common.py @@ -6,7 +6,6 @@ from python.util import has_token_sequence, string_almost_equal, \ from server.hints import Hint id = 242 -group = 'functions_and_modules' number = 8 visible = True diff --git a/python/problems/functions_and_modules/lists_sum/common.py b/python/problems/functions_and_modules/lists_sum/common.py index d6ba72f..c62bce1 100644 --- a/python/problems/functions_and_modules/lists_sum/common.py +++ b/python/problems/functions_and_modules/lists_sum/common.py @@ -6,7 +6,6 @@ from python.util import has_token_sequence, string_almost_equal, \ from server.hints import Hint id = 241 -group = 'functions_and_modules' number = 7 visible = True diff --git a/python/problems/functions_and_modules/longest_word/common.py b/python/problems/functions_and_modules/longest_word/common.py index 3ddb269..b4fabc1 100644 --- a/python/problems/functions_and_modules/longest_word/common.py +++ b/python/problems/functions_and_modules/longest_word/common.py @@ -6,7 +6,6 @@ from python.util import has_token_sequence, string_almost_equal, \ from server.hints import Hint id = 235 -group = 'functions_and_modules' number = 1 visible = True diff --git a/python/problems/functions_and_modules/map/common.py b/python/problems/functions_and_modules/map/common.py index ace0a09..93ba8ac 100644 --- a/python/problems/functions_and_modules/map/common.py +++ b/python/problems/functions_and_modules/map/common.py @@ -6,7 +6,6 @@ from python.util import has_token_sequence, string_almost_equal, \ from server.hints import Hint id = 245 -group = 'functions_and_modules' number = 11 visible = True diff --git a/python/problems/functions_and_modules/multiplicative_range/common.py b/python/problems/functions_and_modules/multiplicative_range/common.py index 0cb2fef..9b892e6 100644 --- a/python/problems/functions_and_modules/multiplicative_range/common.py +++ b/python/problems/functions_and_modules/multiplicative_range/common.py @@ -6,7 +6,6 @@ from python.util import has_token_sequence, string_almost_equal, \ from server.hints import Hint id = 244 -group = 'functions_and_modules' number = 10 visible = True diff --git a/python/problems/functions_and_modules/similarity/common.py b/python/problems/functions_and_modules/similarity/common.py index d71137e..3a6df99 100644 --- a/python/problems/functions_and_modules/similarity/common.py +++ b/python/problems/functions_and_modules/similarity/common.py @@ -6,7 +6,6 @@ from python.util import has_token_sequence, string_almost_equal, \ from server.hints import Hint id = 236 -group = 'functions_and_modules' number = 2 visible = True diff --git a/python/problems/functions_and_modules/suspicious_words/common.py b/python/problems/functions_and_modules/suspicious_words/common.py index e6e119a..89c1a88 100644 --- a/python/problems/functions_and_modules/suspicious_words/common.py +++ b/python/problems/functions_and_modules/suspicious_words/common.py @@ -6,7 +6,6 @@ from python.util import has_token_sequence, string_almost_equal, \ from server.hints import Hint id = 237 -group = 'functions_and_modules' number = 3 visible = True diff --git a/python/problems/introduction/average/common.py b/python/problems/introduction/average/common.py index c61f7e6..28c7a7e 100644 --- a/python/problems/introduction/average/common.py +++ b/python/problems/introduction/average/common.py @@ -6,7 +6,6 @@ from server.hints import Hint id = 189 -group = 'introduction' number = 4 visible = True diff --git a/python/problems/introduction/ballistics/common.py b/python/problems/introduction/ballistics/common.py index afb84b6..8cb5c2d 100644 --- a/python/problems/introduction/ballistics/common.py +++ b/python/problems/introduction/ballistics/common.py @@ -5,7 +5,6 @@ from python.util import has_token_sequence, string_almost_equal, \ from server.hints import Hint id = 187 -group = 'introduction' number = 3 visible = True diff --git a/python/problems/introduction/fahrenheit_to_celsius/common.py b/python/problems/introduction/fahrenheit_to_celsius/common.py index 918c643..10a1067 100644 --- a/python/problems/introduction/fahrenheit_to_celsius/common.py +++ b/python/problems/introduction/fahrenheit_to_celsius/common.py @@ -6,7 +6,6 @@ from server.hints import Hint import re id = 180 -group = 'introduction' number = 1 visible = True diff --git a/python/problems/introduction/fast_fingers/common.py b/python/problems/introduction/fast_fingers/common.py index dc04dcf..754679d 100644 --- a/python/problems/introduction/fast_fingers/common.py +++ b/python/problems/introduction/fast_fingers/common.py @@ -5,7 +5,6 @@ from python.util import has_token_sequence, string_almost_equal, \ from server.hints import Hint id = 190 -group = 'introduction' number = 5 visible = True diff --git a/python/problems/introduction/fast_fingers_2/common.py b/python/problems/introduction/fast_fingers_2/common.py index af4439c..c738d45 100644 --- a/python/problems/introduction/fast_fingers_2/common.py +++ b/python/problems/introduction/fast_fingers_2/common.py @@ -5,7 +5,6 @@ from python.util import has_token_sequence, string_almost_equal, \ from server.hints import Hint id = 191 -group = 'introduction' number = 6 visible = True diff --git a/python/problems/introduction/pythagorean_theorem/common.py b/python/problems/introduction/pythagorean_theorem/common.py index ed49b1a..cebae68 100644 --- a/python/problems/introduction/pythagorean_theorem/common.py +++ b/python/problems/introduction/pythagorean_theorem/common.py @@ -5,7 +5,6 @@ from python.util import has_token_sequence, string_almost_equal, \ from server.hints import Hint id = 188 -group = 'introduction' number = 2 visible = True diff --git a/python/problems/lists_and_for/calculator_polish/common.py b/python/problems/lists_and_for/calculator_polish/common.py index 7ea25ce..cb89a50 100644 --- a/python/problems/lists_and_for/calculator_polish/common.py +++ b/python/problems/lists_and_for/calculator_polish/common.py @@ -6,7 +6,6 @@ from python.util import has_token_sequence, string_almost_equal, \ from server.hints import Hint id = 224 -group = 'lists_and_for' number = 10 visible = True diff --git a/python/problems/lists_and_for/contains_42/common.py b/python/problems/lists_and_for/contains_42/common.py index d4c4af8..fb2089e 100644 --- a/python/problems/lists_and_for/contains_42/common.py +++ b/python/problems/lists_and_for/contains_42/common.py @@ -6,7 +6,6 @@ from python.util import has_token_sequence, string_almost_equal, \ from server.hints import Hint id = 193 -group = 'lists_and_for' number = 1 visible = True diff --git a/python/problems/lists_and_for/contains_multiples/common.py b/python/problems/lists_and_for/contains_multiples/common.py index 4712106..59a5743 100644 --- a/python/problems/lists_and_for/contains_multiples/common.py +++ b/python/problems/lists_and_for/contains_multiples/common.py @@ -6,7 +6,6 @@ from python.util import has_token_sequence, string_almost_equal, \ from server.hints import Hint id = 219 -group = 'lists_and_for' number = 5 visible = True diff --git a/python/problems/lists_and_for/contains_string/common.py b/python/problems/lists_and_for/contains_string/common.py index 1f19d7f..62fef4e 100644 --- a/python/problems/lists_and_for/contains_string/common.py +++ b/python/problems/lists_and_for/contains_string/common.py @@ -6,7 +6,6 @@ from python.util import has_token_sequence, string_almost_equal, \ from server.hints import Hint id = 194 -group = 'lists_and_for' number = 2 visible = True diff --git a/python/problems/lists_and_for/counting/common.py b/python/problems/lists_and_for/counting/common.py index 2d59182..73d0071 100644 --- a/python/problems/lists_and_for/counting/common.py +++ b/python/problems/lists_and_for/counting/common.py @@ -6,7 +6,6 @@ from python.util import has_token_sequence, string_almost_equal, \ from server.hints import Hint id = 203 -group = 'lists_and_for' number = 3 visible = True diff --git a/python/problems/lists_and_for/divisors/common.py b/python/problems/lists_and_for/divisors/common.py index 89092eb..a99246b 100644 --- a/python/problems/lists_and_for/divisors/common.py +++ b/python/problems/lists_and_for/divisors/common.py @@ -6,7 +6,6 @@ from python.util import has_token_sequence, string_almost_equal, \ from server.hints import Hint id = 204 -group = 'lists_and_for' number = 20 visible = True diff --git a/python/problems/lists_and_for/divisors_sum/common.py b/python/problems/lists_and_for/divisors_sum/common.py index c557278..1d11410 100644 --- a/python/problems/lists_and_for/divisors_sum/common.py +++ b/python/problems/lists_and_for/divisors_sum/common.py @@ -6,7 +6,6 @@ from python.util import has_token_sequence, string_almost_equal, \ from server.hints import Hint id = 216 -group = 'lists_and_for' number = 21 visible = True diff --git a/python/problems/lists_and_for/every_third/common.py b/python/problems/lists_and_for/every_third/common.py index 6f42663..2d5b907 100644 --- a/python/problems/lists_and_for/every_third/common.py +++ b/python/problems/lists_and_for/every_third/common.py @@ -6,7 +6,6 @@ from python.util import has_token_sequence, string_almost_equal, \ from server.hints import Hint id = 220 -group = 'lists_and_for' number = 6 visible = True diff --git a/python/problems/lists_and_for/perfect_numbers/common.py b/python/problems/lists_and_for/perfect_numbers/common.py index 2628fab..9a48967 100644 --- a/python/problems/lists_and_for/perfect_numbers/common.py +++ b/python/problems/lists_and_for/perfect_numbers/common.py @@ -6,7 +6,6 @@ from python.util import has_token_sequence, string_almost_equal, \ from server.hints import Hint id = 217 -group = 'lists_and_for' number = 22 visible = True diff --git a/python/problems/lists_and_for/places/common.py b/python/problems/lists_and_for/places/common.py index 0a90771..e7d1adf 100644 --- a/python/problems/lists_and_for/places/common.py +++ b/python/problems/lists_and_for/places/common.py @@ -6,7 +6,6 @@ from python.util import has_token_sequence, string_almost_equal, \ from server.hints import Hint id = 218 -group = 'lists_and_for' number = 4 visible = True diff --git a/python/problems/lists_and_for/prefix/common.py b/python/problems/lists_and_for/prefix/common.py index 1198e65..cd649af 100644 --- a/python/problems/lists_and_for/prefix/common.py +++ b/python/problems/lists_and_for/prefix/common.py @@ -6,7 +6,6 @@ from python.util import has_token_sequence, string_almost_equal, \ from server.hints import Hint id = 221 -group = 'lists_and_for' number = 7 visible = True diff --git a/python/problems/lists_and_for/split_word/common.py b/python/problems/lists_and_for/split_word/common.py index 0f5c5b9..6031b19 100644 --- a/python/problems/lists_and_for/split_word/common.py +++ b/python/problems/lists_and_for/split_word/common.py @@ -6,7 +6,6 @@ from python.util import has_token_sequence, string_almost_equal, \ from server.hints import Hint id = 222 -group = 'lists_and_for' number = 8 visible = True diff --git a/python/problems/lists_and_for/substrings/common.py b/python/problems/lists_and_for/substrings/common.py index bdc356a..8128797 100644 --- a/python/problems/lists_and_for/substrings/common.py +++ b/python/problems/lists_and_for/substrings/common.py @@ -6,7 +6,6 @@ from python.util import has_token_sequence, string_almost_equal, \ from server.hints import Hint id = 223 -group = 'lists_and_for' number = 9 visible = True diff --git a/python/problems/while_and_if/buy_five/common.py b/python/problems/while_and_if/buy_five/common.py index ba44f5b..a96b2b0 100644 --- a/python/problems/while_and_if/buy_five/common.py +++ b/python/problems/while_and_if/buy_five/common.py @@ -5,7 +5,6 @@ from python.util import has_token_sequence, string_almost_equal, \ from server.hints import Hint id = 185 -group = 'while_and_if' number = 1 visible = True diff --git a/python/problems/while_and_if/checking_account/common.py b/python/problems/while_and_if/checking_account/common.py index ee1e3ee..002003f 100644 --- a/python/problems/while_and_if/checking_account/common.py +++ b/python/problems/while_and_if/checking_account/common.py @@ -5,7 +5,6 @@ from python.util import has_token_sequence, string_almost_equal, \ from server.hints import Hint id = 200 -group = 'while_and_if' number = 5 visible = True diff --git a/python/problems/while_and_if/competition/common.py b/python/problems/while_and_if/competition/common.py index fff96ed..8d2c098 100644 --- a/python/problems/while_and_if/competition/common.py +++ b/python/problems/while_and_if/competition/common.py @@ -5,7 +5,6 @@ from python.util import has_token_sequence, string_almost_equal, \ from server.hints import Hint id = 192 -group = 'while_and_if' number = 2 visible = True diff --git a/python/problems/while_and_if/consumers_anonymous/common.py b/python/problems/while_and_if/consumers_anonymous/common.py index b955f49..895d985 100644 --- a/python/problems/while_and_if/consumers_anonymous/common.py +++ b/python/problems/while_and_if/consumers_anonymous/common.py @@ -5,7 +5,6 @@ from python.util import has_token_sequence, string_almost_equal, \ from server.hints import Hint id = 201 -group = 'while_and_if' number = 6 visible = True diff --git a/python/problems/while_and_if/minimax/common.py b/python/problems/while_and_if/minimax/common.py index dcfb311..d853058 100644 --- a/python/problems/while_and_if/minimax/common.py +++ b/python/problems/while_and_if/minimax/common.py @@ -5,7 +5,6 @@ from python.util import has_token_sequence, string_almost_equal, \ from server.hints import Hint id = 199 -group = 'while_and_if' number = 4 visible = True diff --git a/python/problems/while_and_if/top_shop/common.py b/python/problems/while_and_if/top_shop/common.py index 887d43e..02855ec 100644 --- a/python/problems/while_and_if/top_shop/common.py +++ b/python/problems/while_and_if/top_shop/common.py @@ -5,7 +5,6 @@ from python.util import has_token_sequence, string_almost_equal, \ from server.hints import Hint id = 198 -group = 'while_and_if' number = 3 visible = True -- cgit v1.2.1 From fbe617ad061df25775c3e3ade00993a9090c9ef2 Mon Sep 17 00:00:00 2001 From: Martin Date: Mon, 12 Oct 2015 13:07:03 +0200 Subject: Added plan to problem "Places". --- python/problems/lists_and_for/places/sl.py | 50 ++++++++++++++++++++++++++++-- 1 file changed, 48 insertions(+), 2 deletions(-) (limited to 'python') diff --git a/python/problems/lists_and_for/places/sl.py b/python/problems/lists_and_for/places/sl.py index 716da30..d66e17d 100644 --- a/python/problems/lists_and_for/places/sl.py +++ b/python/problems/lists_and_for/places/sl.py @@ -18,11 +18,57 @@ xs = [42, 5, 4, -7, 2, 12, -3, -4, 11, 42, 2] naj vaš program izpiše [0, 9], saj se število 42 pojavi na ničtem in devetem mestu (če začnemo šteti z 0).

''' +empty_list = ['''\ +

Nov, prazen seznam ustvarimo s stavkom:

+
+s = []
+
+'''] + +enumerate_function = ['''\ +

Z uporabo funkcije enumerate boste najlažje dostopali do +indeksov seznama. +

+''', + '''\ +
+for index, val in enumerate(xs):
+    print index, v
+
''', + '''\ +

V zgornji forzanki se v spremenljivko val zapiše +trenutni element v seznamu xs, v spremenljivki indeks +pa je zapisano mesto oz. indeks trenutnega elementa.

'''] + +append_method = [ + '''\ +

V seznam dodamo nov element z metodo append.

''', + '''\ +

Poskusi:

+
+s = []
+s.append(3)
+s.append(5)
+print (s)
+
'''] + plan = ['''\ -

+

S for zanko pojdi čez seznam. Ko naletiš na 42, dodaj mesto trenutnega elementa +v nov seznam.

''', '''\ -

'''] +

+

+Ustvari prazen seznam mest
+Za vsak element v seznamu
+    Ali je 42?
+        Če je, dodaj trenutno mesto v seznam mest
+Izpiši seznam mest
+
+

''', + empty_list, + enumerate_function, + append_method] hint = { 'final_hint': ['''\ -- cgit v1.2.1 From 5a01c2bb184152c6ccc3c536e9b857d247bc55ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Mo=C5=BEina?= Date: Mon, 12 Oct 2015 14:09:22 +0200 Subject: Added plans to problems. --- .../lists_and_for/contains_multiples/sl.py | 7 ++-- python/problems/lists_and_for/every_third/sl.py | 49 +++++++++++++++++++++- python/problems/lists_and_for/places/sl.py | 5 +-- python/sl.py | 6 ++- 4 files changed, 58 insertions(+), 9 deletions(-) (limited to 'python') diff --git a/python/problems/lists_and_for/contains_multiples/sl.py b/python/problems/lists_and_for/contains_multiples/sl.py index ae4c845..7345370 100644 --- a/python/problems/lists_and_for/contains_multiples/sl.py +++ b/python/problems/lists_and_for/contains_multiples/sl.py @@ -15,11 +15,12 @@ Napiši program, ki izpiše True, če se v seznamu števil pojavi v Seznam xs definiraj na vrhu programa.

''' + + plan = ['''\ -

+

Popolnoma enaka naloga kot naloga "Vsebuje", le pri pogoju poglej, ali je število deljivo z 42.

''', - '''\ -

'''] + mod.general_msg["modulo"]] hint = { 'final_hint': ['''\ diff --git a/python/problems/lists_and_for/every_third/sl.py b/python/problems/lists_and_for/every_third/sl.py index 3bac8a3..50b4520 100644 --- a/python/problems/lists_and_for/every_third/sl.py +++ b/python/problems/lists_and_for/every_third/sl.py @@ -21,11 +21,56 @@ in (v tem primeru) izpiše

''' +empty_list = ['''\ +

Nov, prazen seznam ustvarimo s stavkom:

+
+s = []
+
+'''] + +enumerate_function = ['''\ +

Uporabi funkcijo enumerate. +

+''', + '''\ +
+for index, val in enumerate(xs):
+    print index, v
+
''', + '''\ +

V zgornji forzanki se v spremenljivko val zapiše +trenutni element v seznamu xs, v spremenljivki indeks +pa je zapisano mesto oz. indeks trenutnega elementa.

'''] + +append_method = [ + '''\ +

V seznam dodamo nov element z metodo append.

''', + '''\ +

Poskusi:

+
+s = []
+s.append(3)
+s.append(5)
+print (s)
+
'''] + plan = ['''\ -

+

S for zanko pojdi čez seznam. V novi seznam dodaj vsak tretji element.

''', '''\ -

'''] +

+

+Ustvari prazen seznam mest
+Za vsak element v seznamu
+    Ali je (mesto elementa + 1) deljivo s 3?
+        Če je, dodaj trenutno mesto v seznam mest
+Izpiši seznam mest
+
+

''', + empty_list, + enumerate_function, + mod.general_msg["modulo"], + append_method] hint = { 'final_hint': ['''\ diff --git a/python/problems/lists_and_for/places/sl.py b/python/problems/lists_and_for/places/sl.py index d66e17d..5a435a0 100644 --- a/python/problems/lists_and_for/places/sl.py +++ b/python/problems/lists_and_for/places/sl.py @@ -26,8 +26,7 @@ s = [] '''] enumerate_function = ['''\ -

Z uporabo funkcije enumerate boste najlažje dostopali do -indeksov seznama. +

Uporabi funkcijo enumerate.

''', '''\ @@ -53,7 +52,7 @@ print (s)
'''] plan = ['''\ -

S for zanko pojdi čez seznam. Ko naletiš na 42, dodaj mesto trenutnega elementa +

S for zanko pojdi čez seznam. Ko naletiš na 42, dodaj mesto trenutnega elementa v nov seznam.

''', '''\ diff --git a/python/sl.py b/python/sl.py index 0f30a8f..f9870fc 100644 --- a/python/sl.py +++ b/python/sl.py @@ -29,10 +29,14 @@ Npr., sešteti niz in število ali klicati funkcijo, čeprav tisto ni funkcija,

Poskušaš prebrati preveč vrednosti.

''', 'timed_out':'''\ -

Program se izvaja predolgo.

''' +

Program se izvaja predolgo.

''', + + 'modulo':'''\ +

Ostanek pri deljenju dobimo z operatorjem %.

''', } + hint = { 'no_hint': ['''\

Namig ne obstaja.

-- cgit v1.2.1