From 7217e23268eb28b2e6e745b74f697b4a1581658c Mon Sep 17 00:00:00 2001 From: Timotej Lazar Date: Mon, 7 Dec 2015 16:31:08 +0100 Subject: Add . after Python problem-group descriptions --- python/problems/functions/sl.py | 2 +- python/problems/functions_and_modules/sl.py | 2 +- python/problems/introduction/sl.py | 2 +- python/problems/lists_and_for/sl.py | 2 +- python/problems/while_and_if/sl.py | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/python/problems/functions/sl.py b/python/problems/functions/sl.py index e5f812d..7de0a40 100644 --- a/python/problems/functions/sl.py +++ b/python/problems/functions/sl.py @@ -1,3 +1,3 @@ name = 'Funkcije' -description = 'Pisanje in uporaba funkcij' +description = 'Pisanje in uporaba funkcij.' diff --git a/python/problems/functions_and_modules/sl.py b/python/problems/functions_and_modules/sl.py index fb4f520..e4321ec 100644 --- a/python/problems/functions_and_modules/sl.py +++ b/python/problems/functions_and_modules/sl.py @@ -1,3 +1,3 @@ name = 'Funkcije in delo z moduli' -description = 'Uporaba funkcij in delo z moduli (predvsem z nizi)' +description = 'Uporaba funkcij in delo z moduli (predvsem z nizi).' diff --git a/python/problems/introduction/sl.py b/python/problems/introduction/sl.py index 3141ece..403c941 100644 --- a/python/problems/introduction/sl.py +++ b/python/problems/introduction/sl.py @@ -1,3 +1,3 @@ name = 'Uvod' -description = 'Izrazi, spremenljivke, funkcije, prvi program' +description = 'Izrazi, spremenljivke, funkcije, prvi program.' diff --git a/python/problems/lists_and_for/sl.py b/python/problems/lists_and_for/sl.py index d9c38e9..361f1f0 100644 --- a/python/problems/lists_and_for/sl.py +++ b/python/problems/lists_and_for/sl.py @@ -1,2 +1,2 @@ name = 'Seznami in zanka for' -description = 'Seznami, terke, zanka for' \ No newline at end of file +description = 'Seznami, terke, zanka for.' diff --git a/python/problems/while_and_if/sl.py b/python/problems/while_and_if/sl.py index 3d037b8..fbb177a 100644 --- a/python/problems/while_and_if/sl.py +++ b/python/problems/while_and_if/sl.py @@ -1,2 +1,2 @@ name = 'Pogojni stavki in zanke' -description = 'Logični izrazi, pogojni stavek if-else, zanka while' +description = 'Logični izrazi, pogojni stavek if-else, zanka while.' -- cgit v1.2.1 From 3ad0fba1d3215eaf45e18cfa72dd3e7e5228a8b3 Mon Sep 17 00:00:00 2001 From: Timotej Lazar Date: Thu, 10 Dec 2015 16:01:55 +0100 Subject: Add Slovenian descriptions for the Robot course --- robot/problems/introduction/sl.py | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 robot/problems/introduction/sl.py diff --git a/robot/problems/introduction/sl.py b/robot/problems/introduction/sl.py new file mode 100644 index 0000000..24a72ca --- /dev/null +++ b/robot/problems/introduction/sl.py @@ -0,0 +1,2 @@ +name = 'Uvod' +description = 'Premikanje in zaznavanje.' -- cgit v1.2.1 From e7ebb26e1c820bbd0d97f99ea94ce1ba5e6e6738 Mon Sep 17 00:00:00 2001 From: Timotej Lazar Date: Fri, 11 Dec 2015 17:01:58 +0100 Subject: Add hints for monkey.fix --- prolog/common.py | 6 +++++- prolog/sl.py | 16 ++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/prolog/common.py b/prolog/common.py index 2dab1c3..1c83fee 100644 --- a/prolog/common.py +++ b/prolog/common.py @@ -2,7 +2,7 @@ import operator import prolog.engine -from server.hints import Hint +from server.hints import Hint, HintPopup id = 1 @@ -12,6 +12,10 @@ hint_type = { 'system_error': Hint('system_error'), 'test_results': Hint('test_results'), 'syntax_error': Hint('syntax_error'), + 'monkey_main': Hint('monkey_main'), + 'monkey_change': HintPopup('monkey_change', style='change'), + 'monkey_insert': HintPopup('monkey_insert', style='insert'), + 'monkey_remove': HintPopup('monkey_remove', style='remove'), } def hint(program, solved_problems): diff --git a/prolog/sl.py b/prolog/sl.py index 1de28ba..68fc838 100644 --- a/prolog/sl.py +++ b/prolog/sl.py @@ -25,5 +25,21 @@ hint = {
 [%=messages%]
 
+''', + + 'monkey_main': '''\ +

Uspelo mi je popraviti tvoj program. Napotki so prikazani v urejevalniku.

+''', + + 'monkey_change': '''\ +

Popravi ta del kode.

+''', + + 'monkey_insert': '''\ +

Dodaj nov del kode.

+''', + + 'monkey_remove': '''\ +

Odstrani ta del kode.

''', } -- cgit v1.2.1 From 91962ece64d200dcb93ce4a549c98bf4f94a22f7 Mon Sep 17 00:00:00 2001 From: Timotej Lazar Date: Sun, 13 Dec 2015 18:17:41 +0100 Subject: Tweak robot "no hint" message --- robot/sl.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/robot/sl.py b/robot/sl.py index 9ffcc40..daf0496 100644 --- a/robot/sl.py +++ b/robot/sl.py @@ -5,7 +5,7 @@ description = 'Uvodni tečaj za robota.' hint = { 'no_hint': ['''\ -

Namig ne obstaja! Poskusi uporabiti misli.

+

Namig ne obstaja!

'''], 'system_error': ['''\ -- cgit v1.2.1 From 4918cebf5f135993cd1d2d61bc906559e627f526 Mon Sep 17 00:00:00 2001 From: Timotej Lazar Date: Mon, 14 Dec 2015 11:39:15 +0100 Subject: Start documenting how to define new problems --- readme.md | 221 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 203 insertions(+), 18 deletions(-) diff --git a/readme.md b/readme.md index ec26acd..420120d 100644 --- a/readme.md +++ b/readme.md @@ -1,20 +1,20 @@ +Directory structure +=================== + The file hierarchy for problem data is below. Comments indicate the global variables and functions that can be defined in each file. Only the ID is -necessary. See existing problems for examples. - - -├── common.py # id, hint_type, hint() [language-specific] -├── en.py # name, description, hint [language-specific] -├── sl.py # name, description, hint [language-specific] -└── problems -    └── - ├── common.py # id, number - ├── en.py # name, description - ├── sl.py # name, description -    └── -       ├── common.py # id, number, test(), hint_type, hint() [problem-specific] -       ├── en.py # name, plan, hint [problem-specific] -       └── sl.py # name, plan, hint [problem-specific] +required. + + + ├── common.py # id, hint_type, hint() [language-specific] + ├── en.py # name, description, hint [language-specific] + └── problems +    └── + ├── common.py # id, number + ├── en.py # name, description +    └── +       ├── common.py # id, number, test(), hint_type, hint() [problem-specific] +       └── en.py # name, plan, hint [problem-specific] To add a problem, create the necessary files. Pick an unused problem ID from the relevant range below: @@ -23,6 +23,191 @@ the relevant range below: Python: 20000-29999 Robot: 30000-39999 -Running scripts/build_web_resources.py in the codeq-server repo will generate -JSON files for all problems, and insert new problems, groups and languages in -the database. +Running `scripts/build\_web\_resources.py` in the codeq-server repo +will generate JSON files for all problems, and insert new problems, groups and +languages in the database. + + +Hints +===== + +There are two distinct hint types: normal hints and popup hints. Normal hint +appears in the hints section of the application, and contains a single or +multipart message. A popup hint highlights a range of user’s code and displays +a message when the user clicks on or hovers over the highlight. The type of +each hint is defined in the appropriate `common.py` file, like this: + + # common.py + from server.hints import Hint, HintPopup + hint_type = { + 'normal_1': Hint('normal_1'), + 'normal_2': Hint('normal_2'), + 'popup': Hint('popup') + } + +Message for each hint is defined in the `hint` dictionary in the corresponding +language file (e.g. `en.py`). For the example above: + + # en.py + hint = { + 'normal_1': '

Message for hint "normal_1".

', + 'normal_2': [ + '

First part.

', + {'message': '

Second part.

', 'linkText': 'Details…'}, + '

Final part.

' + ], + 'popup': '

There is an error here.

' + } + +For a popup hint, a single string is required and will be displayed when the +user hovers over (or clicks on) the highlighted range. For a normal hint, a +single string can be specified which will be displayed in the hints section +(e.g. `normal\_1`). + +Multipart hints +--------------- + +Instead of specifying a single string for a normal hint, a list of strings can +be given; initially, only the first string will be displayed, with a “More…” +link to show the next string and so on. List elements can also be dictionaries +with `message` and `linkText` attributes - in this case, “More…” will be +replaced by the value of `linkText`. + +In the above example, on receiving the `normal\_2` hint, application will first +show + + First part. + More… + +After clicking “More…”, the message is extended: + + First part. + Second part. + Details… + +After clicking “Details…”, the message is extended again: + + First part. + Second part. + Final part. + +Template arguments +------------------ + +A template in the form `[%=arg%]` may appear in any hint string. It +will be replaced with an actual value returned by the `hint` or +`test` functions (described in the next section). This is used for +example when displaying test results, with the hint defined as + + 'test_results': '

Your code passed [%=passed%] / [%=total%] tests.

' + +The actual values for the `passed` and `total` arguments +are returned by the `test` function. + + +Problem functions +================= + +For each problem, a `test(program)` and `hint(program)` functions must be +specified in the corresponding `common.py` file. They are called with the +user’s current program when the Test or Hint button is pressed. + +The `hint(program)` function should return a list of hint objects. Each hint +object is a dictionary containing the hint ID, any arguments for the hint +message, and (for popup hints) `start` and `end` attributes indicating the +range of code to highlight. + +The `test(program)` function should return a pair of values `(correct, hints)`, +where `correct` is a Boolean value indicating whether the program is correct, +and `hints` a list of hint objects as described above. + +For example, given an incorrect program the `test` function might return + + (False, [{'id': 'test_results', 'args': {'passed': 2, 'total': 5}}]) + +saying that the program passed two out of five tests, while the `hint` function +might return + + [{'id': 'normal_1'}, + {'id': 'popup', 'start': 14, 'end': 20}] + +displaying the message for `normal\_1` hint in the hints window and +highlighting the code between characters 14 and 20. + + +Example +======= + +In this section we add a new problem “Ballistics” in the “Introduction” section +for the “Python” course. First, create the required directory structure (note +the required “problems/” path component): + + mkdir -p "python/problems/introduction/ballistics" + +Course, group and problem definitions are given in “common.py” files in the +respective directories. The “en.py” file in the same directory stores the +English versions of user messages. Additional language files can be created to +support more languages. + +Course files +------------ + +### python/common.py + +Minimum content: + + from server.hints import Hint + + id = + hint_type = { + 'no_hint': Hint('no_hint'), + 'test_results': Hint('test_results'), + } + +The id attribute stores ID of the corresponding database row and must be +different from existing courses. + +### python/en.py + + name = 'Python' + description = 'Introductory Python course' + + hint = { + 'no_hint': '

No hint available, sorry!

', + 'test_results': '

Your code passed [%=passed%] / [%=total%] tests.

', + } + +Group files +----------- + +### python/problems/introduction/common.py + +Minimum content: + + id = + number = 1 + +The number attributes are used to determine the order of groups in a course (in +this case, “Introduction” is the first problem group in the “Python” course). + +### python/problems/introduction/en.py + + name = 'Introduction' + description = 'Expressions, variables, functions, first program.' + +Problem files +------------- + + id = + number = 3 + visible = True + + solution = '''\ + from math import * + g = 9.8 + kot = float(input("Vnesi kot (v stopinjah): ")) + v = float(input("Vnesi hitrost (v m/s): ")) + kot_rad = kot * 2 * pi / 360 + razdalja = v ** 2 * sin(2 * kot_rad) / g + print("Kroglo bo odneslo", razdalja, "metrov.") + ''' -- cgit v1.2.1 From 384d3c501a38b489312496b0bf9522bdf29053d8 Mon Sep 17 00:00:00 2001 From: Aleksander Sadikov Date: Mon, 14 Dec 2015 13:57:29 +0100 Subject: Add Slovenian translations for Prolog exercises --- .../license_plates/checklicenseplate_3/sl.py | 18 ++++++++++++++++++ prolog/problems/license_plates/firstminus_2/sl.py | 14 ++++++++++++++ prolog/problems/license_plates/genexp_2/sl.py | 19 +++++++++++++++++++ prolog/problems/license_plates/getdigits_2/sl.py | 13 +++++++++++++ prolog/problems/license_plates/joindigits_2/sl.py | 16 ++++++++++++++++ prolog/problems/lists/conc_3/sl.py | 15 +++++++++++++++ prolog/problems/lists/count_3/sl.py | 13 +++++++++++++ prolog/problems/lists/del_3/sl.py | 20 ++++++++++++++++++++ prolog/problems/lists/divide_3/sl.py | 15 +++++++++++++++ prolog/problems/lists/dup_2/sl.py | 15 +++++++++++++++ prolog/problems/lists/evenlen_1_+_oddlen_1/sl.py | 18 ++++++++++++++++++ prolog/problems/lists/insert_3/sl.py | 15 +++++++++++++++ prolog/problems/lists/len_2/sl.py | 13 +++++++++++++ prolog/problems/lists/max_2/sl.py | 15 +++++++++++++++ prolog/problems/lists/memb_2/sl.py | 17 +++++++++++++++++ prolog/problems/lists/min_2/sl.py | 15 +++++++++++++++ prolog/problems/lists/palindrome_1/sl.py | 15 +++++++++++++++ prolog/problems/lists/permute_2/sl.py | 18 ++++++++++++++++++ prolog/problems/lists/rev_2/en.py | 4 ++-- prolog/problems/lists/rev_2/sl.py | 15 +++++++++++++++ prolog/problems/lists/shiftleft_2/sl.py | 13 +++++++++++++ prolog/problems/lists/shiftright_2/sl.py | 13 +++++++++++++ prolog/problems/lists/sublist_2/sl.py | 19 +++++++++++++++++++ prolog/problems/lists/sum_2/sl.py | 13 +++++++++++++ prolog/problems/sets/diff_3/sl.py | 13 +++++++++++++ prolog/problems/sets/intersect_3/sl.py | 13 +++++++++++++ prolog/problems/sets/is_subset_2/sl.py | 15 +++++++++++++++ prolog/problems/sets/is_superset_2/sl.py | 15 +++++++++++++++ prolog/problems/sets/powerset_2/sl.py | 13 +++++++++++++ prolog/problems/sets/subset_2/sl.py | 20 ++++++++++++++++++++ prolog/problems/sets/union_3/sl.py | 13 +++++++++++++ prolog/problems/sorting/is_sorted_1/sl.py | 15 +++++++++++++++ prolog/problems/sorting/isort_2/sl.py | 13 +++++++++++++ prolog/problems/sorting/pivoting_4/sl.py | 13 +++++++++++++ prolog/problems/sorting/quick_sort_2/sl.py | 13 +++++++++++++ prolog/problems/sorting/sins_3/sl.py | 15 +++++++++++++++ prolog/problems/sorting/slowest_sort_ever_2/sl.py | 13 +++++++++++++ 37 files changed, 543 insertions(+), 2 deletions(-) create mode 100644 prolog/problems/license_plates/checklicenseplate_3/sl.py create mode 100644 prolog/problems/license_plates/firstminus_2/sl.py create mode 100644 prolog/problems/license_plates/genexp_2/sl.py create mode 100644 prolog/problems/license_plates/getdigits_2/sl.py create mode 100644 prolog/problems/license_plates/joindigits_2/sl.py create mode 100644 prolog/problems/lists/conc_3/sl.py create mode 100644 prolog/problems/lists/count_3/sl.py create mode 100644 prolog/problems/lists/del_3/sl.py create mode 100644 prolog/problems/lists/divide_3/sl.py create mode 100644 prolog/problems/lists/dup_2/sl.py create mode 100644 prolog/problems/lists/evenlen_1_+_oddlen_1/sl.py create mode 100644 prolog/problems/lists/insert_3/sl.py create mode 100644 prolog/problems/lists/len_2/sl.py create mode 100644 prolog/problems/lists/max_2/sl.py create mode 100644 prolog/problems/lists/memb_2/sl.py create mode 100644 prolog/problems/lists/min_2/sl.py create mode 100644 prolog/problems/lists/palindrome_1/sl.py create mode 100644 prolog/problems/lists/permute_2/sl.py create mode 100644 prolog/problems/lists/rev_2/sl.py create mode 100644 prolog/problems/lists/shiftleft_2/sl.py create mode 100644 prolog/problems/lists/shiftright_2/sl.py create mode 100644 prolog/problems/lists/sublist_2/sl.py create mode 100644 prolog/problems/lists/sum_2/sl.py create mode 100644 prolog/problems/sets/diff_3/sl.py create mode 100644 prolog/problems/sets/intersect_3/sl.py create mode 100644 prolog/problems/sets/is_subset_2/sl.py create mode 100644 prolog/problems/sets/is_superset_2/sl.py create mode 100644 prolog/problems/sets/powerset_2/sl.py create mode 100644 prolog/problems/sets/subset_2/sl.py create mode 100644 prolog/problems/sets/union_3/sl.py create mode 100644 prolog/problems/sorting/is_sorted_1/sl.py create mode 100644 prolog/problems/sorting/isort_2/sl.py create mode 100644 prolog/problems/sorting/pivoting_4/sl.py create mode 100644 prolog/problems/sorting/quick_sort_2/sl.py create mode 100644 prolog/problems/sorting/sins_3/sl.py create mode 100644 prolog/problems/sorting/slowest_sort_ever_2/sl.py diff --git a/prolog/problems/license_plates/checklicenseplate_3/sl.py b/prolog/problems/license_plates/checklicenseplate_3/sl.py new file mode 100644 index 0000000..2e3ec65 --- /dev/null +++ b/prolog/problems/license_plates/checklicenseplate_3/sl.py @@ -0,0 +1,18 @@ +# coding=utf-8 + +name = 'checkLicensePlate/3' +slug = 'Preveri, če lahko iz številk v registrski tablici sestaviš veljavno enačbo' + +description = '''\ +

checkLicensePlate(LP, E1, E2): iz cifer v seznamu LP se da sestaviti veljavno enačbo E1 = E2. E1 in E2 sta aritmetična izraza, sestavljena iz podseznamov Plate z uporabo aritmetičnih operatorjev (+, -, * and /). Dodaten unarni minus se lahko vstavi na začetek izrazov E1 in E2.

+
+  ?- checkLicensePlate([l,j,l,3,-,2,1,7], E1, E2).
+    E1 = 3,       E2 = 21/7 ;
+    E1 = -3,      E2 = -21/7 ;
+    E1 = 3*2,     E2 = -1+7 ;
+    E1 = -3*2,    E2 = 1-7 ;
+    E1 = 3*2+1,   E2 = 7 ;
+    E1 = -3*2-1,  E2 = -7.
+
''' + +hint = {} diff --git a/prolog/problems/license_plates/firstminus_2/sl.py b/prolog/problems/license_plates/firstminus_2/sl.py new file mode 100644 index 0000000..d480994 --- /dev/null +++ b/prolog/problems/license_plates/firstminus_2/sl.py @@ -0,0 +1,14 @@ +# coding=utf-8 + +name = 'firstMinus/2' +slug = 'Negiraj prvi element v danem seznamu števil' + +description = '''\ +

firstMinus(L1, L2): seznam L2 je enak kot L1, razen prvega elementa, ki je lahko negiran ali pa ne. Predikat naj vrne obe rešitvi, eno za drugo.

+
+  ?- firstMinus([1,2,3], L).
+    L = [1,2,3] ;
+    L = [-1,2,3].
+
''' + +hint = {} diff --git a/prolog/problems/license_plates/genexp_2/sl.py b/prolog/problems/license_plates/genexp_2/sl.py new file mode 100644 index 0000000..9160f27 --- /dev/null +++ b/prolog/problems/license_plates/genexp_2/sl.py @@ -0,0 +1,19 @@ +# coding=utf-8 + +name = 'genexp/2' +slug = 'Sestavi aritmetični izraz iz številk v podanem seznamu' + +description = '''\ +

genexp(L, E): Izraz E je zgrajen iz številk v seznamu L z dodajanjem aritmetičnih operatorjev. Predikat naj vrača vse možne izraze, enega po enega.

+
+  ?- genexp([1,2,3], L).
+    L = 1+2+3 ;
+    L = 1+2-3 ;
+    L = (1+2)*3 ;
+    L = (1+2)/3 ;
+    L = 1-2+3 ;
+    L = 1-2-3 ;
+    ...
+
''' + +hint = {} diff --git a/prolog/problems/license_plates/getdigits_2/sl.py b/prolog/problems/license_plates/getdigits_2/sl.py new file mode 100644 index 0000000..3f59e90 --- /dev/null +++ b/prolog/problems/license_plates/getdigits_2/sl.py @@ -0,0 +1,13 @@ +# coding=utf-8 + +name = 'getdigits/2' +slug = 'Vrni vse številke iz podanega seznama' + +description = '''\ +

getdigits(L, DL): seznam DL vsebuje vse številke iz seznama L, vrstni red elementov se ohrani.

+
+  ?- getdigits([2,3,e,-,4,b], DL).
+    DL = [2,3,4].
+
''' + +hint = {} diff --git a/prolog/problems/license_plates/joindigits_2/sl.py b/prolog/problems/license_plates/joindigits_2/sl.py new file mode 100644 index 0000000..344d849 --- /dev/null +++ b/prolog/problems/license_plates/joindigits_2/sl.py @@ -0,0 +1,16 @@ +# coding=utf-8 + +name = 'joindigits/2' +slug = 'Združi sosednja števila v seznamu na vse možne načine' + +description = '''\ +

joindigits(L, NL): seznam NL dobimo iz seznama L tako, da poljubno združujemo sosednja števila. Predikat naj vrača vse možnosti, eno po eno.

+
+  ?- joindigits([3,2,4], NL).
+    NL = [324] ;
+    NL = [32,4] ;
+    NL = [3,24] ;
+    NL = [3,2,4].
+
''' + +hint = {} diff --git a/prolog/problems/lists/conc_3/sl.py b/prolog/problems/lists/conc_3/sl.py new file mode 100644 index 0000000..15e3163 --- /dev/null +++ b/prolog/problems/lists/conc_3/sl.py @@ -0,0 +1,15 @@ +# coding=utf-8 + +name = 'conc/3' +slug = 'Združi dva seznama (konkatenacija)' + +description = '''\ +

conc(L1, L2, L): seznam L dobiš tako, da seznamu L1 na konec dodaš elemente seznama L2.

+
+  ?- conc([1,2], [3,4], X).
+    X = [1,2,3,4].
+  ?- conc(X, [], [1,2,3]).
+    X = [1,2,3].
+
''' + +hint = {} diff --git a/prolog/problems/lists/count_3/sl.py b/prolog/problems/lists/count_3/sl.py new file mode 100644 index 0000000..15a4650 --- /dev/null +++ b/prolog/problems/lists/count_3/sl.py @@ -0,0 +1,13 @@ +# coding=utf-8 + +name = 'count/3' +slug = 'Preštej kolikokrat se element pojavi v seznamu' + +description = '''\ +

count(X, L, N): N je število kolikokrat se element X pojavi v seznamu L.

+
+  ?- count(1, [1,2,1,3,1], N).
+    N = 3.
+
''' + +hint = {} diff --git a/prolog/problems/lists/del_3/sl.py b/prolog/problems/lists/del_3/sl.py new file mode 100644 index 0000000..49ab16f --- /dev/null +++ b/prolog/problems/lists/del_3/sl.py @@ -0,0 +1,20 @@ +# coding=utf-8 + +name = 'del/3' +slug = 'Zbriši element iz seznama' + +description = '''\ +

del(X, L1, L2): seznam L2 dobimo iz seznama L1 tako da zbrišemo element X.

+
+  ?- del(1, [1,2,3], L).
+    L = [2,3].
+  ?- del(2, [1,2,3,2,5], L).
+    L = [1,3,2,5] ;
+    L = [1,2,3,5].
+  ?- del(X, [1,2,3], L).
+    X = 1, L = [2,3] ;
+    X = 2, L = [1,3] ;
+    X = 3, L = [1,2].
+
''' + +hint = {} diff --git a/prolog/problems/lists/divide_3/sl.py b/prolog/problems/lists/divide_3/sl.py new file mode 100644 index 0000000..ecf9a5a --- /dev/null +++ b/prolog/problems/lists/divide_3/sl.py @@ -0,0 +1,15 @@ +# coding=utf-8 + +name = 'divide/3' +slug = 'Razdeli dani seznam na dva podseznama (približno) enake velikosti' + +description = '''\ +

divide(L, L1, L2): seznam L1 vsebuje elemente na lihih pozicijah v seznamu L, seznam L2 pa elemente na sodih pozicijah v L.

+
+  ?- divide([a,b,c,d,e,f,g], X, Y).
+    X = [a,c,e,g], Y = [b,d,f].
+  ?- divide([a,b,c,d,e,f], X, Y).
+    X = [a,c,e], Y = [b,d,f].
+
''' + +hint = {} diff --git a/prolog/problems/lists/dup_2/sl.py b/prolog/problems/lists/dup_2/sl.py new file mode 100644 index 0000000..fc974d8 --- /dev/null +++ b/prolog/problems/lists/dup_2/sl.py @@ -0,0 +1,15 @@ +# coding=utf-8 + +name = 'dup/2' +slug = 'Podvoji vse elemente v seznamu' + +description = '''\ +

dup(L1, L2): seznam L2 dobimo iz L1 tako, da podvojimo vsak element.

+
+  ?- dup([1,2], X).
+    X = [1,1,2,2].
+  ?- dup([1,2,3], X).
+    X = [1,1,2,2,3,3].
+
''' + +hint = {} diff --git a/prolog/problems/lists/evenlen_1_+_oddlen_1/sl.py b/prolog/problems/lists/evenlen_1_+_oddlen_1/sl.py new file mode 100644 index 0000000..1959877 --- /dev/null +++ b/prolog/problems/lists/evenlen_1_+_oddlen_1/sl.py @@ -0,0 +1,18 @@ +# coding=utf-8 + +name = 'evenlen/1 + oddlen/1' +slug = 'Brez aritmetike preveri, če je seznam sode ali lihe dolžine' + +description = '''\ +

evenlen(L): seznam L ima sodo število elementov.
+oddlen(L): seznam L ima liho število elementov.

+
+  ?- oddlen([1,2,3,4,5]).
+    true.
+  ?- oddlen([1,2,3,4]).
+    false.
+  ?- evenlen([1,2,3,4]).
+    true.
+
''' + +hint = {} diff --git a/prolog/problems/lists/insert_3/sl.py b/prolog/problems/lists/insert_3/sl.py new file mode 100644 index 0000000..08ffced --- /dev/null +++ b/prolog/problems/lists/insert_3/sl.py @@ -0,0 +1,15 @@ +# coding=utf-8 + +name = 'insert/3' +slug = 'Vstavi element na poljubno mesto v seznamu' + +description = '''\ +

insert(X, L1, L2): seznam L2 dobimo iz L1 tako, da vstavimo element X na poljubno mesto. Predikat naj vrne vse možne rešitve, eno za drugo.

+
+  ?- insert(1, [2,3], L).
+    L = [1,2,3] ;
+    L = [2,1,3] ;
+    L = [2,3,1].
+
''' + +hint = {} diff --git a/prolog/problems/lists/len_2/sl.py b/prolog/problems/lists/len_2/sl.py new file mode 100644 index 0000000..5b9f05a --- /dev/null +++ b/prolog/problems/lists/len_2/sl.py @@ -0,0 +1,13 @@ +# coding=utf-8 + +name = 'len/2' +slug = 'Izračunaj dolžino danega seznama' + +description = '''\ +

len(L, Len): Len je dolžina seznama L.

+
+  ?- len([1,2,3], Len).
+    Len = 3.
+
''' + +hint = {} diff --git a/prolog/problems/lists/max_2/sl.py b/prolog/problems/lists/max_2/sl.py new file mode 100644 index 0000000..81c354b --- /dev/null +++ b/prolog/problems/lists/max_2/sl.py @@ -0,0 +1,15 @@ +# coding=utf-8 + +name = 'max/2' +slug = 'Poišči največji element v danem seznamu' + +description = '''\ +

max(L, Max): Max je največji element v seznamu L.

+
+  ?- max([5,4,1,6], M).
+    M = 6.
+  ?- max([3,2,2], M).
+    M = 3.
+
''' + +hint = {} diff --git a/prolog/problems/lists/memb_2/sl.py b/prolog/problems/lists/memb_2/sl.py new file mode 100644 index 0000000..540394b --- /dev/null +++ b/prolog/problems/lists/memb_2/sl.py @@ -0,0 +1,17 @@ +# coding=utf-8 + +name = 'memb/2' +slug = 'Preveri (poišči), če je dani element v seznamu' + +description = '''\ +

memb(E, L): E je element seznama L.

+
+  ?- memb(X, [1,2,3]).
+    X = 1 ;
+    X = 2 ;
+    X = 3.
+  ?- memb(1, [3,2,X]).
+    X = 1.
+
''' + +hint = {} diff --git a/prolog/problems/lists/min_2/sl.py b/prolog/problems/lists/min_2/sl.py new file mode 100644 index 0000000..6a5964b --- /dev/null +++ b/prolog/problems/lists/min_2/sl.py @@ -0,0 +1,15 @@ +# coding=utf-8 + +name = 'min/2' +slug = 'Poišči najmanjši element v danem seznamu' + +description = '''\ +

min(L, Min): Min je najmanjši element v seznamu L.

+
+  ?- min([5,4,1,6], M).
+    M = 1.
+  ?- min([3,2,2], M).
+    M = 2.
+
''' + +hint = {} diff --git a/prolog/problems/lists/palindrome_1/sl.py b/prolog/problems/lists/palindrome_1/sl.py new file mode 100644 index 0000000..04f1f59 --- /dev/null +++ b/prolog/problems/lists/palindrome_1/sl.py @@ -0,0 +1,15 @@ +# coding=utf-8 + +name = 'palindrome/1' +slug = 'Preveri, če elementi seznama tvorijo palindrom' + +description = '''\ +

palindrome(L): Elementi seznama L se preberejo v istem vrstnem redu z začetka in s konca seznama.

+
+  ?- palindrome([1,2,3,2,1]).
+    true.
+  ?- palindrome([1,2,3]).
+    false.
+
''' + +hint = {} diff --git a/prolog/problems/lists/permute_2/sl.py b/prolog/problems/lists/permute_2/sl.py new file mode 100644 index 0000000..2c98340 --- /dev/null +++ b/prolog/problems/lists/permute_2/sl.py @@ -0,0 +1,18 @@ +# coding=utf-8 + +name = 'permute/2' +slug = 'Generiraj permutacije elementov v seznamu' + +description = '''\ +

permute(L1, L2): seznam L2 je permutacija vrstnega reda elementov v seznamu L1.

+
+  ?- permute([1,2,3], L).
+    L = [1,2,3] ;
+    L = [1,3,2] ;
+    L = [2,1,3] ;
+    L = [2,3,1] ;
+    L = [3,1,2] ;
+    L = [3,2,1].
+
''' + +hint = {} diff --git a/prolog/problems/lists/rev_2/en.py b/prolog/problems/lists/rev_2/en.py index fe36ec5..7941f9e 100644 --- a/prolog/problems/lists/rev_2/en.py +++ b/prolog/problems/lists/rev_2/en.py @@ -6,10 +6,10 @@ slug = 'reverse a list' description = '''\

rev(L1, L2): the list L2 is obtained from L1 by reversing the order of the elements.

-  ?- rev([], X).
-    X = [].
   ?- rev([1,2,3], X).
     X = [3,2,1].
+  ?- rev([], X).
+    X = [].
 
''' hint = {} diff --git a/prolog/problems/lists/rev_2/sl.py b/prolog/problems/lists/rev_2/sl.py new file mode 100644 index 0000000..95ba8b7 --- /dev/null +++ b/prolog/problems/lists/rev_2/sl.py @@ -0,0 +1,15 @@ +# coding=utf-8 + +name = 'rev/2' +slug = 'Obrni seznam' + +description = '''\ +

rev(L1, L2): seznam L2 ima elemente v obratnem vrstnem redu kot seznam L1.

+
+  ?- rev([1,2,3], X).
+    X = [3,2,1].
+  ?- rev([], X).
+    X = [].
+
''' + +hint = {} diff --git a/prolog/problems/lists/shiftleft_2/sl.py b/prolog/problems/lists/shiftleft_2/sl.py new file mode 100644 index 0000000..44e726f --- /dev/null +++ b/prolog/problems/lists/shiftleft_2/sl.py @@ -0,0 +1,13 @@ +# coding=utf-8 + +name = 'shiftleft/2' +slug = 'Premakni elemente seznama za eno mesto v levo' + +description = '''\ +

shiftleft(L1, L2): elemente v seznamu L1 za eno mesto premaknemo v levo ("circular shift").

+
+  ?- shiftleft([1,2,3,4,5], X).
+    X = [2,3,4,5,1].
+
''' + +hint = {} diff --git a/prolog/problems/lists/shiftright_2/sl.py b/prolog/problems/lists/shiftright_2/sl.py new file mode 100644 index 0000000..9d84510 --- /dev/null +++ b/prolog/problems/lists/shiftright_2/sl.py @@ -0,0 +1,13 @@ +# coding=utf-8 + +name = 'shiftright/2' +slug = 'Premakni elemente seznama za eno mesto v desno' + +description = '''\ +

shiftright(L1, L2): elemente v seznamu L1 za eno mesto premaknemo v desno ("circular shift").

+
+  ?- shiftright([1,2,3,4,5], X).
+    X = [5,1,2,3,4].
+
''' + +hint = {} diff --git a/prolog/problems/lists/sublist_2/sl.py b/prolog/problems/lists/sublist_2/sl.py new file mode 100644 index 0000000..27d9b54 --- /dev/null +++ b/prolog/problems/lists/sublist_2/sl.py @@ -0,0 +1,19 @@ +# coding=utf-8 + +name = 'sublist/2' +slug = 'Generiraj vse podsezname danega seznama' + +description = '''\ +

sublist(L, SL): SL je podseznam seznama L. Predikat naj vrne vse možne podsezname, enega po enega.

+
+  ?- sublist([1,2,3], X).
+    X = [] ;
+    X = [1] ;
+    X = [1,2] ;
+    X = [1,2,3] ;
+    X = [2] ;
+    X = [2,3] ;
+    X = [3].
+
''' + +hint = {} diff --git a/prolog/problems/lists/sum_2/sl.py b/prolog/problems/lists/sum_2/sl.py new file mode 100644 index 0000000..0e1e6d6 --- /dev/null +++ b/prolog/problems/lists/sum_2/sl.py @@ -0,0 +1,13 @@ +# coding=utf-8 + +name = 'sum/2' +slug = 'Izračunaj vsoto elementov v seznamu' + +description = '''\ +

sum(L, Sum): Sum je vsota vseh elementov v seznamu L.

+
+  ?- sum([1,2,3], Sum).
+    Sum = 6.
+
''' + +hint = {} diff --git a/prolog/problems/sets/diff_3/sl.py b/prolog/problems/sets/diff_3/sl.py new file mode 100644 index 0000000..d9b89e7 --- /dev/null +++ b/prolog/problems/sets/diff_3/sl.py @@ -0,0 +1,13 @@ +# coding=utf-8 + +name = 'diff/3' +slug = 'Poišči razliko dveh množic' + +description = '''\ +

diff(S1, S2, D): seznam D vsebuje elemente iz S1, ki niso v S2.

+
+  ?- diff([2,3,5,1,7,9], [3,7,4,5,6], D).
+    D = [2,1,9].
+
''' + +hint = {} diff --git a/prolog/problems/sets/intersect_3/sl.py b/prolog/problems/sets/intersect_3/sl.py new file mode 100644 index 0000000..a6af2d5 --- /dev/null +++ b/prolog/problems/sets/intersect_3/sl.py @@ -0,0 +1,13 @@ +# coding=utf-8 + +name = 'intersect/3' +slug = 'Poišči presek dveh množic' + +description = '''\ +

intersect(S1, S2, I): seznam I vsebuje presek elementov v S1 in S2.

+
+  ?- intersect([1,5,6,3,4,2], [8,1,5,9,4,3], I).
+    I = [1,5,3,4].
+
''' + +hint = {} diff --git a/prolog/problems/sets/is_subset_2/sl.py b/prolog/problems/sets/is_subset_2/sl.py new file mode 100644 index 0000000..ccec5b0 --- /dev/null +++ b/prolog/problems/sets/is_subset_2/sl.py @@ -0,0 +1,15 @@ +# coding=utf-8 + +name = 'is_subset/2' +slug = 'Preveri, če je prva množica podmnožica od druge' + +description = '''\ +

is_subset(S1, S2): množica S1 je podmnožica od S2.

+
+  ?- is_subset([2,1,3,5,0], [3,2,1,4,5,9]).
+    false.
+  ?- is_subset([2,1,3,5], [3,2,1,4,5,9]).
+    true.
+
''' + +hint = {} diff --git a/prolog/problems/sets/is_superset_2/sl.py b/prolog/problems/sets/is_superset_2/sl.py new file mode 100644 index 0000000..77d0d9d --- /dev/null +++ b/prolog/problems/sets/is_superset_2/sl.py @@ -0,0 +1,15 @@ +# coding=utf-8 + +name = 'is_superset/2' +slug = 'Preveri, če je prva množica nadmnožica od druge' + +description = '''\ +

is_superset(S1, S2): množica S1 je nadmnožica (vsebuje vse elemente) od S2.

+
+  ?- is_superset([3,2,1,4,5,9], [2,1,3,5]).
+    true.
+  ?- is_superset([3,2,1,4,5,9], [2,1,3,5,0]).
+    false.
+
''' + +hint = {} diff --git a/prolog/problems/sets/powerset_2/sl.py b/prolog/problems/sets/powerset_2/sl.py new file mode 100644 index 0000000..a782dee --- /dev/null +++ b/prolog/problems/sets/powerset_2/sl.py @@ -0,0 +1,13 @@ +# coding=utf-8 + +name = 'powerset/2' +slug = 'Poišči potenčno množico od dane množice' + +description = '''\ +

powerset(Set, Powerset): množica Powerset vsebuje vse podmnožice od množice Set.

+
+  ?- powerset([1,2,3], L).
+    L = [[1,2,3],[1,2],[1,3],[1],[2,3],[2],[3],[]].
+
''' + +hint = {} diff --git a/prolog/problems/sets/subset_2/sl.py b/prolog/problems/sets/subset_2/sl.py new file mode 100644 index 0000000..eae4fcf --- /dev/null +++ b/prolog/problems/sets/subset_2/sl.py @@ -0,0 +1,20 @@ +# coding=utf-8 + +name = 'subset/2' +slug = 'Generiraj vse podmnožice dane množice' + +description = '''\ +

subset(Set, Subset): množica Subset je podmnožica od Set. Ta predikat naj, eno po eno, generira vse veljavne podmnožice.

+
+  ?- subset([1,2,3], SS).
+    SS = [1,2,3] ;
+    SS = [1,2] ;
+    SS = [1,3] ;
+    SS = [1] ;
+    SS = [2,3] ;
+    SS = [2] ;
+    SS = [3] ;
+    SS = [].
+
''' + +hint = {} diff --git a/prolog/problems/sets/union_3/sl.py b/prolog/problems/sets/union_3/sl.py new file mode 100644 index 0000000..27d3088 --- /dev/null +++ b/prolog/problems/sets/union_3/sl.py @@ -0,0 +1,13 @@ +# coding=utf-8 + +name = 'union/3' +slug = 'Poišči unijo dveh množic' + +description = '''\ +

union(S1, S2, U): seznam U predstavlja unijo elementov v seznamih S1 in S2, duplikatov (kot se za množice spodobi) ni.

+
+  ?- union([1,5,2,3], [3,4,8,2], U).
+    U = [1,5,3,4,8,2].
+
''' + +hint = {} diff --git a/prolog/problems/sorting/is_sorted_1/sl.py b/prolog/problems/sorting/is_sorted_1/sl.py new file mode 100644 index 0000000..5d4c1c5 --- /dev/null +++ b/prolog/problems/sorting/is_sorted_1/sl.py @@ -0,0 +1,15 @@ +# coding=utf-8 + +name = 'is_sorted/1' +slug = 'Preveri, če so elementi seznama naraščajoče urejeni' + +description = '''\ +

is_sorted(L): elementi v seznamu L morajo biti urejeni v naraščajočem vrstnem redu.

+
+  ?- is_sorted([2,3,6,8,12]).
+    true.
+  ?- is_sorted([2,3,1,6,5]).
+    false.
+
''' + +hint = {} diff --git a/prolog/problems/sorting/isort_2/sl.py b/prolog/problems/sorting/isort_2/sl.py new file mode 100644 index 0000000..79c3239 --- /dev/null +++ b/prolog/problems/sorting/isort_2/sl.py @@ -0,0 +1,13 @@ +# coding=utf-8 + +name = 'isort/2' +slug = 'Uredi seznam z uporabo urejanja z vstavljanjem' + +description = '''\ +

isort(L, SL): seznam SL vsebuje elemente iz seznama L urejene v naraščajočem vrstnem redu. Uporabi predikat sins/3 za implementacijo urejanja z vstavljanjem.

+
+  ?- isort([2,3,1,5,4], L).
+    L = [1,2,3,4,5].
+
''' + +hint = {} diff --git a/prolog/problems/sorting/pivoting_4/sl.py b/prolog/problems/sorting/pivoting_4/sl.py new file mode 100644 index 0000000..b18e112 --- /dev/null +++ b/prolog/problems/sorting/pivoting_4/sl.py @@ -0,0 +1,13 @@ +# coding=utf-8 + +name = 'pivoting/4' +slug = 'Razdeli seznam na dva dela glede na podani element (pivot)' + +description = '''\ +

pivoting(P, L, S, G): seznam S vsebuje elemente iz L manjše ali enake P, seznam G pa elemente iz L večje od P. Vrstni red elementov v S in G naj bo enak kot v L.

+
+  ?- pivoting(4, [1,4,5,8,6,4,2], S, G).
+    S = [1,4,4,2], G = [5,8,6].
+
''' + +hint = {} diff --git a/prolog/problems/sorting/quick_sort_2/sl.py b/prolog/problems/sorting/quick_sort_2/sl.py new file mode 100644 index 0000000..9611b46 --- /dev/null +++ b/prolog/problems/sorting/quick_sort_2/sl.py @@ -0,0 +1,13 @@ +# coding=utf-8 + +name = 'quick_sort/2' +slug = 'Uredi seznam z algoritmom quicksort' + +description = '''\ +

quick_sort(L, SL): seznam SL vsebuje elemente iz L urejene v naraščajočem vrstnem redu. Uporabi predikat pivoting/4 za implementacijo algoritma quicksort.

+
+  ?- quick_sort([2,3,1,5,4], L).
+    L = [1,2,3,4,5].
+
''' + +hint = {} diff --git a/prolog/problems/sorting/sins_3/sl.py b/prolog/problems/sorting/sins_3/sl.py new file mode 100644 index 0000000..22e51b2 --- /dev/null +++ b/prolog/problems/sorting/sins_3/sl.py @@ -0,0 +1,15 @@ +# coding=utf-8 + +name = 'sins/3' +slug = 'Vstavi element na ustrezno mesto v urejen seznam' + +description = '''\ +

sins(X, SortedList, NewList): seznam NewList dobiš tako, da vstaviš element X v SortedList na ustrezno mesto tako, da ohraniš urejenost elementov.

+
+  ?- sins(4, [1,2,3,5], L).
+    L = [1,2,3,4,5].
+  ?- sins(3, [1,2,3,4], L).
+    L = [1,2,3,3,4].
+
''' + +hint = {} diff --git a/prolog/problems/sorting/slowest_sort_ever_2/sl.py b/prolog/problems/sorting/slowest_sort_ever_2/sl.py new file mode 100644 index 0000000..c62582c --- /dev/null +++ b/prolog/problems/sorting/slowest_sort_ever_2/sl.py @@ -0,0 +1,13 @@ +# coding=utf-8 + +name = 'slowest_sort_ever/2' +slug = 'Uredi seznam elementov s pomočjo naključnih permutacij' + +description = '''\ +

slowest_sort_ever(L, SL): seznam SL vsebuje elemente seznama L v naraščajočem vrstnem redu. Časovna zahtevnost algoritma naj bo O(n * n!).

+
+  ?- slowest_sort_ever([2,3,1,5,4], L).
+    L = [1,2,3,4,5].
+
''' + +hint = {} -- cgit v1.2.1 From 79f4196a6b86c6090ab0fb915d05bebc3a627783 Mon Sep 17 00:00:00 2001 From: Aleksander Sadikov Date: Mon, 14 Dec 2015 15:24:48 +0100 Subject: Add tests for Prolog.{sorting,sets,license_plates} --- .../license_plates/checklicenseplate_3/common.py | 44 ++++++++++++++++++ .../problems/license_plates/firstminus_2/common.py | 36 +++++++++++++++ prolog/problems/license_plates/genexp_2/common.py | 45 ++++++++++++++++++ .../problems/license_plates/getdigits_2/common.py | 38 +++++++++++++++ .../problems/license_plates/joindigits_2/common.py | 37 +++++++++++++++ prolog/problems/sets/diff_3/common.py | 44 ++++++++++++++++++ prolog/problems/sets/intersect_3/common.py | 44 ++++++++++++++++++ prolog/problems/sets/is_subset_2/common.py | 40 ++++++++++++++++ prolog/problems/sets/is_superset_2/common.py | 40 ++++++++++++++++ prolog/problems/sets/powerset_2/common.py | 38 +++++++++++++++ prolog/problems/sets/subset_2/common.py | 54 ++++++++++++++++++++++ prolog/problems/sets/union_3/common.py | 4 +- prolog/problems/sorting/is_sorted_1/common.py | 46 ++++++++++++++++++ prolog/problems/sorting/isort_2/common.py | 40 ++++++++++++++++ prolog/problems/sorting/pivoting_4/common.py | 40 ++++++++++++++++ prolog/problems/sorting/quick_sort_2/common.py | 40 ++++++++++++++++ prolog/problems/sorting/sins_3/common.py | 42 +++++++++++++++++ .../problems/sorting/slowest_sort_ever_2/common.py | 40 ++++++++++++++++ 18 files changed, 709 insertions(+), 3 deletions(-) diff --git a/prolog/problems/license_plates/checklicenseplate_3/common.py b/prolog/problems/license_plates/checklicenseplate_3/common.py index c37e210..0480258 100644 --- a/prolog/problems/license_plates/checklicenseplate_3/common.py +++ b/prolog/problems/license_plates/checklicenseplate_3/common.py @@ -1,5 +1,9 @@ # coding=utf-8 +from operator import itemgetter +import prolog.engine +import server.problems + id = 148 number = 55 visible = True @@ -51,3 +55,43 @@ checkLicensePlate(LP, E1, E2) :- genexp148(MN2, E2), E1 =:= E2. ''' + +test_cases = [ + ('''checkLicensePlate([l, j, l, 3, '-', 2, 4, 2], E1, E2)''', + [{'E1': '-3', 'E2': '(-2-4)/2'}, {'E1': '3', 'E2': '(2+4)/2'}, + {'E1': '-3*2', 'E2': '-4-2'}, {'E1': '3*2', 'E2': '4+2'}, + {'E1': '-3*2+4', 'E2': '-2'}, {'E1': '3*2-4', 'E2': '2'}]), + ('''checkLicensePlate([k, r, a, 3, '-', 2, 1, 7], E1, E2)''', + [{'E1': '-3', 'E2': '-21/7'}, {'E1': '3', 'E2': '21/7'}, + {'E1': '-3*2', 'E2': '1-7'}, {'E1': '3*2', 'E2': '-1+7'}, + {'E1': '3*2+1', 'E2': '7'}, {'E1': '-3*2-1', 'E2': '-7'}]), + ('''checkLicensePlate([g, o, c, 8, '-', 2, 1, 3], E1, E2)''', + [{'E1': '-8', 'E2': '-2*(1+3)'}, {'E1': '8', 'E2': '2*(1+3)'}, + {'E1': '-8/2+1', 'E2': '-3'}, {'E1': '8/2-1', 'E2': '3'}, + {'E1': '-8/2', 'E2': '-1-3'}, {'E1': '8/2', 'E2': '1+3'}]), +] + +def test(program, solved_problems): + code = (program + '\n' + + server.problems.solutions_for_problems('prolog', solved_problems)) + + n_correct = 0 + engine_id = None + try: + engine_id, output = prolog.engine.create(code=code, timeout=1.0) + if engine_id is not None and 'error' not in map(itemgetter(0), output): + # Engine successfully created, and no syntax error in program. + for query, answers in test_cases: + if prolog.engine.check_answers(engine_id, query=query, answers=answers, timeout=1.0): + n_correct += 1 + finally: + if engine_id: + prolog.engine.destroy(engine_id) + + passed = n_correct == len(test_cases) + hints = [{'id': 'test_results', 'args': {'passed': n_correct, 'total': len(test_cases)}}] + return passed, hints + +def hint(program, solved_problems): + # TODO + return [] diff --git a/prolog/problems/license_plates/firstminus_2/common.py b/prolog/problems/license_plates/firstminus_2/common.py index 20376d2..89fe3b0 100644 --- a/prolog/problems/license_plates/firstminus_2/common.py +++ b/prolog/problems/license_plates/firstminus_2/common.py @@ -1,5 +1,9 @@ # coding=utf-8 +from operator import itemgetter +import prolog.engine +import server.problems + id = 147 number = 54 visible = True @@ -10,3 +14,35 @@ firstMinus(L, L). firstMinus([X|T], [Y|T]) :- Y is -X. ''' + +test_cases = [ + ('firstMinus([2, 3, 4], X)', + [{'X': '[2, 3, 4]'}, {'X': '[-2, 3, 4]'}]), + ('firstMinus([5, 2, 3, 4], X)', + [{'X': '[5, 2, 3, 4]'}, {'X': '[-5, 2, 3, 4]'}]), +] + +def test(program, solved_problems): + code = (program + '\n' + + server.problems.solutions_for_problems('prolog', solved_problems)) + + n_correct = 0 + engine_id = None + try: + engine_id, output = prolog.engine.create(code=code, timeout=1.0) + if engine_id is not None and 'error' not in map(itemgetter(0), output): + # Engine successfully created, and no syntax error in program. + for query, answers in test_cases: + if prolog.engine.check_answers(engine_id, query=query, answers=answers, timeout=1.0): + n_correct += 1 + finally: + if engine_id: + prolog.engine.destroy(engine_id) + + passed = n_correct == len(test_cases) + hints = [{'id': 'test_results', 'args': {'passed': n_correct, 'total': len(test_cases)}}] + return passed, hints + +def hint(program, solved_problems): + # TODO + return [] diff --git a/prolog/problems/license_plates/genexp_2/common.py b/prolog/problems/license_plates/genexp_2/common.py index ecdc772..4b097f2 100644 --- a/prolog/problems/license_plates/genexp_2/common.py +++ b/prolog/problems/license_plates/genexp_2/common.py @@ -1,5 +1,9 @@ # coding=utf-8 +from operator import itemgetter +import prolog.engine +import server.problems + id = 146 number = 53 visible = True @@ -22,3 +26,44 @@ genexp(L, Exp) :- conc146(Before, [NExp|After], L1), genexp(L1, Exp). ''' + +test_cases = [ + ('genexp([1], X)', + [{'X': '1'}]), + ('genexp([1, 2], X)', + [{'X': '1*2'}, {'X': '1+2'}, {'X': '1-2'}, {'X': '1/2'}]), + ('genexp([1, 2, 3], X)', + [{'X': '1+2+3'}, {'X': '1+2-3'}, {'X': '(1+2)*3'}, {'X': '(1+2)/3'}, + {'X': '1-2+3'}, {'X': '1-2-3'}, {'X': '(1-2)*3'}, {'X': '(1-2)/3'}, + {'X': '1*2+3'}, {'X': '1*2-3'}, {'X': '1*2*3'}, {'X': '1*2/3'}, + {'X': '1/2+3'}, {'X': '1/2-3'}, {'X': '1/2*3'}, {'X': '1/2/3'}, + {'X': '1+(2+3)'}, {'X': '1-(2+3)'}, {'X': '1*(2+3)'}, {'X': '1/(2+3)'}, + {'X': '1+(2-3)'}, {'X': '1-(2-3)'}, {'X': '1*(2-3)'}, {'X': '1/(2-3)'}, + {'X': '1+2*3'}, {'X': '1-2*3'}, {'X': '1*(2*3)'}, {'X': '1/(2*3)'}, + {'X': '1+2/3'}, {'X': '1-2/3'}, {'X': '1*(2/3)'}, {'X': '1/(2/3)'}]), +] + +def test(program, solved_problems): + code = (program + '\n' + + server.problems.solutions_for_problems('prolog', solved_problems)) + + n_correct = 0 + engine_id = None + try: + engine_id, output = prolog.engine.create(code=code, timeout=1.0) + if engine_id is not None and 'error' not in map(itemgetter(0), output): + # Engine successfully created, and no syntax error in program. + for query, answers in test_cases: + if prolog.engine.check_answers(engine_id, query=query, answers=answers, timeout=1.0): + n_correct += 1 + finally: + if engine_id: + prolog.engine.destroy(engine_id) + + passed = n_correct == len(test_cases) + hints = [{'id': 'test_results', 'args': {'passed': n_correct, 'total': len(test_cases)}}] + return passed, hints + +def hint(program, solved_problems): + # TODO + return [] diff --git a/prolog/problems/license_plates/getdigits_2/common.py b/prolog/problems/license_plates/getdigits_2/common.py index 82fe033..4ae42ff 100644 --- a/prolog/problems/license_plates/getdigits_2/common.py +++ b/prolog/problems/license_plates/getdigits_2/common.py @@ -1,5 +1,9 @@ # coding=utf-8 +from operator import itemgetter +import prolog.engine +import server.problems + id = 144 number = 51 visible = True @@ -13,3 +17,37 @@ getdigits([X|T], [X|NT]) :- getdigits([_|T], NT) :- getdigits(T, NT). ''' + +test_cases = [ + ('getdigits([], X)', + [{'X': '[]'}]), + ('''getdigits([1, [], 2, a, b, -3, '+', 4], X)''', + [{'X': '[1, 2, -3, 4]'}]), + ('''getdigits([l, j, k, 3, '-', 2, 4, 2], X)''', + [{'X': '[3, 2, 4, 2]'}]), +] + +def test(program, solved_problems): + code = (program + '\n' + + server.problems.solutions_for_problems('prolog', solved_problems)) + + n_correct = 0 + engine_id = None + try: + engine_id, output = prolog.engine.create(code=code, timeout=1.0) + if engine_id is not None and 'error' not in map(itemgetter(0), output): + # Engine successfully created, and no syntax error in program. + for query, answers in test_cases: + if prolog.engine.check_answers(engine_id, query=query, answers=answers, timeout=1.0): + n_correct += 1 + finally: + if engine_id: + prolog.engine.destroy(engine_id) + + passed = n_correct == len(test_cases) + hints = [{'id': 'test_results', 'args': {'passed': n_correct, 'total': len(test_cases)}}] + return passed, hints + +def hint(program, solved_problems): + # TODO + return [] diff --git a/prolog/problems/license_plates/joindigits_2/common.py b/prolog/problems/license_plates/joindigits_2/common.py index 9ebc037..189f221 100644 --- a/prolog/problems/license_plates/joindigits_2/common.py +++ b/prolog/problems/license_plates/joindigits_2/common.py @@ -1,5 +1,9 @@ # coding=utf-8 +from operator import itemgetter +import prolog.engine +import server.problems + id = 145 number = 52 visible = True @@ -13,3 +17,36 @@ joindigits([X,Y|T], NT) :- joindigits([X,Y|T], [X|NT]) :- joindigits([Y|T], NT). ''' + +test_cases = [ + ('joindigits([2, 3, 1, 4], X)', + [{'X': '[2, 3, 1, 4]'}, {'X': '[2, 3, 14]'}, {'X': '[2, 31, 4]'}, {'X': '[2, 314]'}, + {'X': '[23, 1, 4]'}, {'X': '[23, 14]'}, {'X': '[231, 4]'}, {'X': '[2314]'}]), + ('joindigits([2, 3, 1], X)', + [{'X': '[2, 3, 1]'}, {'X': '[2, 31]'}, {'X': '[23, 1]'}, {'X': '[231]'}]), +] + +def test(program, solved_problems): + code = (program + '\n' + + server.problems.solutions_for_problems('prolog', solved_problems)) + + n_correct = 0 + engine_id = None + try: + engine_id, output = prolog.engine.create(code=code, timeout=1.0) + if engine_id is not None and 'error' not in map(itemgetter(0), output): + # Engine successfully created, and no syntax error in program. + for query, answers in test_cases: + if prolog.engine.check_answers(engine_id, query=query, answers=answers, timeout=1.0): + n_correct += 1 + finally: + if engine_id: + prolog.engine.destroy(engine_id) + + passed = n_correct == len(test_cases) + hints = [{'id': 'test_results', 'args': {'passed': n_correct, 'total': len(test_cases)}}] + return passed, hints + +def hint(program, solved_problems): + # TODO + return [] diff --git a/prolog/problems/sets/diff_3/common.py b/prolog/problems/sets/diff_3/common.py index fee93b2..e2706cb 100644 --- a/prolog/problems/sets/diff_3/common.py +++ b/prolog/problems/sets/diff_3/common.py @@ -1,5 +1,9 @@ # coding=utf-8 +from operator import itemgetter +import prolog.engine +import server.problems + id = 130 number = 37 visible = True @@ -18,3 +22,43 @@ diff([H|T], S2, D) :- memb130(H, S2), diff(T, S2, D). ''' + +test_cases = [ + ('diff([], [t, e, q], X)', + [{'X': '[]'}]), + ('diff([q, r, t], [], A), msort(A, X)', + [{'X': '[q, r, t]'}]), + ('diff([1, 2, 3, 8, 4, 6], [6, 0, 3, 4], A), msort(A, X)', + [{'X': '[1, 2, 8]'}]), + ('diff([1, 2, 3, 8, 7, 4, 6], [7, 8, 6], A), msort(A, X)', + [{'X': '[1, 2, 3, 4]'}]), + ('diff([1, 8, 2, 3, 7, 5], [7], A), msort(A, X)', + [{'X': '[1, 2, 3, 5, 8]'}]), + ('diff([t, w, q], [t, e, q, w, b], X)', + [{'X': '[]'}]), +] + +def test(program, solved_problems): + code = (program + '\n' + + server.problems.solutions_for_problems('prolog', solved_problems)) + + n_correct = 0 + engine_id = None + try: + engine_id, output = prolog.engine.create(code=code, timeout=1.0) + if engine_id is not None and 'error' not in map(itemgetter(0), output): + # Engine successfully created, and no syntax error in program. + for query, answers in test_cases: + if prolog.engine.check_answers(engine_id, query=query, answers=answers, timeout=1.0): + n_correct += 1 + finally: + if engine_id: + prolog.engine.destroy(engine_id) + + passed = n_correct == len(test_cases) + hints = [{'id': 'test_results', 'args': {'passed': n_correct, 'total': len(test_cases)}}] + return passed, hints + +def hint(program, solved_problems): + # TODO + return [] diff --git a/prolog/problems/sets/intersect_3/common.py b/prolog/problems/sets/intersect_3/common.py index 501cdf3..ba90db7 100644 --- a/prolog/problems/sets/intersect_3/common.py +++ b/prolog/problems/sets/intersect_3/common.py @@ -1,5 +1,9 @@ # coding=utf-8 +from operator import itemgetter +import prolog.engine +import server.problems + id = 129 number = 36 visible = True @@ -17,3 +21,43 @@ intersect([H|T], S2, [H|I]) :- intersect([_|T], S2, I):- intersect(T, S2, I). ''' + +test_cases = [ + ('intersect([], [a, b, d], X)', + [{'X': '[]'}]), + ('intersect([g, h, r], [], X)', + [{'X': '[]'}]), + ('intersect([2, 5, 4, 7, 1, 9, 8], [0, 2, 5, 6, 7, 9, 1], A), msort(A, X)', + [{'X': '[1, 2, 5, 7, 9]'}]), + ('intersect([4, 7, 1, 9, 8], [4, 2, 5, 6, 7, 9, 1], A), msort(A, X)', + [{'X': '[1, 4, 7, 9]'}]), + ('intersect([9, 3, 4, 2, 1, 7], [a, b, d], X)', + [{'X': '[]'}]), + ('intersect([9, 3, 4, 2, 1, 7], [4, 2, 5, 6, 7, 9, 1], A), msort(A, X)', + [{'X': '[1, 2, 4, 7, 9]'}]), +] + +def test(program, solved_problems): + code = (program + '\n' + + server.problems.solutions_for_problems('prolog', solved_problems)) + + n_correct = 0 + engine_id = None + try: + engine_id, output = prolog.engine.create(code=code, timeout=1.0) + if engine_id is not None and 'error' not in map(itemgetter(0), output): + # Engine successfully created, and no syntax error in program. + for query, answers in test_cases: + if prolog.engine.check_answers(engine_id, query=query, answers=answers, timeout=1.0): + n_correct += 1 + finally: + if engine_id: + prolog.engine.destroy(engine_id) + + passed = n_correct == len(test_cases) + hints = [{'id': 'test_results', 'args': {'passed': n_correct, 'total': len(test_cases)}}] + return passed, hints + +def hint(program, solved_problems): + # TODO + return [] diff --git a/prolog/problems/sets/is_subset_2/common.py b/prolog/problems/sets/is_subset_2/common.py index 4047146..a64d0f8 100644 --- a/prolog/problems/sets/is_subset_2/common.py +++ b/prolog/problems/sets/is_subset_2/common.py @@ -1,5 +1,9 @@ # coding=utf-8 +from operator import itemgetter +import prolog.engine +import server.problems + id = 132 number = 39 visible = True @@ -15,3 +19,39 @@ is_subset([H|T], S2) :- memb132(H, S2), is_subset(T, S2). ''' + +test_cases = [ + ('is_subset(X, [])', + [{'X': '[]'}]), + ('is_subset([2, 1, 3], [3, 2, 1, 4, 6, 7])', + [{}]), + ('\+ is_subset([2, 1, 0, 3], [3, 2, 1, 4, 6, 7])', + [{}]), + ('is_subset([3, 2, 1, 4, 6, 7], [3, 2, 1, 4, 6, 7])', + [{}]), +] + +def test(program, solved_problems): + code = (program + '\n' + + server.problems.solutions_for_problems('prolog', solved_problems)) + + n_correct = 0 + engine_id = None + try: + engine_id, output = prolog.engine.create(code=code, timeout=1.0) + if engine_id is not None and 'error' not in map(itemgetter(0), output): + # Engine successfully created, and no syntax error in program. + for query, answers in test_cases: + if prolog.engine.check_answers(engine_id, query=query, answers=answers, timeout=1.0): + n_correct += 1 + finally: + if engine_id: + prolog.engine.destroy(engine_id) + + passed = n_correct == len(test_cases) + hints = [{'id': 'test_results', 'args': {'passed': n_correct, 'total': len(test_cases)}}] + return passed, hints + +def hint(program, solved_problems): + # TODO + return [] diff --git a/prolog/problems/sets/is_superset_2/common.py b/prolog/problems/sets/is_superset_2/common.py index 86e5dc7..abd3cfb 100644 --- a/prolog/problems/sets/is_superset_2/common.py +++ b/prolog/problems/sets/is_superset_2/common.py @@ -1,5 +1,9 @@ # coding=utf-8 +from operator import itemgetter +import prolog.engine +import server.problems + id = 131 number = 38 visible = True @@ -15,3 +19,39 @@ is_superset(S1, [H|T]) :- memb131(H, S1), is_superset(S1, T). ''' + +test_cases = [ + ('is_superset([], X)', + [{'X': '[]'}]), + ('is_superset([3, 2, 1, 4, 6, 7], [2, 1, 3])', + [{}]), + ('\+ is_superset([3, 2, 1, 4, 6, 7], [2, 1, 0, 3])', + [{}]), + ('is_superset([3, 2, 1, 4, 6, 7], [3, 2, 1, 4, 6, 7])', + [{}]), +] + +def test(program, solved_problems): + code = (program + '\n' + + server.problems.solutions_for_problems('prolog', solved_problems)) + + n_correct = 0 + engine_id = None + try: + engine_id, output = prolog.engine.create(code=code, timeout=1.0) + if engine_id is not None and 'error' not in map(itemgetter(0), output): + # Engine successfully created, and no syntax error in program. + for query, answers in test_cases: + if prolog.engine.check_answers(engine_id, query=query, answers=answers, timeout=1.0): + n_correct += 1 + finally: + if engine_id: + prolog.engine.destroy(engine_id) + + passed = n_correct == len(test_cases) + hints = [{'id': 'test_results', 'args': {'passed': n_correct, 'total': len(test_cases)}}] + return passed, hints + +def hint(program, solved_problems): + # TODO + return [] diff --git a/prolog/problems/sets/powerset_2/common.py b/prolog/problems/sets/powerset_2/common.py index c825430..77801d7 100644 --- a/prolog/problems/sets/powerset_2/common.py +++ b/prolog/problems/sets/powerset_2/common.py @@ -1,5 +1,9 @@ # coding=utf-8 +from operator import itemgetter +import prolog.engine +import server.problems + id = 134 number = 41 visible = True @@ -15,3 +19,37 @@ subset134([_|T], T1) :- powerset(Set, PowerSet) :- findall(S, subset134(Set, S), PowerSet). ''' + +test_cases = [ + ('powerset([], X)', + [{'X': '[[]]'}]), + ('powerset([1, 2], A), length(A, 4), lists:flatten(A, Y), msort(Y, X)', + [{'X': '[1, 1, 2, 2]'}]), + ('powerset([1, 2, 3], A), length(A, 8), lists:flatten(A, Y), msort(Y, X)', + [{'X': '[1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3]'}]), +] + +def test(program, solved_problems): + code = (program + '\n' + + server.problems.solutions_for_problems('prolog', solved_problems)) + + n_correct = 0 + engine_id = None + try: + engine_id, output = prolog.engine.create(code=code, timeout=1.0) + if engine_id is not None and 'error' not in map(itemgetter(0), output): + # Engine successfully created, and no syntax error in program. + for query, answers in test_cases: + if prolog.engine.check_answers(engine_id, query=query, answers=answers, timeout=1.0): + n_correct += 1 + finally: + if engine_id: + prolog.engine.destroy(engine_id) + + passed = n_correct == len(test_cases) + hints = [{'id': 'test_results', 'args': {'passed': n_correct, 'total': len(test_cases)}}] + return passed, hints + +def hint(program, solved_problems): + # TODO + return [] diff --git a/prolog/problems/sets/subset_2/common.py b/prolog/problems/sets/subset_2/common.py index 130d87b..99d0799 100644 --- a/prolog/problems/sets/subset_2/common.py +++ b/prolog/problems/sets/subset_2/common.py @@ -1,5 +1,9 @@ # coding=utf-8 +from operator import itemgetter +import prolog.engine +import server.problems + id = 133 number = 40 visible = True @@ -12,3 +16,53 @@ subset([H|T], [H|T1]) :- subset([_|T], T1) :- subset(T, T1). ''' + +test_cases = [ + ('subset([], X)', + [{'X': '[]'}]), + ('subset([1, 3, 5, 7], A), msort(A, X)', + [{'X': '[]'}, {'X': '[7]'}, {'X': '[5]'}, {'X': '[5, 7]'}, {'X': '[3]'}, + {'X': '[3, 7]'}, {'X': '[3, 5]'}, {'X': '[3, 5, 7]'}, {'X': '[1]'}, + {'X': '[1, 7]'}, {'X': '[1, 5]'}, {'X': '[1, 5, 7]'}, {'X': '[1, 3]'}, + {'X': '[1, 3, 7]'}, {'X': '[1, 3, 5]'}, {'X': '[1, 3, 5, 7]'}]), + ('subset([8, 4, 6, 2], A), msort(A, X)', + [{'X': '[]'}, {'X': '[2]'}, {'X': '[6]'}, {'X': '[2, 6]'}, {'X': '[4]'}, + {'X': '[2, 4]'}, {'X': '[4, 6]'}, {'X': '[2, 4, 6]'}, {'X': '[8]'}, + {'X': '[2, 8]'}, {'X': '[6, 8]'}, {'X': '[2, 6, 8]'}, {'X': '[4, 8]'}, + {'X': '[2, 4, 8]'}, {'X': '[4, 6, 8]'}, {'X': '[2, 4, 6, 8]'}]), + ('subset([5, 6, 7, 0, 2], A), msort(A, X)', + [{'X': '[]'}, {'X': '[2]'}, {'X': '[0]'}, {'X': '[0, 2]'}, {'X': '[7]'}, + {'X': '[2, 7]'}, {'X': '[0, 7]'}, {'X': '[0, 2, 7]'}, {'X': '[6]'}, + {'X': '[2, 6]'}, {'X': '[0, 6]'}, {'X': '[0, 2, 6]'}, {'X': '[6, 7]'}, + {'X': '[2, 6, 7]'}, {'X': '[0, 6, 7]'}, {'X': '[0, 2, 6, 7]'}, + {'X': '[5]'}, {'X': '[2, 5]'}, {'X': '[0, 5]'}, {'X': '[0, 2, 5]'}, + {'X': '[5, 7]'}, {'X': '[2, 5, 7]'}, {'X': '[0, 5, 7]'}, + {'X': '[0, 2, 5, 7]'}, {'X': '[5, 6]'}, {'X': '[2, 5, 6]'}, + {'X': '[0, 5, 6]'}, {'X': '[0, 2, 5, 6]'}, {'X': '[5, 6, 7]'}, + {'X': '[2, 5, 6, 7]'}, {'X': '[0, 5, 6, 7]'}, {'X': '[0, 2, 5, 6, 7]'}]), +] + +def test(program, solved_problems): + code = (program + '\n' + + server.problems.solutions_for_problems('prolog', solved_problems)) + + n_correct = 0 + engine_id = None + try: + engine_id, output = prolog.engine.create(code=code, timeout=1.0) + if engine_id is not None and 'error' not in map(itemgetter(0), output): + # Engine successfully created, and no syntax error in program. + for query, answers in test_cases: + if prolog.engine.check_answers(engine_id, query=query, answers=answers, timeout=1.0): + n_correct += 1 + finally: + if engine_id: + prolog.engine.destroy(engine_id) + + passed = n_correct == len(test_cases) + hints = [{'id': 'test_results', 'args': {'passed': n_correct, 'total': len(test_cases)}}] + return passed, hints + +def hint(program, solved_problems): + # TODO + return [] diff --git a/prolog/problems/sets/union_3/common.py b/prolog/problems/sets/union_3/common.py index 506913a..774c8cf 100644 --- a/prolog/problems/sets/union_3/common.py +++ b/prolog/problems/sets/union_3/common.py @@ -45,9 +45,7 @@ def test(program, solved_problems): if engine_id is not None and 'error' not in map(itemgetter(0), output): # Engine successfully created, and no syntax error in program. for query, answers in test_cases: - # Limit inferences for each solution to curb unbounded recursion. - limited = 'call_with_inference_limit(({}), 100000, _)'.format(query) - if prolog.engine.check_answers(engine_id, query=limited, answers=answers, timeout=1.0): + if prolog.engine.check_answers(engine_id, query=query, answers=answers, timeout=1.0): n_correct += 1 finally: if engine_id: diff --git a/prolog/problems/sorting/is_sorted_1/common.py b/prolog/problems/sorting/is_sorted_1/common.py index 8feb549..9213ddc 100644 --- a/prolog/problems/sorting/is_sorted_1/common.py +++ b/prolog/problems/sorting/is_sorted_1/common.py @@ -1,5 +1,9 @@ # coding=utf-8 +from operator import itemgetter +import prolog.engine +import server.problems + id = 121 number = 28 visible = True @@ -12,3 +16,45 @@ is_sorted([H1,H2|T]) :- H1 =< H2, is_sorted([H2|T]). ''' + +test_cases = [ + ('is_sorted([])', + [{}]), + ('is_sorted([5, 6, 13, 555, 2111, 2112])', + [{}]), + ('is_sorted([2, 5, 5, 13, 555, 2111, 2112])', + [{}]), + ('is_sorted([-2])', + [{}]), + ('is_sorted([-42, -42, -42, -42])', + [{}]), + ('\+ is_sorted([3, 4, 5, 6, 1, 2, 3])', + [{}]), + ('\+ is_sorted([3, 4, 5, 6, 1, 2, 3, 0])', + [{}]), +] + +def test(program, solved_problems): + code = (program + '\n' + + server.problems.solutions_for_problems('prolog', solved_problems)) + + n_correct = 0 + engine_id = None + try: + engine_id, output = prolog.engine.create(code=code, timeout=1.0) + if engine_id is not None and 'error' not in map(itemgetter(0), output): + # Engine successfully created, and no syntax error in program. + for query, answers in test_cases: + if prolog.engine.check_answers(engine_id, query=query, answers=answers, timeout=1.0): + n_correct += 1 + finally: + if engine_id: + prolog.engine.destroy(engine_id) + + passed = n_correct == len(test_cases) + hints = [{'id': 'test_results', 'args': {'passed': n_correct, 'total': len(test_cases)}}] + return passed, hints + +def hint(program, solved_problems): + # TODO + return [] diff --git a/prolog/problems/sorting/isort_2/common.py b/prolog/problems/sorting/isort_2/common.py index f2c4244..6041b35 100644 --- a/prolog/problems/sorting/isort_2/common.py +++ b/prolog/problems/sorting/isort_2/common.py @@ -1,5 +1,9 @@ # coding=utf-8 +from operator import itemgetter +import prolog.engine +import server.problems + id = 123 number = 30 visible = True @@ -17,3 +21,39 @@ isort([H|T], SL) :- isort(T, ST), sins123(H, ST, SL). ''' + +test_cases = [ + ('isort([], X)', + [{'X': '[]'}]), + ('isort([5, 3, 5, 5, 1, 2, 0], X)', + [{'X': '[0, 1, 2, 3, 5, 5, 5]'}]), + ('isort([2, 1, 3, 5, 6, 0, 22, 3], X)', + [{'X': '[0, 1, 2, 3, 3, 5, 6, 22]'}]), + ('isort([5, 4, 3, 2, 1], X)', + [{'X': '[1, 2, 3, 4, 5]'}]), +] + +def test(program, solved_problems): + code = (program + '\n' + + server.problems.solutions_for_problems('prolog', solved_problems)) + + n_correct = 0 + engine_id = None + try: + engine_id, output = prolog.engine.create(code=code, timeout=1.0) + if engine_id is not None and 'error' not in map(itemgetter(0), output): + # Engine successfully created, and no syntax error in program. + for query, answers in test_cases: + if prolog.engine.check_answers(engine_id, query=query, answers=answers, timeout=1.0): + n_correct += 1 + finally: + if engine_id: + prolog.engine.destroy(engine_id) + + passed = n_correct == len(test_cases) + hints = [{'id': 'test_results', 'args': {'passed': n_correct, 'total': len(test_cases)}}] + return passed, hints + +def hint(program, solved_problems): + # TODO + return [] diff --git a/prolog/problems/sorting/pivoting_4/common.py b/prolog/problems/sorting/pivoting_4/common.py index dd1a1a9..0e9afaa 100644 --- a/prolog/problems/sorting/pivoting_4/common.py +++ b/prolog/problems/sorting/pivoting_4/common.py @@ -1,5 +1,9 @@ # coding=utf-8 +from operator import itemgetter +import prolog.engine +import server.problems + id = 124 number = 31 visible = True @@ -14,3 +18,39 @@ pivoting(P, [H|T], S, [H|G]) :- H > P, pivoting(P, T, S, G). ''' + +test_cases = [ + ('pivoting(5, [], A, B)', + [{'A': '[]', 'B': '[]'}]), + ('pivoting(5, [6, 7, 6], A, B)', + [{'A': '[]', 'B': '[6, 7, 6]'}]), + ('pivoting(4, [2, 1, 8, 9, 3, 4, 2], A, B)', + [{'A': '[2, 1, 3, 4, 2]', 'B': '[8, 9]'}]), + ('pivoting(4, [22, 1, 0, 8, 3, 5, 7, -2], A, B)', + [{'A': '[1, 0, 3, -2]', 'B': '[22, 8, 5, 7]'}]), +] + +def test(program, solved_problems): + code = (program + '\n' + + server.problems.solutions_for_problems('prolog', solved_problems)) + + n_correct = 0 + engine_id = None + try: + engine_id, output = prolog.engine.create(code=code, timeout=1.0) + if engine_id is not None and 'error' not in map(itemgetter(0), output): + # Engine successfully created, and no syntax error in program. + for query, answers in test_cases: + if prolog.engine.check_answers(engine_id, query=query, answers=answers, timeout=1.0): + n_correct += 1 + finally: + if engine_id: + prolog.engine.destroy(engine_id) + + passed = n_correct == len(test_cases) + hints = [{'id': 'test_results', 'args': {'passed': n_correct, 'total': len(test_cases)}}] + return passed, hints + +def hint(program, solved_problems): + # TODO + return [] diff --git a/prolog/problems/sorting/quick_sort_2/common.py b/prolog/problems/sorting/quick_sort_2/common.py index 4afc8fa..b1449f1 100644 --- a/prolog/problems/sorting/quick_sort_2/common.py +++ b/prolog/problems/sorting/quick_sort_2/common.py @@ -1,5 +1,9 @@ # coding=utf-8 +from operator import itemgetter +import prolog.engine +import server.problems + id = 125 number = 32 visible = True @@ -23,3 +27,39 @@ quick_sort([Pivot|T], Sorted) :- quick_sort(Greater, SortedGreater), conc125(SortedSmaller, [Pivot|SortedGreater], Sorted). ''' + +test_cases = [ + ('quick_sort([], X)', + [{'X': '[]'}]), + ('quick_sort([5, 3, 5, 5, 1, 2, 0], X)', + [{'X': '[0, 1, 2, 3, 5, 5, 5]'}]), + ('quick_sort([2, 1, 3, 5, 6, 0, 22, 3], X)', + [{'X': '[0, 1, 2, 3, 3, 5, 6, 22]'}]), + ('quick_sort([5, 4, 3, 2, 1], X)', + [{'X': '[1, 2, 3, 4, 5]'}]), +] + +def test(program, solved_problems): + code = (program + '\n' + + server.problems.solutions_for_problems('prolog', solved_problems)) + + n_correct = 0 + engine_id = None + try: + engine_id, output = prolog.engine.create(code=code, timeout=1.0) + if engine_id is not None and 'error' not in map(itemgetter(0), output): + # Engine successfully created, and no syntax error in program. + for query, answers in test_cases: + if prolog.engine.check_answers(engine_id, query=query, answers=answers, timeout=1.0): + n_correct += 1 + finally: + if engine_id: + prolog.engine.destroy(engine_id) + + passed = n_correct == len(test_cases) + hints = [{'id': 'test_results', 'args': {'passed': n_correct, 'total': len(test_cases)}}] + return passed, hints + +def hint(program, solved_problems): + # TODO + return [] diff --git a/prolog/problems/sorting/sins_3/common.py b/prolog/problems/sorting/sins_3/common.py index ab592ea..4c707ca 100644 --- a/prolog/problems/sorting/sins_3/common.py +++ b/prolog/problems/sorting/sins_3/common.py @@ -1,5 +1,9 @@ # coding=utf-8 +from operator import itemgetter +import prolog.engine +import server.problems + id = 122 number = 29 visible = True @@ -13,3 +17,41 @@ sins(X, [Y|T], [Y|L]) :- X > Y, sins(X, T, L). ''' + +test_cases = [ + ('sins(4, [], X)', + [{'X': '[4]'}]), + ('sins(4, [1, 2, 5, 6, 8], X)', + [{'X': '[1, 2, 4, 5, 6, 8]'}]), + ('sins(8, [1, 2, 3, 4, 5, 6, 7], X)', + [{'X': '[1, 2, 3, 4, 5, 6, 7, 8]'}]), + ('sins(1, [2, 3, 4, 5, 6, 7], X)', + [{'X': '[1, 2, 3, 4, 5, 6, 7]'}]), + ('sins(2, [2, 3, 4, 5, 6, 7], X)', + [{'X': '[2, 2, 3, 4, 5, 6, 7]'}]), +] + +def test(program, solved_problems): + code = (program + '\n' + + server.problems.solutions_for_problems('prolog', solved_problems)) + + n_correct = 0 + engine_id = None + try: + engine_id, output = prolog.engine.create(code=code, timeout=1.0) + if engine_id is not None and 'error' not in map(itemgetter(0), output): + # Engine successfully created, and no syntax error in program. + for query, answers in test_cases: + if prolog.engine.check_answers(engine_id, query=query, answers=answers, timeout=1.0): + n_correct += 1 + finally: + if engine_id: + prolog.engine.destroy(engine_id) + + passed = n_correct == len(test_cases) + hints = [{'id': 'test_results', 'args': {'passed': n_correct, 'total': len(test_cases)}}] + return passed, hints + +def hint(program, solved_problems): + # TODO + return [] diff --git a/prolog/problems/sorting/slowest_sort_ever_2/common.py b/prolog/problems/sorting/slowest_sort_ever_2/common.py index fc8f980..72e25e2 100644 --- a/prolog/problems/sorting/slowest_sort_ever_2/common.py +++ b/prolog/problems/sorting/slowest_sort_ever_2/common.py @@ -1,5 +1,9 @@ # coding=utf-8 +from operator import itemgetter +import prolog.engine +import server.problems + id = 126 number = 33 visible = True @@ -24,3 +28,39 @@ slowest_sort_ever(L, S) :- permute126(L, S), is_sorted126(S). ''' + +test_cases = [ + ('slowest_sort_ever([], X)', + [{'X': '[]'}]), + ('slowest_sort_ever([5, 3, 5, 1], X)', + [{'X': '[1, 3, 5, 5]'}]), + ('slowest_sort_ever([2, 1, 5, 6], X)', + [{'X': '[1, 2, 5, 6]'}]), + ('slowest_sort_ever([5, 4, 3, 2], X)', + [{'X': '[2, 3, 4, 5]'}]), +] + +def test(program, solved_problems): + code = (program + '\n' + + server.problems.solutions_for_problems('prolog', solved_problems)) + + n_correct = 0 + engine_id = None + try: + engine_id, output = prolog.engine.create(code=code, timeout=1.0) + if engine_id is not None and 'error' not in map(itemgetter(0), output): + # Engine successfully created, and no syntax error in program. + for query, answers in test_cases: + if prolog.engine.check_answers(engine_id, query=query, answers=answers, timeout=1.0): + n_correct += 1 + finally: + if engine_id: + prolog.engine.destroy(engine_id) + + passed = n_correct == len(test_cases) + hints = [{'id': 'test_results', 'args': {'passed': n_correct, 'total': len(test_cases)}}] + return passed, hints + +def hint(program, solved_problems): + # TODO + return [] -- cgit v1.2.1 From 0aa5a6d59744727f8f486f35f1501aab87e4c529 Mon Sep 17 00:00:00 2001 From: Timotej Lazar Date: Mon, 14 Dec 2015 20:38:58 +0100 Subject: Add test function for prolog.clp_fd.puzzle_beth --- prolog/problems/clp_fd/puzzle_beth_1/common.py | 36 ++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/prolog/problems/clp_fd/puzzle_beth_1/common.py b/prolog/problems/clp_fd/puzzle_beth_1/common.py index bf81396..8a975ee 100644 --- a/prolog/problems/clp_fd/puzzle_beth_1/common.py +++ b/prolog/problems/clp_fd/puzzle_beth_1/common.py @@ -1,5 +1,9 @@ # coding=utf-8 +from operator import itemgetter +import prolog.engine +import server.problems + id = 155 number = 56 visible = True @@ -8,3 +12,35 @@ facts = None solution = '''\ puzzle_beth(X) :- X + 2 #= 2*(X-5).''' + +test_cases = [ + ('puzzle_beth(X)', + [{'X': '12'}]), + ('setof(A, puzzle_beth(A), X)', + [{'X': '[12]'}]), +] + +def test(program, solved_problems): + code = (program + '\n' + + server.problems.solutions_for_problems('prolog', solved_problems)) + + n_correct = 0 + engine_id = None + try: + engine_id, output = prolog.engine.create(code=code, timeout=1.0) + if engine_id is not None and 'error' not in map(itemgetter(0), output): + # Engine successfully created, and no syntax error in program. + for query, answers in test_cases: + if prolog.engine.check_answers(engine_id, query=query, answers=answers, timeout=1.0): + n_correct += 1 + finally: + if engine_id: + prolog.engine.destroy(engine_id) + + passed = n_correct == len(test_cases) + hints = [{'id': 'test_results', 'args': {'passed': n_correct, 'total': len(test_cases)}}] + return passed, hints + +def hint(program, solved_problems): + # TODO + return [] -- cgit v1.2.1 From 8869415c08615f8aa2d4f8adbb598d8d436f3e5c Mon Sep 17 00:00:00 2001 From: Timotej Lazar Date: Mon, 14 Dec 2015 21:08:07 +0100 Subject: Remove empty plan messages from Python problems --- python/problems/functions/divisors/sl.py | 6 +----- python/problems/functions/divisors_sum/sl.py | 6 +----- python/problems/functions/friendly_numbers/sl.py | 6 +----- python/problems/functions/palindrome/sl.py | 6 +----- python/problems/functions/palindromic_numbers/sl.py | 6 +----- python/problems/functions/perfect_numbers/sl.py | 6 +----- python/problems/functions/prime_numbers/sl.py | 6 +----- python/problems/functions_and_modules/all/sl.py | 6 +----- python/problems/functions_and_modules/any/sl.py | 6 +----- python/problems/functions_and_modules/caesar_cipher/sl.py | 6 +----- python/problems/functions_and_modules/dominoes/sl.py | 6 +----- python/problems/functions_and_modules/largest_sublist/sl.py | 6 +----- python/problems/functions_and_modules/lists_sum/sl.py | 6 +----- python/problems/functions_and_modules/map/sl.py | 6 +----- python/problems/functions_and_modules/multiplicative_range/sl.py | 6 +----- python/problems/functions_and_modules/suspicious_words/sl.py | 6 +----- 16 files changed, 16 insertions(+), 80 deletions(-) diff --git a/python/problems/functions/divisors/sl.py b/python/problems/functions/divisors/sl.py index 76b0917..f0e25c4 100644 --- a/python/problems/functions/divisors/sl.py +++ b/python/problems/functions/divisors/sl.py @@ -12,11 +12,7 @@ description = '''\

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

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

-''', - '''\ -

'''] +plan = [] hint = { 'final_hint': ['''\ diff --git a/python/problems/functions/divisors_sum/sl.py b/python/problems/functions/divisors_sum/sl.py index 47b8719..31cd369 100644 --- a/python/problems/functions/divisors_sum/sl.py +++ b/python/problems/functions/divisors_sum/sl.py @@ -13,11 +13,7 @@ description = '''\ Napiši funkcijo divisors_sum(n), ki vrne vsoto vseh deliteljev števila, ki ga vnese uporabnik.

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

-''', - '''\ -

'''] +plan = [] hint = { 'final_hint': ['''\ diff --git a/python/problems/functions/friendly_numbers/sl.py b/python/problems/functions/friendly_numbers/sl.py index 51d47ae..dd15e0d 100644 --- a/python/problems/functions/friendly_numbers/sl.py +++ b/python/problems/functions/friendly_numbers/sl.py @@ -23,11 +23,7 @@ None

Uporabite funkcijo za vsoto deliteljev!

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

-''', - '''\ -

'''] +plan = [] hint = { 'final_hint': ['''\ diff --git a/python/problems/functions/palindrome/sl.py b/python/problems/functions/palindrome/sl.py index e005057..9b064dd 100644 --- a/python/problems/functions/palindrome/sl.py +++ b/python/problems/functions/palindrome/sl.py @@ -19,11 +19,7 @@ False

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

-''', - '''\ -

'''] +plan = [] hint = { 'final_hint': ['''\ diff --git a/python/problems/functions/palindromic_numbers/sl.py b/python/problems/functions/palindromic_numbers/sl.py index 8d64bab..db9a062 100644 --- a/python/problems/functions/palindromic_numbers/sl.py +++ b/python/problems/functions/palindromic_numbers/sl.py @@ -17,11 +17,7 @@ ki ga lahko dobimo kot produkt dveh tromestnih števil. Vir: Project Euler, Problem 4.

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

-''', - '''\ -

'''] +plan = [] hint = { 'final_hint': ['''\ diff --git a/python/problems/functions/perfect_numbers/sl.py b/python/problems/functions/perfect_numbers/sl.py index a354a17..156b41d 100644 --- a/python/problems/functions/perfect_numbers/sl.py +++ b/python/problems/functions/perfect_numbers/sl.py @@ -16,11 +16,7 @@ Primer popolnega števila je 28, saj so njegovi delitelji 1, 2, 4, 7, 14, njihov

Uporabite funkcijo za vsoto deliteljev!

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

-''', - '''\ -

'''] +plan = [] hint = { 'final_hint': ['''\ diff --git a/python/problems/functions/prime_numbers/sl.py b/python/problems/functions/prime_numbers/sl.py index f6c6b24..a224696 100644 --- a/python/problems/functions/prime_numbers/sl.py +++ b/python/problems/functions/prime_numbers/sl.py @@ -13,11 +13,7 @@ description = '''\ Napišite funkcijo prime(n), ki izpiše vsa praštevila manjša od n.

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

-''', - '''\ -

'''] +plan = [] hint = { 'final_hint': ['''\ diff --git a/python/problems/functions_and_modules/all/sl.py b/python/problems/functions_and_modules/all/sl.py index f71fa4b..e224811 100644 --- a/python/problems/functions_and_modules/all/sl.py +++ b/python/problems/functions_and_modules/all/sl.py @@ -26,11 +26,7 @@ True

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

-''', - '''\ -

'''] +plan = [] hint = { 'final_hint': ['''\ diff --git a/python/problems/functions_and_modules/any/sl.py b/python/problems/functions_and_modules/any/sl.py index f32e50e..ab1aacf 100644 --- a/python/problems/functions_and_modules/any/sl.py +++ b/python/problems/functions_and_modules/any/sl.py @@ -20,11 +20,7 @@ False

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

-''', - '''\ -

'''] +plan = [] hint = { 'final_hint': ['''\ diff --git a/python/problems/functions_and_modules/caesar_cipher/sl.py b/python/problems/functions_and_modules/caesar_cipher/sl.py index ea4d9c8..bedf403 100644 --- a/python/problems/functions_and_modules/caesar_cipher/sl.py +++ b/python/problems/functions_and_modules/caesar_cipher/sl.py @@ -21,11 +21,7 @@ Predpostavite lahko, da niz s vsebuje le male črke angleške besed

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

-''', - '''\ -

'''] +plan = [] hint = { 'final_hint': ['''\ diff --git a/python/problems/functions_and_modules/dominoes/sl.py b/python/problems/functions_and_modules/dominoes/sl.py index 41cb860..cfcee24 100644 --- a/python/problems/functions_and_modules/dominoes/sl.py +++ b/python/problems/functions_and_modules/dominoes/sl.py @@ -15,11 +15,7 @@ Vrsta domin je podana s seznamom parov (terk), na primer ki prejme takšen seznam in pove, ali so domine pravilno zložene. Za prvi seznam mora vrniti True in za drugega False.

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

-''', - '''\ -

'''] +plan = [] hint = { 'final_hint': ['''\ diff --git a/python/problems/functions_and_modules/largest_sublist/sl.py b/python/problems/functions_and_modules/largest_sublist/sl.py index b550ce2..c3582f0 100644 --- a/python/problems/functions_and_modules/largest_sublist/sl.py +++ b/python/problems/functions_and_modules/largest_sublist/sl.py @@ -19,11 +19,7 @@ Napiši funkcijo largest_sublist, ki vrne podseznam z največjo vso

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

-''', - '''\ -

'''] +plan = [] hint = { 'final_hint': ['''\ diff --git a/python/problems/functions_and_modules/lists_sum/sl.py b/python/problems/functions_and_modules/lists_sum/sl.py index 4baa002..88ac541 100644 --- a/python/problems/functions_and_modules/lists_sum/sl.py +++ b/python/problems/functions_and_modules/lists_sum/sl.py @@ -21,11 +21,7 @@ Za gornji seznam naj funkcija vrne seznam [7, 4, 0, 10, 4], saj je,

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

-''', - '''\ -

'''] +plan = [] hint = { 'final_hint': ['''\ diff --git a/python/problems/functions_and_modules/map/sl.py b/python/problems/functions_and_modules/map/sl.py index 18c47fb..6695b30 100644 --- a/python/problems/functions_and_modules/map/sl.py +++ b/python/problems/functions_and_modules/map/sl.py @@ -20,11 +20,7 @@ in vrne nov seznam [f(x_1), f(x_2), ..., f(x_n)].

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

-''', - '''\ -

'''] +plan = [] hint = { 'final_hint': ['''\ diff --git a/python/problems/functions_and_modules/multiplicative_range/sl.py b/python/problems/functions_and_modules/multiplicative_range/sl.py index 8bd4bd0..bb02a84 100644 --- a/python/problems/functions_and_modules/multiplicative_range/sl.py +++ b/python/problems/functions_and_modules/multiplicative_range/sl.py @@ -18,11 +18,7 @@ Napišite funkcijo mrange(start, factor, length), ki vrne seznam, k

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

-''', - '''\ -

'''] +plan = [] hint = { 'final_hint': ['''\ diff --git a/python/problems/functions_and_modules/suspicious_words/sl.py b/python/problems/functions_and_modules/suspicious_words/sl.py index 3bf2c7b..1aa3bdf 100644 --- a/python/problems/functions_and_modules/suspicious_words/sl.py +++ b/python/problems/functions_and_modules/suspicious_words/sl.py @@ -18,11 +18,7 @@ Beseda je sumljiva, če vsebuje tako črko u kot črko a.

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

-''', - '''\ -

'''] +plan = [] hint = { 'final_hint': ['''\ -- cgit v1.2.1 From 2f3e3b67592de852917aa3e32e76d9060d17fdf8 Mon Sep 17 00:00:00 2001 From: Aleksander Sadikov Date: Mon, 14 Dec 2015 23:19:19 +0100 Subject: Test cases for CLPFD, and Slovenian translations for CLPFD and DCG added. --- prolog/problems/clp_fd/tobase_3/common.py | 46 +++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/prolog/problems/clp_fd/tobase_3/common.py b/prolog/problems/clp_fd/tobase_3/common.py index 5d160d7..5e3a783 100644 --- a/prolog/problems/clp_fd/tobase_3/common.py +++ b/prolog/problems/clp_fd/tobase_3/common.py @@ -1,5 +1,9 @@ # coding=utf-8 +from operator import itemgetter +import prolog.engine +import server.problems + id = 150 number = 62 visible = True @@ -14,3 +18,45 @@ tobase(N, B, Nb) :- Rem #>= 0, Rem #< B, Nb #= Nb1 * 10 + Rem, tobase(N1, B, Nb1).''' + +test_cases = [ + ('tobase(214, 2, X)', + [{'X': '11010110'}]), + ('tobase(321, 7, X)', + [{'X': '636'}]), + ('tobase(X, 8, 777)', + [{'X': '511'}]), + ('tobase(X, 8, 132)', + [{'X': '90'}]), + ('tobase(653, X, 10103)', + [{'X': '5'}]), + ('tobase(123, X, 146)', + [{'X': '9'}]), + ('setof(B/N, tobase(123, B, N), X)', + [{'X': '[2/1111011, 3/11120, 4/1323, 5/443, 6/323, 7/234, 8/173, 9/146, 10/123]'}]), +] + +def test(program, solved_problems): + code = (program + '\n' + + server.problems.solutions_for_problems('prolog', solved_problems)) + + n_correct = 0 + engine_id = None + try: + engine_id, output = prolog.engine.create(code=code, timeout=1.0) + if engine_id is not None and 'error' not in map(itemgetter(0), output): + # Engine successfully created, and no syntax error in program. + for query, answers in test_cases: + if prolog.engine.check_answers(engine_id, query=query, answers=answers, timeout=1.0): + n_correct += 1 + finally: + if engine_id: + prolog.engine.destroy(engine_id) + + passed = n_correct == len(test_cases) + hints = [{'id': 'test_results', 'args': {'passed': n_correct, 'total': len(test_cases)}}] + return passed, hints + +def hint(program, solved_problems): + # TODO + return [] -- cgit v1.2.1 From f22468b134a88fcd7acb1415c9997f578f1abe7b Mon Sep 17 00:00:00 2001 From: Aleksander Sadikov Date: Tue, 15 Dec 2015 10:44:52 +0100 Subject: Add tests for Prolog.clp_fd --- prolog/problems/clp_fd/gcd_3/common.py | 44 ++++++++++++++++++++++++ prolog/problems/clp_fd/magic_1/common.py | 41 ++++++++++++++++++++++ prolog/problems/clp_fd/puzzle_abc_3/common.py | 36 +++++++++++++++++++ prolog/problems/clp_fd/puzzle_momson_2/common.py | 38 ++++++++++++++++++++ prolog/problems/clp_fd/puzzle_ratio_2/common.py | 36 +++++++++++++++++++ 5 files changed, 195 insertions(+) diff --git a/prolog/problems/clp_fd/gcd_3/common.py b/prolog/problems/clp_fd/gcd_3/common.py index 7cd6623..6e62e3b 100644 --- a/prolog/problems/clp_fd/gcd_3/common.py +++ b/prolog/problems/clp_fd/gcd_3/common.py @@ -1,5 +1,9 @@ # coding=utf-8 +from operator import itemgetter +import prolog.engine +import server.problems + id = 149 number = 61 visible = True @@ -15,3 +19,43 @@ gcd(X, Y, GCD):- cd(X, Y, GCD), \+ ( cd(X, Y, CD), CD > GCD ). ''' + +test_cases = [ + ('gcd(1, 1, X)', + [{'X': '1'}]), + ('gcd(12, 8, X)', + [{'X': '4'}]), + ('gcd(18, 36, X)', + [{'X': '18'}]), + ('gcd(21, 14, X)', + [{'X': '7'}]), + ('gcd(10, 22, X)', + [{'X': '2'}]), + ('gcd(66, 60, X)', + [{'X': '6'}]), +] + +def test(program, solved_problems): + code = (program + '\n' + + server.problems.solutions_for_problems('prolog', solved_problems)) + + n_correct = 0 + engine_id = None + try: + engine_id, output = prolog.engine.create(code=code, timeout=1.0) + if engine_id is not None and 'error' not in map(itemgetter(0), output): + # Engine successfully created, and no syntax error in program. + for query, answers in test_cases: + if prolog.engine.check_answers(engine_id, query=query, answers=answers, timeout=1.0): + n_correct += 1 + finally: + if engine_id: + prolog.engine.destroy(engine_id) + + passed = n_correct == len(test_cases) + hints = [{'id': 'test_results', 'args': {'passed': n_correct, 'total': len(test_cases)}}] + return passed, hints + +def hint(program, solved_problems): + # TODO + return [] diff --git a/prolog/problems/clp_fd/magic_1/common.py b/prolog/problems/clp_fd/magic_1/common.py index 17a9199..b897cb3 100644 --- a/prolog/problems/clp_fd/magic_1/common.py +++ b/prolog/problems/clp_fd/magic_1/common.py @@ -1,5 +1,9 @@ # coding=utf-8 +from operator import itemgetter +import prolog.engine +import server.problems + id = 151 number = 60 visible = True @@ -16,3 +20,40 @@ magic(L):- A1+B1+C1 #= A3+B3+C3, A1+B2+C3 #= A3+B2+C1, labeling([], L).''' + +test_cases = [ + ('magic(X)', + [{'X': '[2, 7, 6, 9, 5, 1, 4, 3, 8]'}]), + ('magic(X)', + [{'X': '[2, 9, 4, 7, 5, 3, 6, 1, 8]'}]), + ('setof(S, magic(S), X)', + [{'X': '[[2, 7, 6, 9, 5, 1, 4, 3, 8], [2, 9, 4, 7, 5, 3, 6, 1, 8], \ + [4, 3, 8, 9, 5, 1, 2, 7, 6], [4, 9, 2, 3, 5, 7, 8, 1, 6], \ + [6, 1, 8, 7, 5, 3, 2, 9, 4], [6, 7, 2, 1, 5, 9, 8, 3, 4], \ + [8, 1, 6, 3, 5, 7, 4, 9, 2], [8, 3, 4, 1, 5, 9, 6, 7, 2]]'}]), +] + +def test(program, solved_problems): + code = (program + '\n' + + server.problems.solutions_for_problems('prolog', solved_problems)) + + n_correct = 0 + engine_id = None + try: + engine_id, output = prolog.engine.create(code=code, timeout=1.0) + if engine_id is not None and 'error' not in map(itemgetter(0), output): + # Engine successfully created, and no syntax error in program. + for query, answers in test_cases: + if prolog.engine.check_answers(engine_id, query=query, answers=answers, timeout=1.0): + n_correct += 1 + finally: + if engine_id: + prolog.engine.destroy(engine_id) + + passed = n_correct == len(test_cases) + hints = [{'id': 'test_results', 'args': {'passed': n_correct, 'total': len(test_cases)}}] + return passed, hints + +def hint(program, solved_problems): + # TODO + return [] diff --git a/prolog/problems/clp_fd/puzzle_abc_3/common.py b/prolog/problems/clp_fd/puzzle_abc_3/common.py index 1563e1f..34ad409 100644 --- a/prolog/problems/clp_fd/puzzle_abc_3/common.py +++ b/prolog/problems/clp_fd/puzzle_abc_3/common.py @@ -1,5 +1,9 @@ # coding=utf-8 +from operator import itemgetter +import prolog.engine +import server.problems + id = 153 number = 57 visible = True @@ -13,3 +17,35 @@ puzzle_abc(A, B, C) :- [A,B,C] ins 0..inf, labeling([], [A,B,C]). ''' + +test_cases = [ + ('puzzle_abc(A, B, C)', + [{'A': '12', 'B': '10', 'C': '5'}]), + ('setof(A/B/C, puzzle_abc(A, B, C), X)', + [{'X': '[12/10/5]'}]), +] + +def test(program, solved_problems): + code = (program + '\n' + + server.problems.solutions_for_problems('prolog', solved_problems)) + + n_correct = 0 + engine_id = None + try: + engine_id, output = prolog.engine.create(code=code, timeout=1.0) + if engine_id is not None and 'error' not in map(itemgetter(0), output): + # Engine successfully created, and no syntax error in program. + for query, answers in test_cases: + if prolog.engine.check_answers(engine_id, query=query, answers=answers, timeout=1.0): + n_correct += 1 + finally: + if engine_id: + prolog.engine.destroy(engine_id) + + passed = n_correct == len(test_cases) + hints = [{'id': 'test_results', 'args': {'passed': n_correct, 'total': len(test_cases)}}] + return passed, hints + +def hint(program, solved_problems): + # TODO + return [] diff --git a/prolog/problems/clp_fd/puzzle_momson_2/common.py b/prolog/problems/clp_fd/puzzle_momson_2/common.py index 9cef246..0f9e0a8 100644 --- a/prolog/problems/clp_fd/puzzle_momson_2/common.py +++ b/prolog/problems/clp_fd/puzzle_momson_2/common.py @@ -1,5 +1,9 @@ # coding=utf-8 +from operator import itemgetter +import prolog.engine +import server.problems + id = 152 number = 58 visible = True @@ -13,3 +17,37 @@ puzzle_momson(M, S) :- M + S #= 66, M #> S, labeling([], [M, S]).''' + +test_cases = [ + ('puzzle_momson(M, S)', + [{'M': '42', 'S': '24'}]), + ('puzzle_momson(M, S)', + [{'M': '51', 'S': '15'}]), + ('setof(M/S, puzzle_momson(M, S), X)', + [{'X': '[42/24, 51/15]'}]), +] + +def test(program, solved_problems): + code = (program + '\n' + + server.problems.solutions_for_problems('prolog', solved_problems)) + + n_correct = 0 + engine_id = None + try: + engine_id, output = prolog.engine.create(code=code, timeout=1.0) + if engine_id is not None and 'error' not in map(itemgetter(0), output): + # Engine successfully created, and no syntax error in program. + for query, answers in test_cases: + if prolog.engine.check_answers(engine_id, query=query, answers=answers, timeout=1.0): + n_correct += 1 + finally: + if engine_id: + prolog.engine.destroy(engine_id) + + passed = n_correct == len(test_cases) + hints = [{'id': 'test_results', 'args': {'passed': n_correct, 'total': len(test_cases)}}] + return passed, hints + +def hint(program, solved_problems): + # TODO + return [] diff --git a/prolog/problems/clp_fd/puzzle_ratio_2/common.py b/prolog/problems/clp_fd/puzzle_ratio_2/common.py index 73b9234..eca7f62 100644 --- a/prolog/problems/clp_fd/puzzle_ratio_2/common.py +++ b/prolog/problems/clp_fd/puzzle_ratio_2/common.py @@ -1,5 +1,9 @@ # coding=utf-8 +from operator import itemgetter +import prolog.engine +import server.problems + id = 154 number = 59 visible = True @@ -16,3 +20,35 @@ puzzle_ratio(A, B) :- A #< 200, B #< 200, labeling([], [A, B]).''' + +test_cases = [ + ('puzzle_ratio(A, B)', + [{'A': '30', 'B': '24'}]), + ('setof(A/B, puzzle_ratio(A, B), X)', + [{'X': '[30/24]'}]), +] + +def test(program, solved_problems): + code = (program + '\n' + + server.problems.solutions_for_problems('prolog', solved_problems)) + + n_correct = 0 + engine_id = None + try: + engine_id, output = prolog.engine.create(code=code, timeout=1.0) + if engine_id is not None and 'error' not in map(itemgetter(0), output): + # Engine successfully created, and no syntax error in program. + for query, answers in test_cases: + if prolog.engine.check_answers(engine_id, query=query, answers=answers, timeout=1.0): + n_correct += 1 + finally: + if engine_id: + prolog.engine.destroy(engine_id) + + passed = n_correct == len(test_cases) + hints = [{'id': 'test_results', 'args': {'passed': n_correct, 'total': len(test_cases)}}] + return passed, hints + +def hint(program, solved_problems): + # TODO + return [] -- cgit v1.2.1 From 2a4a1d39bfcfb8b258be96c180dde09a12345295 Mon Sep 17 00:00:00 2001 From: Aleksander Sadikov Date: Tue, 15 Dec 2015 10:45:30 +0100 Subject: Add Slovenian translations for Prolog.{clp_fd,dcg} --- prolog/problems/clp_fd/gcd_3/sl.py | 14 ++++++++++++++ prolog/problems/clp_fd/magic_1/sl.py | 14 ++++++++++++++ prolog/problems/clp_fd/puzzle_abc_3/sl.py | 10 ++++++++++ prolog/problems/clp_fd/puzzle_beth_1/sl.py | 11 +++++++++++ prolog/problems/clp_fd/puzzle_momson_2/sl.py | 10 ++++++++++ prolog/problems/clp_fd/puzzle_ratio_2/sl.py | 10 ++++++++++ prolog/problems/clp_fd/tobase_3/sl.py | 17 +++++++++++++++++ prolog/problems/dcg/ab_2/sl.py | 11 +++++++++++ prolog/problems/dcg/digit_2/sl.py | 9 +++++++++ prolog/problems/dcg/expr_2/sl.py | 11 +++++++++++ prolog/problems/dcg/expr_3/sl.py | 15 +++++++++++++++ prolog/problems/dcg/flower_2/sl.py | 11 +++++++++++ prolog/problems/dcg/number_2/sl.py | 10 ++++++++++ prolog/problems/dcg/number_3/sl.py | 14 ++++++++++++++ prolog/problems/dcg/number_proper_2/sl.py | 10 ++++++++++ prolog/problems/dcg/paren_2/sl.py | 11 +++++++++++ prolog/problems/dcg/paren_3/sl.py | 14 ++++++++++++++ 17 files changed, 202 insertions(+) create mode 100644 prolog/problems/clp_fd/gcd_3/sl.py create mode 100644 prolog/problems/clp_fd/magic_1/sl.py create mode 100644 prolog/problems/clp_fd/puzzle_abc_3/sl.py create mode 100644 prolog/problems/clp_fd/puzzle_beth_1/sl.py create mode 100644 prolog/problems/clp_fd/puzzle_momson_2/sl.py create mode 100644 prolog/problems/clp_fd/puzzle_ratio_2/sl.py create mode 100644 prolog/problems/clp_fd/tobase_3/sl.py create mode 100644 prolog/problems/dcg/ab_2/sl.py create mode 100644 prolog/problems/dcg/digit_2/sl.py create mode 100644 prolog/problems/dcg/expr_2/sl.py create mode 100644 prolog/problems/dcg/expr_3/sl.py create mode 100644 prolog/problems/dcg/flower_2/sl.py create mode 100644 prolog/problems/dcg/number_2/sl.py create mode 100644 prolog/problems/dcg/number_3/sl.py create mode 100644 prolog/problems/dcg/number_proper_2/sl.py create mode 100644 prolog/problems/dcg/paren_2/sl.py create mode 100644 prolog/problems/dcg/paren_3/sl.py diff --git a/prolog/problems/clp_fd/gcd_3/sl.py b/prolog/problems/clp_fd/gcd_3/sl.py new file mode 100644 index 0000000..9ef1a87 --- /dev/null +++ b/prolog/problems/clp_fd/gcd_3/sl.py @@ -0,0 +1,14 @@ +# coding=utf-8 + +name = 'gcd/3' +slug = 'Največji skupni delitelj' + +description = '''\ +

gcd(X, Y, GCD): GCD je največji skupni delitelj števil X in Y. Implementiraj ta predikat z uporabo omejitev.

+

Namig: poskusi najprej napisati predikat, ki poišče vse skupne delitelje dveh števil.

+
+  ?- gcd(36, 84, GCD).
+    GCD = 12.
+
''' + +hint = {} diff --git a/prolog/problems/clp_fd/magic_1/sl.py b/prolog/problems/clp_fd/magic_1/sl.py new file mode 100644 index 0000000..8cf040e --- /dev/null +++ b/prolog/problems/clp_fd/magic_1/sl.py @@ -0,0 +1,14 @@ +# coding=utf-8 + +name = 'magic/1' +slug = '3x3 magični kvadrat' + +description = '''\ +

magic(S): seznam S predstavlja 3×3 magični kvadrat (S je permutacija števil 1 do 9 -- tri števila tvorijo eno vrstico). Vsote števil v vsaki vrstici, stolpcu in glavni diagonali magičnega kvadrata so enake. Implementiraj ta predikat z uporabo omejitev. Predikat naj vrne vse rešitve, eno po eno.

+
+  ?- magic(S).
+    S = [2, 7, 6, 9, 5, 1, 4, 3, 8] ;
+    …
+
''' + +hint = {} diff --git a/prolog/problems/clp_fd/puzzle_abc_3/sl.py b/prolog/problems/clp_fd/puzzle_abc_3/sl.py new file mode 100644 index 0000000..118481a --- /dev/null +++ b/prolog/problems/clp_fd/puzzle_abc_3/sl.py @@ -0,0 +1,10 @@ +# coding=utf-8 + +name = 'puzzle_abc/3' +slug = 'Uganka z leti: ABC' + +description = '''\ +

Oseba A je dve leti starejša od osebe B, ki je dvakrat starejša od osebe C. Skupaj so osebe A, B in C stare 27 let.

+

Napiši predikat puzzle_abc(A, B, C), ki izračuna koliko so stare osebe A, B in C.

''' + +hint = {} diff --git a/prolog/problems/clp_fd/puzzle_beth_1/sl.py b/prolog/problems/clp_fd/puzzle_beth_1/sl.py new file mode 100644 index 0000000..261ec74 --- /dev/null +++ b/prolog/problems/clp_fd/puzzle_beth_1/sl.py @@ -0,0 +1,11 @@ +# coding=utf-8 + +name = 'puzzle_beth/1' +slug = 'Uganka z leti: Beti' + +description = '''\ +

Ko so Beti vprašali koliko je stara, je odgovorila takole "Čez dve leti bom dvakrat starejša kot sem bila pet let nazaj".

+

Napiši predikat puzzle_beth(X), ki izračuna njeno trenutno starost X.

+''' + +hint = {} diff --git a/prolog/problems/clp_fd/puzzle_momson_2/sl.py b/prolog/problems/clp_fd/puzzle_momson_2/sl.py new file mode 100644 index 0000000..593f153 --- /dev/null +++ b/prolog/problems/clp_fd/puzzle_momson_2/sl.py @@ -0,0 +1,10 @@ +# coding=utf-8 + +name = 'puzzle_momson/2' +slug = 'Uganka z leti: mama in sin' + +description = '''\ +

Mama in sin sta skupaj stara 66 let. Mamina leta so ravno sinova obrnjena leta (obrnjene so cifre). Koliko sta stara?

+

Napiši predikat puzzle_momson(M, S), ki izračuna starost mame M in sina S.

''' + +hint = {} diff --git a/prolog/problems/clp_fd/puzzle_ratio_2/sl.py b/prolog/problems/clp_fd/puzzle_ratio_2/sl.py new file mode 100644 index 0000000..826e66f --- /dev/null +++ b/prolog/problems/clp_fd/puzzle_ratio_2/sl.py @@ -0,0 +1,10 @@ +# coding=utf-8 + +name = 'puzzle_ratio/2' +slug = 'Uganka z leti: razmerje' + +description = '''\ +

Trenutni starosti osebe A in osebe B sta v razmerju 5:4. Čez tri leta bo razmerje njunih let postalo 11:9.

+

Napiši predikat puzzle_ratio(A, B), ki izračuna starost osebe A in osebe B.

''' + +hint = {} diff --git a/prolog/problems/clp_fd/tobase_3/sl.py b/prolog/problems/clp_fd/tobase_3/sl.py new file mode 100644 index 0000000..a775808 --- /dev/null +++ b/prolog/problems/clp_fd/tobase_3/sl.py @@ -0,0 +1,17 @@ +# coding=utf-8 + +name = 'tobase/3' +slug = 'Pretvori števila v/iz desetiškega sistema' + +description = '''\ +

tobase(Number, B, X): število Number je v desetiškem sistemu. X predstavlja to število v sistemu z bazo B. Implementiraj predikat z uporabo omejitev. Omeji vrednost B na interval [2..10].

+
+  ?- tobase(42, 2, X).
+    X = 101010.
+  ?- tobase(N, 2, 101010).
+    N = 42.
+  ?- tobase(42, B, 101010).
+    B = 2.
+
''' + +hint = {} diff --git a/prolog/problems/dcg/ab_2/sl.py b/prolog/problems/dcg/ab_2/sl.py new file mode 100644 index 0000000..d2d8924 --- /dev/null +++ b/prolog/problems/dcg/ab_2/sl.py @@ -0,0 +1,11 @@ +# coding=utf-8 + +name = 'ab/2' +slug = 'a*b*' + +description = '''\ +

Napiši DCG gramatiko z začetnim simbolom ab za jezik ambn, kjer sta m, n ≥ 0.

+

Primeri veljavnih besed: [], a, aab, abbb, bbb.

+

Namig: za generiranje vedno daljših besed uporabi poizvedbo conc(Word,_,_), ab(Word,[]).

''' + +hint = {} diff --git a/prolog/problems/dcg/digit_2/sl.py b/prolog/problems/dcg/digit_2/sl.py new file mode 100644 index 0000000..393e0e1 --- /dev/null +++ b/prolog/problems/dcg/digit_2/sl.py @@ -0,0 +1,9 @@ +# coding=utf-8 + +name = 'digit/2' +slug = 'Cifra' + +description = '''\ +

Napiši gramatiko z začetnim simbolom digit za jezik definiran z naslednjo množico: {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}.

''' + +hint = {} diff --git a/prolog/problems/dcg/expr_2/sl.py b/prolog/problems/dcg/expr_2/sl.py new file mode 100644 index 0000000..6401deb --- /dev/null +++ b/prolog/problems/dcg/expr_2/sl.py @@ -0,0 +1,11 @@ +# coding=utf-8 + +name = 'expr/2' +slug = 'Aritmetični izrazi' + +description = '''\ +

Napiši gramatiko z začetnim simbolom expr za jezik aritmetičnih izrazov, ki vsebujejo števila (brez vodilnih ničel), vsoto in množenje. Podizrazi se lahko združujejo z oklepaji.

+

Primeri veljavnih besed: (1+2)*3, 42*8*3, (2+1)*(3+4).

+''' + +hint = {} diff --git a/prolog/problems/dcg/expr_3/sl.py b/prolog/problems/dcg/expr_3/sl.py new file mode 100644 index 0000000..734a6ea --- /dev/null +++ b/prolog/problems/dcg/expr_3/sl.py @@ -0,0 +1,15 @@ +# coding=utf-8 + +name = 'expr/3' +slug = 'Aritmetični izrazi s pomenom' + +description = '''\ +

Napiši gramatiko z začetnim simbolom expr za jezik aritmetičnih izrazov, ki vsebujejo števila (brez vodilnih ničel), vsoto in množenje. Podizrazi se lahko združujejo z oklepaji. Pomen besede v tem jeziku je numerična vrednost predstavljenega izraza.

+

Primeri veljavnih besed: (1+2)*3, 42*8*3, (2+1)*(3+4).

+
+  ?- expr(N, ['(',2,'+',1,')','*','(',3,'+',4,')'], []).  % (2+1)*(3+4) = 21
+    N = 21.
+
+''' + +hint = {} diff --git a/prolog/problems/dcg/flower_2/sl.py b/prolog/problems/dcg/flower_2/sl.py new file mode 100644 index 0000000..30e4118 --- /dev/null +++ b/prolog/problems/dcg/flower_2/sl.py @@ -0,0 +1,11 @@ +# coding=utf-8 + +name = 'flower/2' +slug = 'Besede v obliki "rožice", npr. +++--+++' + +description = '''\ +

Napiši gramatiko z začetnim simbolom flower za jezik +n-m+n, kjer je m > 0 in n ≥ 0.

+

Primeri veljavnih besed: -, ++-++, +---+.

+''' + +hint = {} diff --git a/prolog/problems/dcg/number_2/sl.py b/prolog/problems/dcg/number_2/sl.py new file mode 100644 index 0000000..cdcbcee --- /dev/null +++ b/prolog/problems/dcg/number_2/sl.py @@ -0,0 +1,10 @@ +# coding=utf-8 + +name = 'number/2' +slug = 'Števila z dovoljenimi vodilnimi ničlami' + +description = '''\ +

Napiši gramatiko z začetnim simbolom number za jezik nenegativnih celih števil. Števila lahko vsebujejo vodilne ničle.

+

Primeri veljavnih besed: 123, 54, 0122, 0001221, 0.

''' + +hint = {} diff --git a/prolog/problems/dcg/number_3/sl.py b/prolog/problems/dcg/number_3/sl.py new file mode 100644 index 0000000..eeb4db2 --- /dev/null +++ b/prolog/problems/dcg/number_3/sl.py @@ -0,0 +1,14 @@ +# coding=utf-8 + +name = 'number/3' +slug = 'Števila s pomenom' + +description = '''\ +

Napiši gramatiko z začetnim simbolom number za jezik nenegativnih celih števil. Števila lahko vsebujejo vodilne ničle. Pomen besede v tem jeziku je kar numerična vrednost predstavljenega števila.

+
+  ?- number(N, [1,2,3,4], []).
+    N = 1234.
+
+''' + +hint = {} diff --git a/prolog/problems/dcg/number_proper_2/sl.py b/prolog/problems/dcg/number_proper_2/sl.py new file mode 100644 index 0000000..1b39977 --- /dev/null +++ b/prolog/problems/dcg/number_proper_2/sl.py @@ -0,0 +1,10 @@ +# coding=utf-8 + +name = 'number_proper/2' +slug = 'Števila brez vodilnih ničel' + +description = '''\ +

Napiši gramatiko z začetnim simbolom number za jezik nenegativnih celih števil. Števila ne smejo vsebovati vodilnih ničel.

+

Primeri veljavnih besed: 123, 54, 122, 1221, 0.

''' + +hint = {} diff --git a/prolog/problems/dcg/paren_2/sl.py b/prolog/problems/dcg/paren_2/sl.py new file mode 100644 index 0000000..0ec52cc --- /dev/null +++ b/prolog/problems/dcg/paren_2/sl.py @@ -0,0 +1,11 @@ +# coding=utf-8 + +name = 'paren/2' +slug = 'Pravilno gnezdeni oklepaji' + +description = '''\ +

Napiši gramatiko z začetnim simbolom paren za jezik pravilno gnezdenih zaporedij oklepajev. Terminale v tej gramatiki piši takole: ['('] in [')'].

+

Primeri veljavnih besed: (), (()), ()(()), (()())().

+

Primeri neveljavnih besed: )(, (((), )).

''' + +hint = {} diff --git a/prolog/problems/dcg/paren_3/sl.py b/prolog/problems/dcg/paren_3/sl.py new file mode 100644 index 0000000..a98eb8b --- /dev/null +++ b/prolog/problems/dcg/paren_3/sl.py @@ -0,0 +1,14 @@ +# coding=utf-8 + +name = 'paren/3' +slug = 'Pravilno gnezdeni oklepaji s pomenom' + +description = '''\ +

Napiši gramatiko z začetnim simbolom paren za jezik pravilno gnezdenih zaporedij oklepajev. Pomen besede v tem jeziku je največja globina gnezdenja oklepajev.

+
+  ?- paren(D, ['(','(',')',')','(',')'], []).  % (())()
+    D = 2.
+
+''' + +hint = {} -- cgit v1.2.1 From 4beb103569c7d5570c672216682c003bc5a641d4 Mon Sep 17 00:00:00 2001 From: Timotej Lazar Date: Tue, 15 Dec 2015 12:25:27 +0100 Subject: Tweak monkey hint messages --- prolog/sl.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/prolog/sl.py b/prolog/sl.py index 68fc838..2bd2b56 100644 --- a/prolog/sl.py +++ b/prolog/sl.py @@ -32,14 +32,14 @@ hint = { ''', 'monkey_change': '''\ -

Popravi ta del kode.

+

Popravi ta cilj.

''', 'monkey_insert': '''\ -

Dodaj nov del kode.

+

Dodaj novo pravilo oziroma cilj.

''', 'monkey_remove': '''\ -

Odstrani ta del kode.

+

Odstrani ta cilj.

''', } -- cgit v1.2.1 From 33e86fa3601d2afa295ad277ed066592092247c5 Mon Sep 17 00:00:00 2001 From: Timotej Lazar Date: Tue, 15 Dec 2015 12:42:09 +0100 Subject: Hide Prolog.{denotational_semantics,trees} problems --- prolog/problems/denotational_semantics/algol_3/common.py | 2 +- prolog/problems/denotational_semantics/algol_for_3/common.py | 2 +- prolog/problems/denotational_semantics/algol_if_3/common.py | 2 +- prolog/problems/denotational_semantics/prog_8puzzle_2/common.py | 2 +- prolog/problems/denotational_semantics/prog_8puzzle_3/common.py | 2 +- prolog/problems/denotational_semantics/prog_listswap_2/common.py | 2 +- prolog/problems/denotational_semantics/prog_listswap_3/common.py | 2 +- prolog/problems/trees/deletebt_3/common.py | 2 +- prolog/problems/trees/depthbt_2/common.py | 2 +- prolog/problems/trees/insertbt_3/common.py | 2 +- prolog/problems/trees/maxt_2/common.py | 2 +- prolog/problems/trees/memberbt_2/common.py | 2 +- prolog/problems/trees/membert_2/common.py | 2 +- prolog/problems/trees/mirrorbt_2/common.py | 2 +- prolog/problems/trees/numberbt_2/common.py | 2 +- prolog/problems/trees/tolistbt_2/common.py | 2 +- 16 files changed, 16 insertions(+), 16 deletions(-) diff --git a/prolog/problems/denotational_semantics/algol_3/common.py b/prolog/problems/denotational_semantics/algol_3/common.py index cce9b69..d7607c4 100644 --- a/prolog/problems/denotational_semantics/algol_3/common.py +++ b/prolog/problems/denotational_semantics/algol_3/common.py @@ -2,7 +2,7 @@ id = 176 number = 83 -visible = True +visible = False facts = None solution = '''\ diff --git a/prolog/problems/denotational_semantics/algol_for_3/common.py b/prolog/problems/denotational_semantics/algol_for_3/common.py index 4cf9373..3261c99 100644 --- a/prolog/problems/denotational_semantics/algol_for_3/common.py +++ b/prolog/problems/denotational_semantics/algol_for_3/common.py @@ -2,7 +2,7 @@ id = 178 number = 85 -visible = True +visible = False facts = None solution = '''\ diff --git a/prolog/problems/denotational_semantics/algol_if_3/common.py b/prolog/problems/denotational_semantics/algol_if_3/common.py index 0c52886..faf0e4c 100644 --- a/prolog/problems/denotational_semantics/algol_if_3/common.py +++ b/prolog/problems/denotational_semantics/algol_if_3/common.py @@ -2,7 +2,7 @@ id = 177 number = 84 -visible = True +visible = False facts = None solution = '''\ diff --git a/prolog/problems/denotational_semantics/prog_8puzzle_2/common.py b/prolog/problems/denotational_semantics/prog_8puzzle_2/common.py index d994039..c6d4db0 100644 --- a/prolog/problems/denotational_semantics/prog_8puzzle_2/common.py +++ b/prolog/problems/denotational_semantics/prog_8puzzle_2/common.py @@ -2,7 +2,7 @@ id = 172 number = 81 -visible = True +visible = False facts = None solution = '''\ diff --git a/prolog/problems/denotational_semantics/prog_8puzzle_3/common.py b/prolog/problems/denotational_semantics/prog_8puzzle_3/common.py index 15dce6b..494f628 100644 --- a/prolog/problems/denotational_semantics/prog_8puzzle_3/common.py +++ b/prolog/problems/denotational_semantics/prog_8puzzle_3/common.py @@ -2,7 +2,7 @@ id = 173 number = 82 -visible = True +visible = False facts = 'denotational_semantics_aux__predicates' solution = '''\ diff --git a/prolog/problems/denotational_semantics/prog_listswap_2/common.py b/prolog/problems/denotational_semantics/prog_listswap_2/common.py index 1f8b655..020b31c 100644 --- a/prolog/problems/denotational_semantics/prog_listswap_2/common.py +++ b/prolog/problems/denotational_semantics/prog_listswap_2/common.py @@ -2,7 +2,7 @@ id = 175 number = 79 -visible = True +visible = False facts = None solution = '''\ diff --git a/prolog/problems/denotational_semantics/prog_listswap_3/common.py b/prolog/problems/denotational_semantics/prog_listswap_3/common.py index a40be29..6f96f85 100644 --- a/prolog/problems/denotational_semantics/prog_listswap_3/common.py +++ b/prolog/problems/denotational_semantics/prog_listswap_3/common.py @@ -2,7 +2,7 @@ id = 174 number = 80 -visible = True +visible = False facts = 'denotational_semantics_aux__predicates' solution = '''\ diff --git a/prolog/problems/trees/deletebt_3/common.py b/prolog/problems/trees/deletebt_3/common.py index 98ad95f..52f9e3f 100644 --- a/prolog/problems/trees/deletebt_3/common.py +++ b/prolog/problems/trees/deletebt_3/common.py @@ -2,7 +2,7 @@ id = 137 number = 47 -visible = True +visible = False facts = None solution = '''\ diff --git a/prolog/problems/trees/depthbt_2/common.py b/prolog/problems/trees/depthbt_2/common.py index 85dfa27..4542419 100644 --- a/prolog/problems/trees/depthbt_2/common.py +++ b/prolog/problems/trees/depthbt_2/common.py @@ -2,7 +2,7 @@ id = 140 number = 45 -visible = True +visible = False facts = None solution = '''\ diff --git a/prolog/problems/trees/insertbt_3/common.py b/prolog/problems/trees/insertbt_3/common.py index f8ef004..eb1ea94 100644 --- a/prolog/problems/trees/insertbt_3/common.py +++ b/prolog/problems/trees/insertbt_3/common.py @@ -2,7 +2,7 @@ id = 138 number = 48 -visible = True +visible = False facts = None solution = '''\ diff --git a/prolog/problems/trees/maxt_2/common.py b/prolog/problems/trees/maxt_2/common.py index 280cb25..b1cdb39 100644 --- a/prolog/problems/trees/maxt_2/common.py +++ b/prolog/problems/trees/maxt_2/common.py @@ -2,7 +2,7 @@ id = 143 number = 50 -visible = True +visible = False facts = None solution = '''\ diff --git a/prolog/problems/trees/memberbt_2/common.py b/prolog/problems/trees/memberbt_2/common.py index f5e5435..6df89e3 100644 --- a/prolog/problems/trees/memberbt_2/common.py +++ b/prolog/problems/trees/memberbt_2/common.py @@ -2,7 +2,7 @@ id = 135 number = 42 -visible = True +visible = False facts = None solution = '''\ diff --git a/prolog/problems/trees/membert_2/common.py b/prolog/problems/trees/membert_2/common.py index c91371e..7d8f207 100644 --- a/prolog/problems/trees/membert_2/common.py +++ b/prolog/problems/trees/membert_2/common.py @@ -2,7 +2,7 @@ id = 142 number = 49 -visible = True +visible = False facts = None solution = '''\ diff --git a/prolog/problems/trees/mirrorbt_2/common.py b/prolog/problems/trees/mirrorbt_2/common.py index cc271cc..1ee0a9c 100644 --- a/prolog/problems/trees/mirrorbt_2/common.py +++ b/prolog/problems/trees/mirrorbt_2/common.py @@ -2,7 +2,7 @@ id = 136 number = 43 -visible = True +visible = False facts = None solution = '''\ diff --git a/prolog/problems/trees/numberbt_2/common.py b/prolog/problems/trees/numberbt_2/common.py index 7df71d8..e75075e 100644 --- a/prolog/problems/trees/numberbt_2/common.py +++ b/prolog/problems/trees/numberbt_2/common.py @@ -2,7 +2,7 @@ id = 139 number = 44 -visible = True +visible = False facts = None solution = '''\ diff --git a/prolog/problems/trees/tolistbt_2/common.py b/prolog/problems/trees/tolistbt_2/common.py index e6c8ffd..3c14c4e 100644 --- a/prolog/problems/trees/tolistbt_2/common.py +++ b/prolog/problems/trees/tolistbt_2/common.py @@ -2,7 +2,7 @@ id = 141 number = 46 -visible = True +visible = False facts = None solution = '''\ -- cgit v1.2.1 From be94b55b835283de53c686343164641e15abe806 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jure=20=C5=BDabkar?= Date: Mon, 14 Dec 2015 12:44:58 +0100 Subject: Zadnje spremembe pred zagovorom. --- robot/problems/introduction/circle20/sl.py | 8 ++++++++ robot/problems/introduction/countlines/common.py | 3 +-- robot/problems/introduction/countlines/naloga10_countLines.py | 3 +-- robot/problems/introduction/followline/naloga12_followLine.py | 3 +-- robot/problems/introduction/mindstorms_widgets_OLD.py | 1 + robot/problems/introduction/printcolors/naloga09_printColors.py | 3 +-- robot/problems/introduction/rotateback/common.py | 1 - robot/problems/introduction/rotateback/naloga11_rotateBack.py | 3 +-- robot/problems/introduction/wall1m/common.py | 3 +-- 9 files changed, 15 insertions(+), 13 deletions(-) diff --git a/robot/problems/introduction/circle20/sl.py b/robot/problems/introduction/circle20/sl.py index 219f9c7..abe70eb 100644 --- a/robot/problems/introduction/circle20/sl.py +++ b/robot/problems/introduction/circle20/sl.py @@ -24,3 +24,11 @@ hint = { '''

Za dani polmer izmeri čas, ki ga robot potrebuje za en obhod.

''', '''

robot.move_steering( 'on_for_seconds', direction=0, seconds=3 ).

'''], } + +plan = [ '''\ +

1) Naredi robota

+''', +''' + +''' +] diff --git a/robot/problems/introduction/countlines/common.py b/robot/problems/introduction/countlines/common.py index 5b8db2e..6a50988 100644 --- a/robot/problems/introduction/countlines/common.py +++ b/robot/problems/introduction/countlines/common.py @@ -11,8 +11,7 @@ visible = True solution = '''\ import time -from ev3dev import * -from mindstorms_widgets import mindstorms_widgets +from mindstorms_widgets import * color_table = ['none', 'black', 'blue', 'green', 'yellow', 'red', 'white', 'brown'] diff --git a/robot/problems/introduction/countlines/naloga10_countLines.py b/robot/problems/introduction/countlines/naloga10_countLines.py index d1a8326..7079f7c 100644 --- a/robot/problems/introduction/countlines/naloga10_countLines.py +++ b/robot/problems/introduction/countlines/naloga10_countLines.py @@ -7,8 +7,7 @@ Naloga 10: """ import time -from ev3dev import * -from mindstorms_widgets import mindstorms_widgets +from mindstorms_widgets import * color_table = ['none', 'black', 'blue', 'green', 'yellow', 'red', 'white', 'brown'] diff --git a/robot/problems/introduction/followline/naloga12_followLine.py b/robot/problems/introduction/followline/naloga12_followLine.py index 347e89e..e6e19a0 100644 --- a/robot/problems/introduction/followline/naloga12_followLine.py +++ b/robot/problems/introduction/followline/naloga12_followLine.py @@ -8,8 +8,7 @@ Naloga 12: import sys sys.path.append('/home/user/codeq') import time -from ev3dev import * -from mindstorms_widgets import mindstorms_widgets +from mindstorms_widgets import * robot = mindstorms_widgets() robot.connect_motor( 'left' ) diff --git a/robot/problems/introduction/mindstorms_widgets_OLD.py b/robot/problems/introduction/mindstorms_widgets_OLD.py index 4151133..f69f5c7 100644 --- a/robot/problems/introduction/mindstorms_widgets_OLD.py +++ b/robot/problems/introduction/mindstorms_widgets_OLD.py @@ -302,6 +302,7 @@ class mindstorms_widgets: if mode == 'on' and pulse: self._led_pulse( color ) pass + # the sensor should be perfectly still while resetting the gyro def resetGyro(self): self.gs.mode = 'GYRO-RATE' diff --git a/robot/problems/introduction/printcolors/naloga09_printColors.py b/robot/problems/introduction/printcolors/naloga09_printColors.py index 59dfdb0..2e9d323 100644 --- a/robot/problems/introduction/printcolors/naloga09_printColors.py +++ b/robot/problems/introduction/printcolors/naloga09_printColors.py @@ -17,8 +17,7 @@ Naloga 9: import sys sys.path.append('/home/user/codeq') import time -from ev3dev import * -from mindstorms_widgets import mindstorms_widgets +from mindstorms_widgets import * color_table = ['none', 'black', 'blue', 'green', 'yellow', 'red', 'white', 'brown'] diff --git a/robot/problems/introduction/rotateback/common.py b/robot/problems/introduction/rotateback/common.py index 10cca87..2dacaf3 100644 --- a/robot/problems/introduction/rotateback/common.py +++ b/robot/problems/introduction/rotateback/common.py @@ -10,7 +10,6 @@ number = 11 visible = True solution = '''\ -from ev3dev import * from mindstorms_widgets import mindstorms_widgets def sgn(x): diff --git a/robot/problems/introduction/rotateback/naloga11_rotateBack.py b/robot/problems/introduction/rotateback/naloga11_rotateBack.py index 0bab735..2677f05 100644 --- a/robot/problems/introduction/rotateback/naloga11_rotateBack.py +++ b/robot/problems/introduction/rotateback/naloga11_rotateBack.py @@ -2,12 +2,11 @@ # coding=utf-8 print (""" -Naloga 11: +Naloga 11: Robot naj drži smer - če ga obrnemo iz začetne smeri, naj se zasuka nazaj v prvotno smer. Ob pritisku na stikalo, naj se resetira (smer nastavi na 0). """) import sys sys.path.append('/home/user/codeq') import time -from ev3dev import * from mindstorms_widgets import mindstorms_widgets def sgn(x): diff --git a/robot/problems/introduction/wall1m/common.py b/robot/problems/introduction/wall1m/common.py index 07d1e1a..4492cdc 100644 --- a/robot/problems/introduction/wall1m/common.py +++ b/robot/problems/introduction/wall1m/common.py @@ -10,8 +10,7 @@ number = 6 visible = True solution = '''\ -from ev3dev import * -from mindstorms_widgets import mindstorms_widgets +from mindstorms_widgets import * robot = mindstorms_widgets() robot.connect_motor( 'left' ) -- cgit v1.2.1 From b4e46b75f5e2a890b41d2e20a89767590e54ccb4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jure=20=C5=BDabkar?= Date: Tue, 15 Dec 2015 10:34:40 +0100 Subject: Dodani plani za robotske probleme. --- robot/problems/introduction/circle20/sl.py | 16 +++++++++------- robot/problems/introduction/countlines/common.py | 1 + robot/problems/introduction/countlines/sl.py | 13 +++++++++++++ robot/problems/introduction/followline/common.py | 8 +++----- robot/problems/introduction/followline/sl.py | 15 +++++++++++++++ robot/problems/introduction/forward/sl.py | 10 ++++++++++ robot/problems/introduction/forward1m/sl.py | 14 ++++++++++++-- robot/problems/introduction/gyro90/common.py | 3 --- robot/problems/introduction/gyro90/sl.py | 11 +++++++++++ robot/problems/introduction/gyrosquare/common.py | 3 --- robot/problems/introduction/gyrosquare/sl.py | 11 +++++++++++ robot/problems/introduction/printcolors/common.py | 2 -- robot/problems/introduction/printcolors/sl.py | 13 +++++++++++++ robot/problems/introduction/rotateback/common.py | 2 -- robot/problems/introduction/rotateback/sl.py | 12 ++++++++++++ robot/problems/introduction/spotturn90/common.py | 5 +---- robot/problems/introduction/spotturn90/sl.py | 11 +++++++++++ robot/problems/introduction/square20/common.py | 3 --- robot/problems/introduction/square20/sl.py | 11 +++++++++++ robot/problems/introduction/wall1m/common.py | 2 -- robot/problems/introduction/wall1m/sl.py | 14 ++++++++++++++ 21 files changed, 147 insertions(+), 33 deletions(-) diff --git a/robot/problems/introduction/circle20/sl.py b/robot/problems/introduction/circle20/sl.py index abe70eb..735458a 100644 --- a/robot/problems/introduction/circle20/sl.py +++ b/robot/problems/introduction/circle20/sl.py @@ -13,7 +13,7 @@ hint = { '''

robot.connect_motor( 'left' ).

'''], 'connectMotorRight':['''

Robotu priključi desni motor

''', '''

robot.connect_motor( 'right' ).

'''], - 'moveSteering':['''

Sinhroniziraj motorja in ju zaženi za 3 sekunde.

''', + 'moveSteering':['''

Sinhroniziraj motorja.

''', '''

Za sinhronizirano vožnjo je najbolj primerna metoda robot.move_steering( ... ).

'''], 'onForSeconds':['''

Prvi argument metode robot.move_steering naj pove, da bo delovanje motorjev časovno omejeno.

''', '''

robot.move_steering('on_for_seconds', ... ).

'''], @@ -25,10 +25,12 @@ hint = { '''

robot.move_steering( 'on_for_seconds', direction=0, seconds=3 ).

'''], } -plan = [ '''\ -

1) Naredi robota

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

Program izvedemo v naslednjih korakih:

+
    +
  1. Naredimo objekt mindstorms_widgets(), s katerim predstavimo robota.
  2. +
  3. Nanj povežemo oba pogonska motorja.
  4. +
  5. Izračunamo ostrino zavoja, pri kateri bo robot vozil po krogu s polmerom 20 cm.
  6. +
  7. Sinhronizirano poženemo oba motorja za premik v izračunani smeri in časovno omejimo na en obhod.
  8. +
''' ] diff --git a/robot/problems/introduction/countlines/common.py b/robot/problems/introduction/countlines/common.py index 6a50988..925fc06 100644 --- a/robot/problems/introduction/countlines/common.py +++ b/robot/problems/introduction/countlines/common.py @@ -31,6 +31,7 @@ while time.time()-start < 2.1: stevec += 1 color = c robot.move_steering( 'off' ) + print( "Stevilo crt:", stevec ) ''' diff --git a/robot/problems/introduction/countlines/sl.py b/robot/problems/introduction/countlines/sl.py index 4e1c3d4..1f8ea18 100644 --- a/robot/problems/introduction/countlines/sl.py +++ b/robot/problems/introduction/countlines/sl.py @@ -24,3 +24,16 @@ hint = { '''

Zanka je lahko časovno omejena, npr. z uporabo metode time.time().

''', '''

while time.time()-start < 1.1:.

'''], } + +plan = ['''\ +

Program izvedemo v naslednjih korakih:

+
    +
  1. Naredimo objekt mindstorms_widgets(), s katerim predstavimo robota.
  2. +
  3. Nanj povežemo oba pogonska motorja.
  4. +
  5. Povežemo barvni senzor.
  6. +
  7. Vklopimo oba motorja tako, da robot vozi naravnost.
  8. +
  9. V zanki naj robot bere barve in jih šteje.
  10. +
  11. Zanka naj se konča po vnaprej določenem času, npr. 3 sekunde.
  12. +
  13. Ustavimo oba motorja.
  14. +
''' +] diff --git a/robot/problems/introduction/followline/common.py b/robot/problems/introduction/followline/common.py index 3e84cd4..46df5c6 100644 --- a/robot/problems/introduction/followline/common.py +++ b/robot/problems/introduction/followline/common.py @@ -11,8 +11,6 @@ visible = True solution = '''\ import time -from ev3dev import * -from mindstorms_widgets import mindstorms_widgets robot = mindstorms_widgets() robot.connect_motor( 'left' ) @@ -21,10 +19,10 @@ robot.connect_sensor( 'color' ) start = time.time() while time.time()-start < 10: - if robot.color_sensor_measure('reflected_light_intensity') < 30: - L, R = 0, 20 + if robot.color_sensor_measure('reflected_light_intensity') < 50: + L, R = 0, 30 else: - L, R = 20, 0 + L, R = 30, 0 robot.move_tank( 'on', lr_power=[L,R]) robot.move_tank( 'off' ) ''' diff --git a/robot/problems/introduction/followline/sl.py b/robot/problems/introduction/followline/sl.py index 848fe2b..cdc6e19 100644 --- a/robot/problems/introduction/followline/sl.py +++ b/robot/problems/introduction/followline/sl.py @@ -32,3 +32,18 @@ hint = { 'if': ['''

V zanki uporabi pogojni stavek...

''', '''

Če robot vidi črto, naj zavije z nje; če vidi podlago, naj zavije proti črti.

'''] } + +plan = ['''\ +

Program izvedemo v naslednjih korakih:

+
    +
  1. Naredimo objekt mindstorms_widgets(), s katerim predstavimo robota.
  2. +
  3. Nanj povežemo oba pogonska motorja.
  4. +
  5. Povežemo barvni senzor.
  6. +
  7. V zanki preverjamo, kakšno barvo vidi robot s senzorjem.
  8. +
  9. Če vidi črno, naj zavije desno, če vidi belo, naj zavije levo. (Sledi desnemu robu črte).
  10. +
  11. Zanka naj se konča po vnaprej določenem času, 10 sekund.
  12. +
  13. Ustavimo oba motorja.
  14. +
+

Opomba: potrebna je predhodna kalibracija barvnega senzorja.

+''' +] diff --git a/robot/problems/introduction/forward/sl.py b/robot/problems/introduction/forward/sl.py index a6f7e86..cd9b096 100644 --- a/robot/problems/introduction/forward/sl.py +++ b/robot/problems/introduction/forward/sl.py @@ -21,3 +21,13 @@ hint = { 'seconds':['''

Napiši časovno omejitev v sekundah.

''', '''

robot.move_steering( 'on_for_seconds', direction=0, seconds=3 ).

'''], } + +plan = ['''\ +

Program izvedemo v naslednjih korakih:

+
    +
  1. Naredimo objekt mindstorms_widgets(), s katerim predstavimo robota.
  2. +
  3. Nanj povežemo oba pogonska motorja.
  4. +
  5. Vklopimo oba motorja v sinhronem načinu tako, da robot vozi naravnost.
  6. +
  7. Določimo čas trajanja vožnje 3 sekunde.
  8. +
''' +] diff --git a/robot/problems/introduction/forward1m/sl.py b/robot/problems/introduction/forward1m/sl.py index 8045d58..2240d3c 100644 --- a/robot/problems/introduction/forward1m/sl.py +++ b/robot/problems/introduction/forward1m/sl.py @@ -12,12 +12,22 @@ hint = { '''

robot.connect_motor( 'left' ).

'''], 'connectMotorRight':['''

Robotu priključi desni motor

''', '''

robot.connect_motor( 'right' ).

'''], - 'moveSteering':['''

Sinhroniziraj motorja in ju zaženi za 3 sekunde.

''', + 'moveSteering':['''

Sinhroniziraj motorja in ju zaženi.

''', '''

Za sinhronizirano vožnjo je najbolj primerna metoda robot.move_steering( ... ).

'''], 'onForRotations':['''

Prvi argument metode robot.move_steering naj pove, da bo delovanje motorjev določeno s številom obratov.

''', '''

robot.move_steering('on_for_rotations', ... ).

'''], 'direction':['''

Navedi smer premikanja motorjev, naravnost = 0.

''', '''

robot.move_steering( 'on_for_rotations', direction=0, ... ).

'''], - 'rotations':['''

Določi število obratov; za koliko obratov naj se zavrtita motorja? Izmeri dolžino 1m, izpisuj obrate print(robot.motor['left'].count_per_rot, robot.motor['right'].count_per_rot) in tako določi ustrezno število obratov.

''', + 'rotations':['''

Določi število obratov; za koliko obratov naj se zavrtita motorja? Izmeri obseg kolesa in preračunaj, koliko obratov je potrebnih za 1m.

''', '''

robot.move_steering( 'on_for_rotations', direction=0, rotations=5 ).

'''], } + +plan = ['''\ +

Program izvedemo v naslednjih korakih:

+
    +
  1. Naredimo objekt mindstorms_widgets(), s katerim predstavimo robota.
  2. +
  3. Nanj povežemo oba pogonska motorja.
  4. +
  5. Vklopimo oba motorja v sinhronem načinu tako, da robot vozi naravnost.
  6. +
  7. Glede na obseg koles izračunamo, koliko obratov mora narediti kolo na dolžini 1m; ustrezno nastavimo število obratov, po katerih se robot ustavi.
  8. +
''' +] diff --git a/robot/problems/introduction/gyro90/common.py b/robot/problems/introduction/gyro90/common.py index 06b4f1d..78c5dca 100644 --- a/robot/problems/introduction/gyro90/common.py +++ b/robot/problems/introduction/gyro90/common.py @@ -10,9 +10,6 @@ number = 7 visible = True solution = '''\ -from ev3dev import * -from mindstorms_widgets import mindstorms_widgets - robot = mindstorms_widgets() robot.connect_motor( 'left' ) robot.connect_motor( 'right' ) diff --git a/robot/problems/introduction/gyro90/sl.py b/robot/problems/introduction/gyro90/sl.py index 0a82c6d..c0f9451 100644 --- a/robot/problems/introduction/gyro90/sl.py +++ b/robot/problems/introduction/gyro90/sl.py @@ -27,3 +27,14 @@ hint = { 'while':['''

Program naj teče dokler je kot zasuka manjši od 90 stopinj.

''', '''

robot.gyro_sensor_measure() < 90:

'''], } + +plan = ['''\ +

Program izvedemo v naslednjih korakih:

+
    +
  1. Naredimo objekt mindstorms_widgets(), s katerim predstavimo robota.
  2. +
  3. Nanj povežemo oba pogonska motorja.
  4. +
  5. Povežemo žiroskop in ga resetiramo.
  6. +
  7. Vklopimo oba motorja tako, da se vrtita z enako močjo, a v različnih smereh; robot se začne obračati na mestu.
  8. +
  9. V zanki merimo kot zasuka in zanko končamo, ko kot doseže 90 stopinj.
  10. +
''' +] diff --git a/robot/problems/introduction/gyrosquare/common.py b/robot/problems/introduction/gyrosquare/common.py index 5bf6068..872f436 100644 --- a/robot/problems/introduction/gyrosquare/common.py +++ b/robot/problems/introduction/gyrosquare/common.py @@ -10,9 +10,6 @@ number = 8 visible = True solution = '''\ -from ev3dev import * -from mindstorms_widgets import mindstorms_widgets - robot = mindstorms_widgets() robot.connect_motor( 'left' ) robot.connect_motor( 'right' ) diff --git a/robot/problems/introduction/gyrosquare/sl.py b/robot/problems/introduction/gyrosquare/sl.py index 16b2c94..7d1f832 100644 --- a/robot/problems/introduction/gyrosquare/sl.py +++ b/robot/problems/introduction/gyrosquare/sl.py @@ -36,3 +36,14 @@ hint = { 'seconds':['''

Napiši časovno omejitev v sekundah.

''', '''

robot.move_steering( 'on_for_seconds', direction=0, seconds=3 ).

'''], } + +plan = ['''\ +

Program izvedemo v naslednjih korakih:

+
    +
  1. Naredimo objekt mindstorms_widgets(), s katerim predstavimo robota.
  2. +
  3. Nanj povežemo oba pogonska motorja.
  4. +
  5. Povežemo žiroskop in ga resetiramo.
  6. +
  7. Napišemo funkcijo, ki robota pelje naravnost po stranici, nato pa ga na mestu obrne za 90 stopinj.
  8. +
  9. Zgornja funkcijo pokličemo 4-krat zaporedoma.
  10. +
''' +] diff --git a/robot/problems/introduction/printcolors/common.py b/robot/problems/introduction/printcolors/common.py index 4377c57..9b06575 100644 --- a/robot/problems/introduction/printcolors/common.py +++ b/robot/problems/introduction/printcolors/common.py @@ -11,8 +11,6 @@ visible = True solution = '''\ import time -from ev3dev import * -from mindstorms_widgets import mindstorms_widgets color_table = ['none', 'black', 'blue', 'green', 'yellow', 'red', 'white', 'brown'] diff --git a/robot/problems/introduction/printcolors/sl.py b/robot/problems/introduction/printcolors/sl.py index d233b0e..c705eaa 100644 --- a/robot/problems/introduction/printcolors/sl.py +++ b/robot/problems/introduction/printcolors/sl.py @@ -34,3 +34,16 @@ hint = { '''

while time.time()-start < 1.1:.

'''], 'print':['''

V zanki na zaslon izpisuj barvo, ki jo zazna robot.

'''] } + +plan = ['''\ +

Program izvedemo v naslednjih korakih:

+
    +
  1. Naredimo objekt mindstorms_widgets(), s katerim predstavimo robota.
  2. +
  3. Nanj povežemo oba pogonska motorja.
  4. +
  5. Povežemo barvni senzor.
  6. +
  7. Vklopimo oba motorja tako, da robot vozi naravnost.
  8. +
  9. V zanki naj robot bere barve in vsako izpiše na zaslon.
  10. +
  11. Zanka naj se konča po vnaprej določenem času, npr. 3 sekunde.
  12. +
  13. Ustavimo oba motorja.
  14. +
''' +] diff --git a/robot/problems/introduction/rotateback/common.py b/robot/problems/introduction/rotateback/common.py index 2dacaf3..7c8ce44 100644 --- a/robot/problems/introduction/rotateback/common.py +++ b/robot/problems/introduction/rotateback/common.py @@ -10,8 +10,6 @@ number = 11 visible = True solution = '''\ -from mindstorms_widgets import mindstorms_widgets - def sgn(x): return -1 if x<0 else (1 if x>0 else 0) diff --git a/robot/problems/introduction/rotateback/sl.py b/robot/problems/introduction/rotateback/sl.py index 269ea34..3242a80 100644 --- a/robot/problems/introduction/rotateback/sl.py +++ b/robot/problems/introduction/rotateback/sl.py @@ -31,3 +31,15 @@ hint = { 'while':['''

Program naj teče v neskončni zanki.

''', '''

while 1:

'''], } + +plan = ['''\ +

Program izvedemo v naslednjih korakih:

+
    +
  1. Naredimo objekt mindstorms_widgets(), s katerim predstavimo robota.
  2. +
  3. Nanj povežemo oba pogonska motorja.
  4. +
  5. Robotu dodamo žiroskop in ga resetiramo.
  6. +
  7. Robotu dodamo stikalo.
  8. +
  9. V neskončni zanki beremo vrednost kota z žiroskopom.
  10. +
  11. Glede na zasuk iz začetne lege, robota na mestu obrnemo v začetno smer.
  12. +
''' +] diff --git a/robot/problems/introduction/spotturn90/common.py b/robot/problems/introduction/spotturn90/common.py index add6643..e01de39 100644 --- a/robot/problems/introduction/spotturn90/common.py +++ b/robot/problems/introduction/spotturn90/common.py @@ -10,9 +10,6 @@ number = 3 visible = True solution = '''\ -from ev3dev import * -from mindstorms_widgets import mindstorms_widgets - robot = mindstorms_widgets() robot.connect_motor( 'left' ) robot.connect_motor( 'right' ) @@ -30,7 +27,7 @@ hint_type = { 'seconds': Hint('seconds'), } -def hint( code): +def hint( code ): tokens = get_tokens(code) # if code does not include mindstorms_widgets(), a student gets a hint that the robot should be somehow represented in the program diff --git a/robot/problems/introduction/spotturn90/sl.py b/robot/problems/introduction/spotturn90/sl.py index fe477aa..e3541c0 100644 --- a/robot/problems/introduction/spotturn90/sl.py +++ b/robot/problems/introduction/spotturn90/sl.py @@ -19,3 +19,14 @@ hint = { 'seconds':['''

Napiši časovno omejitev v sekundah.

''', '''

robot.move_tank( 'on_for_seconds', ..., seconds=... ).

'''], } + +plan = ['''\ +

Program izvedemo v naslednjih korakih:

+
    +
  1. Naredimo objekt mindstorms_widgets(), s katerim predstavimo robota.
  2. +
  3. Nanj povežemo oba pogonska motorja.
  4. +
  5. Povežemo barvni senzor.
  6. +
  7. Vklopimo oba motorja tako, da se z enako močjo vrtita v različnih smereh.
  8. +
  9. Motorja izlopimo po pretečenem času, ki pri izbrani moči obrne robota za 90 stopinj.
  10. +
''' +] diff --git a/robot/problems/introduction/square20/common.py b/robot/problems/introduction/square20/common.py index a293712..ce8bc14 100644 --- a/robot/problems/introduction/square20/common.py +++ b/robot/problems/introduction/square20/common.py @@ -10,9 +10,6 @@ number = 4 visible = True solution = '''\ -from ev3dev import * -from mindstorms_widgets import mindstorms_widgets - robot = mindstorms_widgets() robot.connect_motor( 'left' ) robot.connect_motor( 'right' ) diff --git a/robot/problems/introduction/square20/sl.py b/robot/problems/introduction/square20/sl.py index f52ddf7..50b335f 100644 --- a/robot/problems/introduction/square20/sl.py +++ b/robot/problems/introduction/square20/sl.py @@ -27,3 +27,14 @@ hint = { 'lrPower': ['''

Za obrat na mestu se morata kolesi vrteti z enako močjo in v nasprotni smeri.

''', '''

robot.move_tank( 'on_for_seconds', lr_power=[20,-20], seconds=.95 ).

'''], } + +plan = ['''\ +

Program izvedemo v naslednjih korakih:

+
    +
  1. Naredimo objekt mindstorms_widgets(), s katerim predstavimo robota.
  2. +
  3. Nanj povežemo oba pogonska motorja.
  4. +
  5. Vklopimo oba motorja tako, da robot vozi naravnost.
  6. +
  7. Robot se na mestu obrne za 90 stopinj; motorja z enako močjo, v različnih smereh.
  8. +
  9. Še 3-krat ponovimo koraka 3 in 4.
  10. +
''' +] diff --git a/robot/problems/introduction/wall1m/common.py b/robot/problems/introduction/wall1m/common.py index 4492cdc..42b4067 100644 --- a/robot/problems/introduction/wall1m/common.py +++ b/robot/problems/introduction/wall1m/common.py @@ -10,8 +10,6 @@ number = 6 visible = True solution = '''\ -from mindstorms_widgets import * - robot = mindstorms_widgets() robot.connect_motor( 'left' ) robot.connect_motor( 'right' ) diff --git a/robot/problems/introduction/wall1m/sl.py b/robot/problems/introduction/wall1m/sl.py index 18518d5..cbb27ed 100644 --- a/robot/problems/introduction/wall1m/sl.py +++ b/robot/problems/introduction/wall1m/sl.py @@ -29,3 +29,17 @@ hint = { 'while':['''

Uporabi zanko: robot naj se pelje naprej, dokler ne pride do razdalje 50 cm od zida.

''', '''

Uporabi še eno zanko: robot naj se pelje naprej z 20% močjo, dokler ne pride do razdalje 20 cm od zida.

'''], } + +plan = ['''\ +

Program izvedemo v naslednjih korakih:

+
    +
  1. Naredimo objekt mindstorms_widgets(), s katerim predstavimo robota.
  2. +
  3. Nanj povežemo oba pogonska motorja.
  4. +
  5. Robotu dodamo ultrazvočni senzor.
  6. +
  7. Vklopimo oba motorja tako, da robot vozi naravnost; moč nastavimo na 80.
  8. +
  9. V zanki merimo razdaljo z UZ senzorjem; zanko končamo, ko je razdalja <50 cm.
  10. +
  11. Moč motorjev nastavimo na 20.
  12. +
  13. V zanki merimo razdaljo z UZ senzorjem; zanko končamo, ko je razdalja <20 cm.
  14. +
  15. Ustavimo oba motorja.
  16. +
''' +] -- cgit v1.2.1 From 6cfee9293d18efed76dc2c83d7a00b1b40230bbf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jure=20=C5=BDabkar?= Date: Tue, 15 Dec 2015 10:49:23 +0100 Subject: Popravek v namigu za problem followline --- robot/problems/introduction/followline/common.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/robot/problems/introduction/followline/common.py b/robot/problems/introduction/followline/common.py index 46df5c6..e28ca35 100644 --- a/robot/problems/introduction/followline/common.py +++ b/robot/problems/introduction/followline/common.py @@ -59,13 +59,13 @@ def hint( code): if not (has_token_sequence(tokens, ['connect_sensor', '(' ]) and 'color' in code): return [{'id': 'connectColorSensor'}] - if not (has_token_sequence(tokens, ['move_steering', '(']) and 'on' in code): + if not (has_token_sequence(tokens, ['move_tank', '(']) and 'on' in code): return [{'id': 'moveTankOn'}] if not 'lr_power' in code: return [{'id': 'lrPower'}] - if not (has_token_sequence(tokens, ['move_steering', '(']) and 'off' in code): + if not (has_token_sequence(tokens, ['move_tank', '(']) and 'off' in code): return [{'id': 'moveTankOff'}] if not (has_token_sequence(tokens, ['color_sensor_measure', '(']) and 'reflected_light_intensity' in code): -- cgit v1.2.1 From 0883cb2a6b0bac23bd7553618f4e8db7c882a757 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jure=20=C5=BDabkar?= Date: Tue, 15 Dec 2015 13:13:49 +0100 Subject: Popravki programov pred zagovorom projekta. --- robot/problems/introduction/circle20/common.py | 5 +---- robot/problems/introduction/countlines/common.py | 3 +-- robot/problems/introduction/forward/common.py | 3 --- robot/problems/introduction/forward1m/common.py | 3 --- robot/problems/introduction/gyro90/common.py | 4 ++-- robot/problems/introduction/gyrosquare/common.py | 23 +++++++++++++---------- robot/problems/introduction/printcolors/common.py | 2 +- robot/problems/introduction/wall1m/common.py | 4 ++-- 8 files changed, 20 insertions(+), 27 deletions(-) diff --git a/robot/problems/introduction/circle20/common.py b/robot/problems/introduction/circle20/common.py index 879f198..4d283d0 100644 --- a/robot/problems/introduction/circle20/common.py +++ b/robot/problems/introduction/circle20/common.py @@ -10,14 +10,11 @@ number = 5 visible = True solution = '''\ -from ev3dev import * -from mindstorms_widgets import mindstorms_widgets - robot = mindstorms_widgets() robot.connect_motor( 'left' ) robot.connect_motor( 'right' ) -fct = 9 # full circle time +fct = 8.9 # full circle time rad = 20 # Direction to make a good radius for the circle robot.move_steering( 'on_for_seconds', direction=rad, power=40, seconds=fct ) ''' diff --git a/robot/problems/introduction/countlines/common.py b/robot/problems/introduction/countlines/common.py index 925fc06..6d2bf13 100644 --- a/robot/problems/introduction/countlines/common.py +++ b/robot/problems/introduction/countlines/common.py @@ -11,7 +11,6 @@ visible = True solution = '''\ import time -from mindstorms_widgets import * color_table = ['none', 'black', 'blue', 'green', 'yellow', 'red', 'white', 'brown'] @@ -24,7 +23,7 @@ robot.move_steering( 'on' ) start = time.time() stevec = 0 color = -1 -while time.time()-start < 2.1: +while time.time()-start < 1.2: c = robot.color_sensor_measure( 'color' ) # values: 0-7 see the scale above if c!=color: if c!=6 and c!=0: diff --git a/robot/problems/introduction/forward/common.py b/robot/problems/introduction/forward/common.py index 5a46d86..0793d72 100644 --- a/robot/problems/introduction/forward/common.py +++ b/robot/problems/introduction/forward/common.py @@ -9,9 +9,6 @@ number = 1 visible = True solution = '''\ -from ev3dev import * -from mindstorms_widgets import mindstorms_widgets - robot = mindstorms_widgets() robot.connect_motor( 'left' ) robot.connect_motor( 'right' ) diff --git a/robot/problems/introduction/forward1m/common.py b/robot/problems/introduction/forward1m/common.py index a8dd9ad..201a981 100644 --- a/robot/problems/introduction/forward1m/common.py +++ b/robot/problems/introduction/forward1m/common.py @@ -10,9 +10,6 @@ number = 2 visible = True solution = '''\ -from ev3dev import * -from mindstorms_widgets import mindstorms_widgets - robot = mindstorms_widgets() robot.connect_motor( 'left' ) robot.connect_motor( 'right' ) diff --git a/robot/problems/introduction/gyro90/common.py b/robot/problems/introduction/gyro90/common.py index 78c5dca..1828001 100644 --- a/robot/problems/introduction/gyro90/common.py +++ b/robot/problems/introduction/gyro90/common.py @@ -18,11 +18,11 @@ robot.connect_sensor( 'gyro' ) robot.gyro_set_mode( 'angle' ) robot.reset_gyro() -power = 15 +power = 10 robot.move_tank( 'on', lr_power=[power,-power] ) while robot.gyro_sensor_measure() < 90: pass -robot.move_tank( 'off' ) +robot.move_tank( 'off', brake_at_end=True ) ''' hint_type = { diff --git a/robot/problems/introduction/gyrosquare/common.py b/robot/problems/introduction/gyrosquare/common.py index 872f436..79ae131 100644 --- a/robot/problems/introduction/gyrosquare/common.py +++ b/robot/problems/introduction/gyrosquare/common.py @@ -10,26 +10,29 @@ number = 8 visible = True solution = '''\ +import time + robot = mindstorms_widgets() robot.connect_motor( 'left' ) robot.connect_motor( 'right' ) robot.connect_sensor( 'gyro' ) robot.gyro_set_mode( 'angle' ) -robot.reset_gyro() -power = 20 -def forward_and_turnRight(power, angle): - robot.move_steering( 'on_for_seconds', direction=0, power=power, seconds=2 ) +def forward_and_turnRight(power=10, angle=90): + robot.move_steering( 'on_for_seconds', direction=0, power=power, seconds=5 ) + time.sleep(.5) + robot.reset_gyro() + robot.gyro_set_mode( 'angle' ) + print(robot.gyro_sensor_measure( )) robot.move_tank( 'on', lr_power=[power,-power] ) - while robot.gyro_sensor_measure( 'angle' ) < angle: + while robot.gyro_sensor_measure( ) < angle: pass - robot.move_tank( 'off' ) + robot.move_tank( 'off', brake_at_end=True ) + print(robot.gyro_sensor_measure( )) -forward_and_turnRight(power, 89) -forward_and_turnRight(power, 179) -forward_and_turnRight(power, 269) -forward_and_turnRight(power, 359) +for i in range(4): + forward_and_turnRight() ''' hint_type = { diff --git a/robot/problems/introduction/printcolors/common.py b/robot/problems/introduction/printcolors/common.py index 9b06575..79f4d2a 100644 --- a/robot/problems/introduction/printcolors/common.py +++ b/robot/problems/introduction/printcolors/common.py @@ -22,7 +22,7 @@ robot.connect_sensor( 'color' ) robot.move_steering( 'on') start = time.time() color = -1 -while time.time()-start < 2.1: +while time.time()-start < 1.2: c = robot.color_sensor_measure('color') if c!=color: print( c, color_table[c]) diff --git a/robot/problems/introduction/wall1m/common.py b/robot/problems/introduction/wall1m/common.py index 42b4067..e8a5917 100644 --- a/robot/problems/introduction/wall1m/common.py +++ b/robot/problems/introduction/wall1m/common.py @@ -15,10 +15,10 @@ robot.connect_motor( 'left' ) robot.connect_motor( 'right' ) robot.connect_sensor( 'ultrasonic' ) robot.move_steering( 'on', power=80 ) -while robot.ultrasonic_sensor_measure( 'distance-cm' ) > 500: +while robot.ultrasonic_sensor_measure( 'distance-cm' ) > 50: pass robot.move_steering( 'on', power=20 ) -while robot.ultrasonic_sensor_measure( 'distance-cm' ) > 200: +while robot.ultrasonic_sensor_measure( 'distance-cm' ) > 20: pass robot.move_steering( 'off' ) ''' -- cgit v1.2.1 From f80206e6a4e4cec1574a375cb04dbdf07d3e02cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jure=20=C5=BDabkar?= Date: Wed, 23 Dec 2015 11:28:05 +0100 Subject: angleska verzija --- robot/en.py | 42 ++++++++++++++++++++++++ robot/problems/introduction/circle20/en.py | 22 +++++++++++-- robot/problems/introduction/countlines/common.py | 6 ++-- robot/problems/introduction/countlines/en.py | 25 +++++++++++++- robot/problems/introduction/en.py | 2 ++ robot/problems/introduction/followline/en.py | 34 ++++++++++++++++++- robot/problems/introduction/forward/en.py | 17 +++++++++- robot/problems/introduction/forward1m/en.py | 21 ++++++++++-- robot/problems/introduction/forward1m/sl.py | 2 +- 9 files changed, 160 insertions(+), 11 deletions(-) create mode 100644 robot/problems/introduction/en.py diff --git a/robot/en.py b/robot/en.py index f296516..61314e9 100644 --- a/robot/en.py +++ b/robot/en.py @@ -3,5 +3,47 @@ name = 'Robot' description = 'Introductory Robot course.' + hint = { + 'init':['''

In code the robot is represented by mindstorms_widgets(): robot = mindstorms_widgets().

'''], + 'connectMotorLeft':['''

Connect the left motor to the robot.

''', + '''

robot.connect_motor( 'left' ).

'''], + 'connectMotorRight':['''

Connect the right motor to the robot.

''', + '''

robot.connect_motor( 'right' ).

'''], + 'moveSteering':['''

Synchronize the motors.

''', + '''

Use move_steering method for synchonization robot.move_steering( ... ).

'''], + 'moveSteeringOff':['''

Stop the motors.

''', + '''

robot.move_steering( 'off' ).

'''], + 'onForSeconds':['''

The first argument of robot.move_steering should specify that the motors will run for a certain amount of time.

''', + '''

robot.move_steering('on_for_seconds', ... ).

'''], + 'direction':['''

Define the direction of moving; negative/positive values represent a left/right turn.

'''], + 'seconds':['''

Determine the running time of the motors.

'''], + 'connectColorSensor':['''

Connect the color sensor to the robot.

''', + '''

robot.connect_sensor( 'color' ).

'''], + 'colorSensorMeasure':['''

While the robot is moving forward, it should use the color sensor in 'color' mode to recognize the colors.

''', + '''

robot.color_sensor_measure( 'color' ).

'''], + 'colorSensorMeasureRLI':['''

Use the color sensor in 'reflected_light_intensity' mode.

''', + '''

robot.color_sensor_measure( 'reflected_light_intensity' ).

'''], + 'moveTankOn':['''

Use the method for separate motor control, to set each motor's power separately.

''', + '''

The most appropriate for this is robot.move_tank( ... ).

''', + '''

robot.move_tank( 'on', ...)

'''], + 'lrPower': ['''

Set the powers of the left and right motor.

''', + '''

robot.move_tank( 'on', lr_power=[ ... ])

'''], + 'moveTankOff': ['''Stop the robot.''', + '''

robot.move_tank( 'off' )

'''], + 'onForRotations':['''

Set the first argument of robot.move_steering method so that the motors will run for the specified number of rotations.

''', + '''

robot.move_steering('on_for_rotations', ... ).

'''], + 'rotations':['''

Determine the number of rotations; how many turns should the motors do in a meter? Measure the circumference of the wheel and compute the number of rotations per meter.

''', + '''

robot.move_steering( 'on_for_rotations', direction=0, rotations=5 ).

'''], + 'no_hint': ['''\ +

No hint here!

+'''], + + 'system_error': ['''\ +

System error: [%=message%].

+'''], + + 'test_results': ['''\ +

Your program passed [%=passed%] / [%=total%] tests.

+'''], } diff --git a/robot/problems/introduction/circle20/en.py b/robot/problems/introduction/circle20/en.py index 8210d71..c677cce 100644 --- a/robot/problems/introduction/circle20/en.py +++ b/robot/problems/introduction/circle20/en.py @@ -7,8 +7,26 @@ name = 'Circle 20 cm' slug = 'Circle 20 cm' description = '''\ -''' +

Write a program that will make the robot drive in circle (r=20cm) and stop after one loop.

''' hint = { - + 'mW_init':mod.hint['init'], + 'connectMotorLeft':mod.hint['connectMotorLeft'], + 'connectMotorRight':mod.hint['connectMotorRight'], + 'moveSteering':mod.hint['moveSteering'], + 'onForSeconds':mod.hint['onForSeconds'], + 'direction':mod.hint['direction']+['''

The value of this parameter should be such that would make the robot circle with radius 20cm. This value highly depends on the construction of the robot.

''', + '''

robot.move_steering( 'on_for_seconds', direction=20, ... ).

'''], + 'seconds':mod.hint['seconds']+['''

Experimentally determine the time (in seconds) the robot needs for one loop.

''', + '''

robot.move_steering( 'on_for_seconds', direction=0, seconds=3 ).

'''], } + +plan = ['''\ +

The program should:

+
    +
  1. create a mindstorms_widgets() object, which represents the robot in your code.
  2. +
  3. connect the driving motors.
  4. +
  5. calculate the turn so that the robot would drive in circle with radius 20 cm.
  6. +
  7. synchronize the motors and run them for a specified time, so that the robot stops after one round.
  8. +
''' +] diff --git a/robot/problems/introduction/countlines/common.py b/robot/problems/introduction/countlines/common.py index 6d2bf13..bf5343b 100644 --- a/robot/problems/introduction/countlines/common.py +++ b/robot/problems/introduction/countlines/common.py @@ -21,17 +21,17 @@ robot.connect_sensor( 'color' ) robot.move_steering( 'on' ) start = time.time() -stevec = 0 +counter = 0 color = -1 while time.time()-start < 1.2: c = robot.color_sensor_measure( 'color' ) # values: 0-7 see the scale above if c!=color: if c!=6 and c!=0: - stevec += 1 + counter += 1 color = c robot.move_steering( 'off' ) -print( "Stevilo crt:", stevec ) +print( "Number of lines:", counter ) ''' hint_type = { diff --git a/robot/problems/introduction/countlines/en.py b/robot/problems/introduction/countlines/en.py index 8b3b275..009a752 100644 --- a/robot/problems/introduction/countlines/en.py +++ b/robot/problems/introduction/countlines/en.py @@ -7,8 +7,31 @@ name = 'Count lines' slug = 'Count lines' description = '''\ + Write a program to count the color lines on white background using the robot with a color sensor. The robot should drive forward, crossing the lines and count them. ''' hint = { - + 'mW_init':mod.hint['init'], + 'connectMotorLeft':mod.hint['connectMotorLeft'], + 'connectMotorRight':mod.hint['connectMotorRight'], + 'moveSteeringOn':mod.hint['moveSteering']+['''

Use move_steering method with 'on' as the first parameter robot.move_steering( 'on',... ).

'''], + 'moveSteeringOff':mod.hint['moveSteeringOff'], + 'connectColorSensor':mod.hint['connectColorSensor'], + 'colorSensorMeasure':mod.hint['colorSensorMeasure'], + 'while':['''

Use the while loop: inside, the robot should read the current color and increase the counter when the color changes.

''', + '''

Interrupt the loop after a certain amount of time; determine the time the robot needs to drive over all the colors experimentally; use time.time().

''', + '''

while time.time()-start < 1.5:.

'''], } + +plan = ['''\ +

The program should:

+
    +
  1. create a mindstorms_widgets() object, which represents the robot in your code.
  2. +
  3. connect the driving motors.
  4. +
  5. connect the color sensor.
  6. +
  7. synchronize the motors and run them so that the robot would move forward.
  8. +
  9. inside the loop, let the robot recognize colors and increase the counter.
  10. +
  11. interrupt the loop after a certain amount of time.
  12. +
  13. stop the motors.
  14. +
''' +] diff --git a/robot/problems/introduction/en.py b/robot/problems/introduction/en.py new file mode 100644 index 0000000..5236b4e --- /dev/null +++ b/robot/problems/introduction/en.py @@ -0,0 +1,2 @@ +name = 'Introduction' +description = 'Motors and sensors.' diff --git a/robot/problems/introduction/followline/en.py b/robot/problems/introduction/followline/en.py index 3f816fe..1551d1b 100644 --- a/robot/problems/introduction/followline/en.py +++ b/robot/problems/introduction/followline/en.py @@ -7,8 +7,40 @@ name = 'Line following' slug = 'Line following' description = '''\ + Write the program for line following. The robot should use the color sensor to follow the black line on white background. ''' hint = { - + 'mW_init':mod.hint['init'], + 'connectMotorLeft':mod.hint['connectMotorLeft'], + 'connectMotorRight':mod.hint['connectMotorRight'], + 'moveSteeringOn':mod.hint['moveSteering']+['''

Use move_steering method with 'on' as the first parameter robot.move_steering( 'on',... ).

'''], + 'moveSteeringOff':mod.hint['moveSteeringOff'], + 'connectColorSensor':mod.hint['connectColorSensor'], + 'colorSensorMeasureRLI':mod.hint['colorSensorMeasureRLI'], + 'while':['''

Use the loop, inside which the robot would follow the line.

''', + '''

The loop should be time constrained, e.g. time.time().

''', + '''

start = time.time()\nwhile time.time()-start < 10:.

'''], + 'moveTankOn':mod.hint['moveTankOn'], + 'lrPower': mod.hint['lrPower'], + 'moveTankOff': mod.hint['moveTankOff'], + 'time': ['''Use time() to measure time.''', + '''

start = time.time()\nwhile time.time()-start < 10:

'''], + 'if': ['''

Use conditional statement inside the loop...

''', + '''

If the robot sees the line, it should turn slightly to go off the line; if the robot sees the background, it should turn towards the line.

'''] } + +plan = ['''\ +

The program should do the following:

+
    +
  1. create a mindstorms_widgets() object, which represents the robot in your code.
  2. +
  3. connect the driving motors.
  4. +
  5. connect the color sensor.
  6. +
  7. in a loop, the robot should read the color sensor to check whether it is on or off line.
  8. +
  9. if it sees black, it should turn right/left; if it sees white, it should turn left/right.
  10. +
  11. break the loop after specified time, 10 seconds.
  12. +
  13. stop the motors.
  14. +
+

Note: you may need to calibrate the color sensor before running the program on the robot.

+''' +] \ No newline at end of file diff --git a/robot/problems/introduction/forward/en.py b/robot/problems/introduction/forward/en.py index be73921..5f78d57 100644 --- a/robot/problems/introduction/forward/en.py +++ b/robot/problems/introduction/forward/en.py @@ -8,5 +8,20 @@ description = '''\ ''' hint = { - + 'mW_init':mod.hint['init'], + 'connectMotorLeft':mod.hint['connectMotorLeft'], + 'connectMotorRight':mod.hint['connectMotorRight'], + 'moveSteering':mod.hint['moveSteering'], + 'onForSeconds':mod.hint['onForSeconds'], + 'direction':mod.hint['direction']+['''

robot.move_steering( 'on_for_seconds', direction=0, ... ).

'''], + 'seconds':mod.hint['seconds']+['''

robot.move_steering( 'on_for_seconds', direction=0, seconds=3 ).

'''], } + +plan = ['''\ +

The program should:

+
    +
  1. create a mindstorms_widgets() object, which represents the robot in your code.
  2. +
  3. connect the driving motors.
  4. +
  5. synchronize the motors and run them so that the robot would move forward for 3 seconds.
  6. +
''' +] \ No newline at end of file diff --git a/robot/problems/introduction/forward1m/en.py b/robot/problems/introduction/forward1m/en.py index bdf2a45..f923059 100644 --- a/robot/problems/introduction/forward1m/en.py +++ b/robot/problems/introduction/forward1m/en.py @@ -7,9 +7,26 @@ name = 'Forward 1m' slug = 'Forward 1m' description = '''\ - + Write a program that would make the robot drive forward and stop after 1 meter. ''' hint = { - + 'mW_init':mod.hint['init'], + 'connectMotorLeft':mod.hint['connectMotorLeft'], + 'connectMotorRight':mod.hint['connectMotorRight'], + 'moveSteering':mod.hint['moveSteering'], + 'onForRotations':mod.hint['onForRotations'], + 'direction':mod.hint['direction']+['''

robot.move_steering( '...', direction=0, ... ).

'''], + 'seconds':mod.hint['seconds']+['''

robot.move_steering( 'on_for_seconds', direction=0, seconds=3 ).

'''], + 'rotations':mod.hint['rotations'], } + +plan = ['''\ +

Program izvedemo v naslednjih korakih:

+
    +
  1. create a mindstorms_widgets() object, which represents the robot in your code.
  2. +
  3. connect the driving motors.
  4. +
  5. measure the circumference of robot's wheels and compute the number of rotations per meter.
  6. +
  7. synchronize the motors and run them so that the robot would move forward for computed number of rotations.
  8. +
''' +] diff --git a/robot/problems/introduction/forward1m/sl.py b/robot/problems/introduction/forward1m/sl.py index 2240d3c..f6209eb 100644 --- a/robot/problems/introduction/forward1m/sl.py +++ b/robot/problems/introduction/forward1m/sl.py @@ -4,7 +4,7 @@ name = 'Naprej 1m' slug = 'Naprej 1m' description = '''\ -

Napiši program, da bo robot peljal naravnost naprej 3 sekunde in se nato ustavil.

''' +

Napiši program, da bo robot peljal 1 meter naravnost in se nato ustavil.

''' hint = { 'mW_init':['''

Robota v programu predstavimo z mindstorms_widgets(): robot = mindstorms_widgets().

'''], -- cgit v1.2.1 From bebd9806a957cd91fe0e507091bc7d0fd385f865 Mon Sep 17 00:00:00 2001 From: Timotej Lazar Date: Wed, 23 Dec 2015 14:57:52 +0100 Subject: Fix: import robot hints from the correct directory --- robot/problems/introduction/circle20/en.py | 2 +- robot/problems/introduction/countlines/en.py | 2 +- robot/problems/introduction/followline/en.py | 4 ++-- robot/problems/introduction/forward/en.py | 5 ++++- robot/problems/introduction/forward1m/en.py | 2 +- 5 files changed, 9 insertions(+), 6 deletions(-) diff --git a/robot/problems/introduction/circle20/en.py b/robot/problems/introduction/circle20/en.py index c677cce..d2c410c 100644 --- a/robot/problems/introduction/circle20/en.py +++ b/robot/problems/introduction/circle20/en.py @@ -1,6 +1,6 @@ # coding=utf-8 import server -mod = server.problems.load_language('python', 'en') +mod = server.problems.load_language('robot', 'en') id = 205 name = 'Circle 20 cm' diff --git a/robot/problems/introduction/countlines/en.py b/robot/problems/introduction/countlines/en.py index 009a752..7655b21 100644 --- a/robot/problems/introduction/countlines/en.py +++ b/robot/problems/introduction/countlines/en.py @@ -1,6 +1,6 @@ # coding=utf-8 import server -mod = server.problems.load_language('python', 'en') +mod = server.problems.load_language('robot', 'en') id = 206 name = 'Count lines' diff --git a/robot/problems/introduction/followline/en.py b/robot/problems/introduction/followline/en.py index 1551d1b..9a588bc 100644 --- a/robot/problems/introduction/followline/en.py +++ b/robot/problems/introduction/followline/en.py @@ -1,6 +1,6 @@ # coding=utf-8 import server -mod = server.problems.load_language('python', 'en') +mod = server.problems.load_language('robot', 'en') id = 207 name = 'Line following' @@ -43,4 +43,4 @@ plan = ['''\

Note: you may need to calibrate the color sensor before running the program on the robot.

''' -] \ No newline at end of file +] diff --git a/robot/problems/introduction/forward/en.py b/robot/problems/introduction/forward/en.py index 5f78d57..400c452 100644 --- a/robot/problems/introduction/forward/en.py +++ b/robot/problems/introduction/forward/en.py @@ -1,5 +1,8 @@ # coding=utf-8 +import server +mod = server.problems.load_language('robot', 'en') + name = 'Forward 3s' slug = 'Forward 3s' @@ -24,4 +27,4 @@ plan = ['''\
  • connect the driving motors.
  • synchronize the motors and run them so that the robot would move forward for 3 seconds.
  • ''' -] \ No newline at end of file +] diff --git a/robot/problems/introduction/forward1m/en.py b/robot/problems/introduction/forward1m/en.py index f923059..f47d088 100644 --- a/robot/problems/introduction/forward1m/en.py +++ b/robot/problems/introduction/forward1m/en.py @@ -1,6 +1,6 @@ # coding=utf-8 import server -mod = server.problems.load_language('python', 'en') +mod = server.problems.load_language('robot', 'en') id = 208 name = 'Forward 1m' -- cgit v1.2.1 From 85e4a0147d722b9a12652d559fc96d64ccf01ac4 Mon Sep 17 00:00:00 2001 From: Timotej Lazar Date: Wed, 23 Dec 2015 15:43:10 +0100 Subject: Hide problem Prolog.family_relations.connected_3 --- prolog/problems/family_relations/connected_3/common.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/prolog/problems/family_relations/connected_3/common.py b/prolog/problems/family_relations/connected_3/common.py index 2555fe9..b6356a9 100644 --- a/prolog/problems/family_relations/connected_3/common.py +++ b/prolog/problems/family_relations/connected_3/common.py @@ -6,7 +6,7 @@ import server.problems id = 102 number = 9 -visible = True +visible = False facts = 'family_relations' solution = '''\ -- cgit v1.2.1 From 766e2ba30413850ab43842de0aa3e9a80c5e7236 Mon Sep 17 00:00:00 2001 From: Timotej Lazar Date: Wed, 23 Dec 2015 16:19:06 +0100 Subject: Add info about reusable solutions to Prolog groups --- prolog/problems/clp_fd/common.py | 2 ++ prolog/problems/clp_r/common.py | 2 ++ prolog/problems/dcg/common.py | 2 ++ prolog/problems/denotational_semantics/common.py | 2 ++ prolog/problems/family_relations/common.py | 2 ++ prolog/problems/license_plates/common.py | 2 ++ prolog/problems/lists/common.py | 2 ++ prolog/problems/old_exams/common.py | 2 ++ prolog/problems/other/common.py | 2 ++ prolog/problems/sets/common.py | 2 ++ prolog/problems/sorting/common.py | 2 ++ prolog/problems/trees/common.py | 2 ++ 12 files changed, 24 insertions(+) diff --git a/prolog/problems/clp_fd/common.py b/prolog/problems/clp_fd/common.py index 3b1f9cf..845ed8b 100644 --- a/prolog/problems/clp_fd/common.py +++ b/prolog/problems/clp_fd/common.py @@ -1,2 +1,4 @@ id = 8 number = 7 + +allowed_groups = ['lists'] diff --git a/prolog/problems/clp_r/common.py b/prolog/problems/clp_r/common.py index 2238250..4136a33 100644 --- a/prolog/problems/clp_r/common.py +++ b/prolog/problems/clp_r/common.py @@ -1,2 +1,4 @@ id = 9 number = 8 + +allowed_groups = ['lists'] diff --git a/prolog/problems/dcg/common.py b/prolog/problems/dcg/common.py index 4992f2d..19fc104 100644 --- a/prolog/problems/dcg/common.py +++ b/prolog/problems/dcg/common.py @@ -1,2 +1,4 @@ id = 10 number = 9 + +allowed_groups = ['dcg', 'lists'] diff --git a/prolog/problems/denotational_semantics/common.py b/prolog/problems/denotational_semantics/common.py index e2c420e..57be52d 100644 --- a/prolog/problems/denotational_semantics/common.py +++ b/prolog/problems/denotational_semantics/common.py @@ -1,2 +1,4 @@ id = 11 number = 10 + +allowed_groups = ['lists'] diff --git a/prolog/problems/family_relations/common.py b/prolog/problems/family_relations/common.py index 5aff819..f292faa 100644 --- a/prolog/problems/family_relations/common.py +++ b/prolog/problems/family_relations/common.py @@ -1,2 +1,4 @@ id = 1 number = 1 + +allowed_groups = ['family_relations'] diff --git a/prolog/problems/license_plates/common.py b/prolog/problems/license_plates/common.py index 3d15487..eab76a6 100644 --- a/prolog/problems/license_plates/common.py +++ b/prolog/problems/license_plates/common.py @@ -1,2 +1,4 @@ id = 7 number = 6 + +allowed_groups = ['license_plates', 'lists'] diff --git a/prolog/problems/lists/common.py b/prolog/problems/lists/common.py index 4788fc4..e7dd0d7 100644 --- a/prolog/problems/lists/common.py +++ b/prolog/problems/lists/common.py @@ -1,2 +1,4 @@ id = 2 number = 2 + +allowed_groups = ['lists'] diff --git a/prolog/problems/old_exams/common.py b/prolog/problems/old_exams/common.py index 56857ba..949859b 100644 --- a/prolog/problems/old_exams/common.py +++ b/prolog/problems/old_exams/common.py @@ -1 +1,3 @@ id = 12 + +allowed_groups = ['lists'] diff --git a/prolog/problems/other/common.py b/prolog/problems/other/common.py index 50384ad..25978e7 100644 --- a/prolog/problems/other/common.py +++ b/prolog/problems/other/common.py @@ -1 +1,3 @@ id = 4 + +allowed_groups = ['lists'] diff --git a/prolog/problems/sets/common.py b/prolog/problems/sets/common.py index 104aa9d..9318010 100644 --- a/prolog/problems/sets/common.py +++ b/prolog/problems/sets/common.py @@ -1,2 +1,4 @@ id = 5 number = 4 + +allowed_groups = ['sets', 'lists'] diff --git a/prolog/problems/sorting/common.py b/prolog/problems/sorting/common.py index f006f10..1ad1c8c 100644 --- a/prolog/problems/sorting/common.py +++ b/prolog/problems/sorting/common.py @@ -1,2 +1,4 @@ id = 3 number = 3 + +allowed_groups = ['sorting', 'lists'] diff --git a/prolog/problems/trees/common.py b/prolog/problems/trees/common.py index a519878..d9ebca1 100644 --- a/prolog/problems/trees/common.py +++ b/prolog/problems/trees/common.py @@ -1,2 +1,4 @@ id = 6 number = 5 + +allowed_groups = ['lists'] -- cgit v1.2.1 From c1bb0d56b2c0482c766d094c65fdf0fd9d1aa0ba Mon Sep 17 00:00:00 2001 From: Timotej Lazar Date: Wed, 23 Dec 2015 16:23:43 +0100 Subject: Simplify Prolog test function --- prolog/problems/clp_fd/gcd_3/common.py | 7 ++----- prolog/problems/clp_fd/magic_1/common.py | 7 ++----- prolog/problems/clp_fd/puzzle_abc_3/common.py | 7 ++----- prolog/problems/clp_fd/puzzle_beth_1/common.py | 7 ++----- prolog/problems/clp_fd/puzzle_momson_2/common.py | 7 ++----- prolog/problems/clp_fd/puzzle_ratio_2/common.py | 7 ++----- prolog/problems/clp_fd/tobase_3/common.py | 7 ++----- prolog/problems/family_relations/ancestor_2/common.py | 8 ++------ prolog/problems/family_relations/aunt_2/common.py | 8 ++------ prolog/problems/family_relations/brother_2/common.py | 8 ++------ prolog/problems/family_relations/connected_3/common.py | 8 ++------ prolog/problems/family_relations/cousin_2/common.py | 8 ++------ prolog/problems/family_relations/descendant_2/common.py | 8 ++------ prolog/problems/family_relations/father_2/common.py | 8 ++------ prolog/problems/family_relations/grandparent_2/common.py | 8 ++------ prolog/problems/family_relations/mother_2/common.py | 8 ++------ prolog/problems/family_relations/sister_2/common.py | 8 ++------ prolog/problems/license_plates/checklicenseplate_3/common.py | 7 ++----- prolog/problems/license_plates/firstminus_2/common.py | 7 ++----- prolog/problems/license_plates/genexp_2/common.py | 7 ++----- prolog/problems/license_plates/getdigits_2/common.py | 7 ++----- prolog/problems/license_plates/joindigits_2/common.py | 7 ++----- prolog/problems/lists/conc_3/common.py | 7 ++----- prolog/problems/lists/count_3/common.py | 7 ++----- prolog/problems/lists/del_3/common.py | 7 ++----- prolog/problems/lists/divide_3/common.py | 7 ++----- prolog/problems/lists/dup_2/common.py | 7 ++----- prolog/problems/lists/evenlen_1_+_oddlen_1/common.py | 7 ++----- prolog/problems/lists/insert_3/common.py | 7 ++----- prolog/problems/lists/len_2/common.py | 7 ++----- prolog/problems/lists/max_2/common.py | 7 ++----- prolog/problems/lists/memb_2/common.py | 7 ++----- prolog/problems/lists/min_2/common.py | 7 ++----- prolog/problems/lists/palindrome_1/common.py | 7 ++----- prolog/problems/lists/permute_2/common.py | 7 ++----- prolog/problems/lists/rev_2/common.py | 7 ++----- prolog/problems/lists/shiftleft_2/common.py | 7 ++----- prolog/problems/lists/shiftright_2/common.py | 7 ++----- prolog/problems/lists/sublist_2/common.py | 7 ++----- prolog/problems/lists/sum_2/common.py | 7 ++----- prolog/problems/sets/diff_3/common.py | 7 ++----- prolog/problems/sets/intersect_3/common.py | 7 ++----- prolog/problems/sets/is_subset_2/common.py | 7 ++----- prolog/problems/sets/is_superset_2/common.py | 7 ++----- prolog/problems/sets/powerset_2/common.py | 7 ++----- prolog/problems/sets/subset_2/common.py | 7 ++----- prolog/problems/sets/union_3/common.py | 7 ++----- prolog/problems/sorting/is_sorted_1/common.py | 7 ++----- prolog/problems/sorting/isort_2/common.py | 7 ++----- prolog/problems/sorting/pivoting_4/common.py | 7 ++----- prolog/problems/sorting/quick_sort_2/common.py | 7 ++----- prolog/problems/sorting/sins_3/common.py | 7 ++----- prolog/problems/sorting/slowest_sort_ever_2/common.py | 7 ++----- 53 files changed, 106 insertions(+), 275 deletions(-) diff --git a/prolog/problems/clp_fd/gcd_3/common.py b/prolog/problems/clp_fd/gcd_3/common.py index 6e62e3b..f24e0bb 100644 --- a/prolog/problems/clp_fd/gcd_3/common.py +++ b/prolog/problems/clp_fd/gcd_3/common.py @@ -35,14 +35,11 @@ test_cases = [ [{'X': '6'}]), ] -def test(program, solved_problems): - code = (program + '\n' + - server.problems.solutions_for_problems('prolog', solved_problems)) - +def test(code, aux_code): n_correct = 0 engine_id = None try: - engine_id, output = prolog.engine.create(code=code, timeout=1.0) + engine_id, output = prolog.engine.create(code=code+aux_code, timeout=1.0) if engine_id is not None and 'error' not in map(itemgetter(0), output): # Engine successfully created, and no syntax error in program. for query, answers in test_cases: diff --git a/prolog/problems/clp_fd/magic_1/common.py b/prolog/problems/clp_fd/magic_1/common.py index b897cb3..3ffe72f 100644 --- a/prolog/problems/clp_fd/magic_1/common.py +++ b/prolog/problems/clp_fd/magic_1/common.py @@ -33,14 +33,11 @@ test_cases = [ [8, 1, 6, 3, 5, 7, 4, 9, 2], [8, 3, 4, 1, 5, 9, 6, 7, 2]]'}]), ] -def test(program, solved_problems): - code = (program + '\n' + - server.problems.solutions_for_problems('prolog', solved_problems)) - +def test(code, aux_code): n_correct = 0 engine_id = None try: - engine_id, output = prolog.engine.create(code=code, timeout=1.0) + engine_id, output = prolog.engine.create(code=code+aux_code, timeout=1.0) if engine_id is not None and 'error' not in map(itemgetter(0), output): # Engine successfully created, and no syntax error in program. for query, answers in test_cases: diff --git a/prolog/problems/clp_fd/puzzle_abc_3/common.py b/prolog/problems/clp_fd/puzzle_abc_3/common.py index 34ad409..ffce416 100644 --- a/prolog/problems/clp_fd/puzzle_abc_3/common.py +++ b/prolog/problems/clp_fd/puzzle_abc_3/common.py @@ -25,14 +25,11 @@ test_cases = [ [{'X': '[12/10/5]'}]), ] -def test(program, solved_problems): - code = (program + '\n' + - server.problems.solutions_for_problems('prolog', solved_problems)) - +def test(code, aux_code): n_correct = 0 engine_id = None try: - engine_id, output = prolog.engine.create(code=code, timeout=1.0) + engine_id, output = prolog.engine.create(code=code+aux_code, timeout=1.0) if engine_id is not None and 'error' not in map(itemgetter(0), output): # Engine successfully created, and no syntax error in program. for query, answers in test_cases: diff --git a/prolog/problems/clp_fd/puzzle_beth_1/common.py b/prolog/problems/clp_fd/puzzle_beth_1/common.py index 8a975ee..fb00516 100644 --- a/prolog/problems/clp_fd/puzzle_beth_1/common.py +++ b/prolog/problems/clp_fd/puzzle_beth_1/common.py @@ -20,14 +20,11 @@ test_cases = [ [{'X': '[12]'}]), ] -def test(program, solved_problems): - code = (program + '\n' + - server.problems.solutions_for_problems('prolog', solved_problems)) - +def test(code, aux_code): n_correct = 0 engine_id = None try: - engine_id, output = prolog.engine.create(code=code, timeout=1.0) + engine_id, output = prolog.engine.create(code=code+aux_code, timeout=1.0) if engine_id is not None and 'error' not in map(itemgetter(0), output): # Engine successfully created, and no syntax error in program. for query, answers in test_cases: diff --git a/prolog/problems/clp_fd/puzzle_momson_2/common.py b/prolog/problems/clp_fd/puzzle_momson_2/common.py index 0f9e0a8..906bd15 100644 --- a/prolog/problems/clp_fd/puzzle_momson_2/common.py +++ b/prolog/problems/clp_fd/puzzle_momson_2/common.py @@ -27,14 +27,11 @@ test_cases = [ [{'X': '[42/24, 51/15]'}]), ] -def test(program, solved_problems): - code = (program + '\n' + - server.problems.solutions_for_problems('prolog', solved_problems)) - +def test(code, aux_code): n_correct = 0 engine_id = None try: - engine_id, output = prolog.engine.create(code=code, timeout=1.0) + engine_id, output = prolog.engine.create(code=code+aux_code, timeout=1.0) if engine_id is not None and 'error' not in map(itemgetter(0), output): # Engine successfully created, and no syntax error in program. for query, answers in test_cases: diff --git a/prolog/problems/clp_fd/puzzle_ratio_2/common.py b/prolog/problems/clp_fd/puzzle_ratio_2/common.py index eca7f62..736cd2e 100644 --- a/prolog/problems/clp_fd/puzzle_ratio_2/common.py +++ b/prolog/problems/clp_fd/puzzle_ratio_2/common.py @@ -28,14 +28,11 @@ test_cases = [ [{'X': '[30/24]'}]), ] -def test(program, solved_problems): - code = (program + '\n' + - server.problems.solutions_for_problems('prolog', solved_problems)) - +def test(code, aux_code): n_correct = 0 engine_id = None try: - engine_id, output = prolog.engine.create(code=code, timeout=1.0) + engine_id, output = prolog.engine.create(code=code+aux_code, timeout=1.0) if engine_id is not None and 'error' not in map(itemgetter(0), output): # Engine successfully created, and no syntax error in program. for query, answers in test_cases: diff --git a/prolog/problems/clp_fd/tobase_3/common.py b/prolog/problems/clp_fd/tobase_3/common.py index 5e3a783..3783396 100644 --- a/prolog/problems/clp_fd/tobase_3/common.py +++ b/prolog/problems/clp_fd/tobase_3/common.py @@ -36,14 +36,11 @@ test_cases = [ [{'X': '[2/1111011, 3/11120, 4/1323, 5/443, 6/323, 7/234, 8/173, 9/146, 10/123]'}]), ] -def test(program, solved_problems): - code = (program + '\n' + - server.problems.solutions_for_problems('prolog', solved_problems)) - +def test(code, aux_code): n_correct = 0 engine_id = None try: - engine_id, output = prolog.engine.create(code=code, timeout=1.0) + engine_id, output = prolog.engine.create(code=code+aux_code, timeout=1.0) if engine_id is not None and 'error' not in map(itemgetter(0), output): # Engine successfully created, and no syntax error in program. for query, answers in test_cases: diff --git a/prolog/problems/family_relations/ancestor_2/common.py b/prolog/problems/family_relations/ancestor_2/common.py index 68cbc6d..48ea512 100644 --- a/prolog/problems/family_relations/ancestor_2/common.py +++ b/prolog/problems/family_relations/ancestor_2/common.py @@ -40,15 +40,11 @@ test_cases = [ [{'X': 'vanessa'}, {'X': 'patrick'}, {'X': 'tina'}, {'X': 'thomas'}, {'X': 'william'}]), ] -def test(program, solved_problems): - code = (program + '\n' + - server.problems.solutions_for_problems('prolog', solved_problems) + '\n' + - server.problems.load_facts('prolog', facts).facts) - +def test(code, aux_code): n_correct = 0 engine_id = None try: - engine_id, output = prolog.engine.create(code=code, timeout=1.0) + engine_id, output = prolog.engine.create(code=code+aux_code, timeout=1.0) if engine_id is not None and 'error' not in map(itemgetter(0), output): # Engine successfully created, and no syntax error in program. for query, answers in test_cases: diff --git a/prolog/problems/family_relations/aunt_2/common.py b/prolog/problems/family_relations/aunt_2/common.py index b0a18bf..507460f 100644 --- a/prolog/problems/family_relations/aunt_2/common.py +++ b/prolog/problems/family_relations/aunt_2/common.py @@ -44,15 +44,11 @@ test_cases = [ [{'X': 'vanessa'}, {'X': 'patricia'}]), ] -def test(program, solved_problems): - code = (program + '\n' + - server.problems.solutions_for_problems('prolog', solved_problems) + '\n' + - server.problems.load_facts('prolog', facts).facts) - +def test(code, aux_code): n_correct = 0 engine_id = None try: - engine_id, output = prolog.engine.create(code=code, timeout=1.0) + engine_id, output = prolog.engine.create(code=code+aux_code, timeout=1.0) if engine_id is not None and 'error' not in map(itemgetter(0), output): # Engine successfully created, and no syntax error in program. for query, answers in test_cases: diff --git a/prolog/problems/family_relations/brother_2/common.py b/prolog/problems/family_relations/brother_2/common.py index 4d01c0b..556d0e9 100644 --- a/prolog/problems/family_relations/brother_2/common.py +++ b/prolog/problems/family_relations/brother_2/common.py @@ -38,15 +38,11 @@ test_cases = [ [{'X': 'jeffrey'}, {'X': 'william'}]), ] -def test(program, solved_problems): - code = (program + '\n' + - server.problems.solutions_for_problems('prolog', solved_problems) + '\n' + - server.problems.load_facts('prolog', facts).facts) - +def test(code, aux_code): n_correct = 0 engine_id = None try: - engine_id, output = prolog.engine.create(code=code, timeout=1.0) + engine_id, output = prolog.engine.create(code=code+aux_code, timeout=1.0) if engine_id is not None and 'error' not in map(itemgetter(0), output): # Engine successfully created, and no syntax error in program. for query, answers in test_cases: diff --git a/prolog/problems/family_relations/connected_3/common.py b/prolog/problems/family_relations/connected_3/common.py index b6356a9..31d0d12 100644 --- a/prolog/problems/family_relations/connected_3/common.py +++ b/prolog/problems/family_relations/connected_3/common.py @@ -29,15 +29,11 @@ test_cases = [ # [{'X': 'vanessa'}, {'X': 'patricia'}, {'X': 'susan'}, {'X': 'john'}, {'X': 'michael'}, {'X': 'michelle'}]), ] -def test(program, solved_problems): - code = (program + '\n' + - server.problems.solutions_for_problems('prolog', solved_problems) + '\n' + - server.problems.load_facts('prolog', facts).facts) - +def test(code, aux_code): n_correct = 0 engine_id = None try: - engine_id, output = prolog.engine.create(code=code, timeout=1.0) + engine_id, output = prolog.engine.create(code=code+aux_code, timeout=1.0) if engine_id is not None and 'error' not in map(itemgetter(0), output): # Engine successfully created, and no syntax error in program. for query, answers in test_cases: diff --git a/prolog/problems/family_relations/cousin_2/common.py b/prolog/problems/family_relations/cousin_2/common.py index 382c7a0..0f7a37d 100644 --- a/prolog/problems/family_relations/cousin_2/common.py +++ b/prolog/problems/family_relations/cousin_2/common.py @@ -51,15 +51,11 @@ test_cases = [ [{'X': 'andrew'}, {'X': 'melanie'}]), ] -def test(program, solved_problems): - code = (program + '\n' + - server.problems.solutions_for_problems('prolog', solved_problems) + '\n' + - server.problems.load_facts('prolog', facts).facts) - +def test(code, aux_code): n_correct = 0 engine_id = None try: - engine_id, output = prolog.engine.create(code=code, timeout=1.0) + engine_id, output = prolog.engine.create(code=code+aux_code, timeout=1.0) if engine_id is not None and 'error' not in map(itemgetter(0), output): # Engine successfully created, and no syntax error in program. for query, answers in test_cases: diff --git a/prolog/problems/family_relations/descendant_2/common.py b/prolog/problems/family_relations/descendant_2/common.py index e979b0f..f419b1d 100644 --- a/prolog/problems/family_relations/descendant_2/common.py +++ b/prolog/problems/family_relations/descendant_2/common.py @@ -40,15 +40,11 @@ test_cases = [ [{'X': 'vanessa'}, {'X': 'patricia'}, {'X': 'susan'}, {'X': 'john'}, {'X': 'michael'}, {'X': 'michelle'}]), ] -def test(program, solved_problems): - code = (program + '\n' + - server.problems.solutions_for_problems('prolog', solved_problems) + '\n' + - server.problems.load_facts('prolog', facts).facts) - +def test(code, aux_code): n_correct = 0 engine_id = None try: - engine_id, output = prolog.engine.create(code=code, timeout=1.0) + engine_id, output = prolog.engine.create(code=code+aux_code, timeout=1.0) if engine_id is not None and 'error' not in map(itemgetter(0), output): # Engine successfully created, and no syntax error in program. for query, answers in test_cases: diff --git a/prolog/problems/family_relations/father_2/common.py b/prolog/problems/family_relations/father_2/common.py index 45b9255..f5888de 100644 --- a/prolog/problems/family_relations/father_2/common.py +++ b/prolog/problems/family_relations/father_2/common.py @@ -41,15 +41,11 @@ test_cases = [ [{'X': 'aleksandr'}]), ] -def test(program, solved_problems): - code = (program + '\n' + - server.problems.solutions_for_problems('prolog', solved_problems) + '\n' + - server.problems.load_facts('prolog', facts).facts) - +def test(code, aux_code): n_correct = 0 engine_id = None try: - engine_id, output = prolog.engine.create(code=code, timeout=1.0) + engine_id, output = prolog.engine.create(code=code+aux_code, timeout=1.0) if engine_id is not None and 'error' not in map(itemgetter(0), output): # Engine successfully created, and no syntax error in program. for query, answers in test_cases: diff --git a/prolog/problems/family_relations/grandparent_2/common.py b/prolog/problems/family_relations/grandparent_2/common.py index 0c902da..663c9e4 100644 --- a/prolog/problems/family_relations/grandparent_2/common.py +++ b/prolog/problems/family_relations/grandparent_2/common.py @@ -42,15 +42,11 @@ test_cases = [ [{'X': 'vanessa'}, {'X': 'patricia'}]), ] -def test(program, solved_problems): - code = (program + '\n' + - server.problems.solutions_for_problems('prolog', solved_problems) + '\n' + - server.problems.load_facts('prolog', facts).facts) - +def test(code, aux_code): n_correct = 0 engine_id = None try: - engine_id, output = prolog.engine.create(code=code, timeout=1.0) + engine_id, output = prolog.engine.create(code=code+aux_code, timeout=1.0) if engine_id is not None and 'error' not in map(itemgetter(0), output): # Engine successfully created, and no syntax error in program. for query, answers in test_cases: diff --git a/prolog/problems/family_relations/mother_2/common.py b/prolog/problems/family_relations/mother_2/common.py index 535e7ed..0a4c7bf 100644 --- a/prolog/problems/family_relations/mother_2/common.py +++ b/prolog/problems/family_relations/mother_2/common.py @@ -42,15 +42,11 @@ test_cases = [ [{'X': 'steve'}]), ] -def test(program, solved_problems): - code = (program + '\n' + - server.problems.solutions_for_problems('prolog', solved_problems) + '\n' + - server.problems.load_facts('prolog', facts).facts) - +def test(code, aux_code): n_correct = 0 engine_id = None try: - engine_id, output = prolog.engine.create(code=code, timeout=1.0) + engine_id, output = prolog.engine.create(code=code+aux_code, timeout=1.0) if engine_id is not None and 'error' not in map(itemgetter(0), output): # Engine successfully created, and no syntax error in program. for query, answers in test_cases: diff --git a/prolog/problems/family_relations/sister_2/common.py b/prolog/problems/family_relations/sister_2/common.py index 1eb4a6a..90039e3 100644 --- a/prolog/problems/family_relations/sister_2/common.py +++ b/prolog/problems/family_relations/sister_2/common.py @@ -39,15 +39,11 @@ test_cases = [ [{'X': 'melanie'}]), ] -def test(program, solved_problems): - code = (program + '\n' + - server.problems.solutions_for_problems('prolog', solved_problems) + '\n' + - server.problems.load_facts('prolog', facts).facts) - +def test(code, aux_code): n_correct = 0 engine_id = None try: - engine_id, output = prolog.engine.create(code=code, timeout=1.0) + engine_id, output = prolog.engine.create(code=code+aux_code, timeout=1.0) if engine_id is not None and 'error' not in map(itemgetter(0), output): # Engine successfully created, and no syntax error in program. for query, answers in test_cases: diff --git a/prolog/problems/license_plates/checklicenseplate_3/common.py b/prolog/problems/license_plates/checklicenseplate_3/common.py index 0480258..6741e69 100644 --- a/prolog/problems/license_plates/checklicenseplate_3/common.py +++ b/prolog/problems/license_plates/checklicenseplate_3/common.py @@ -71,14 +71,11 @@ test_cases = [ {'E1': '-8/2', 'E2': '-1-3'}, {'E1': '8/2', 'E2': '1+3'}]), ] -def test(program, solved_problems): - code = (program + '\n' + - server.problems.solutions_for_problems('prolog', solved_problems)) - +def test(code, aux_code): n_correct = 0 engine_id = None try: - engine_id, output = prolog.engine.create(code=code, timeout=1.0) + engine_id, output = prolog.engine.create(code=code+aux_code, timeout=1.0) if engine_id is not None and 'error' not in map(itemgetter(0), output): # Engine successfully created, and no syntax error in program. for query, answers in test_cases: diff --git a/prolog/problems/license_plates/firstminus_2/common.py b/prolog/problems/license_plates/firstminus_2/common.py index 89fe3b0..8831fe2 100644 --- a/prolog/problems/license_plates/firstminus_2/common.py +++ b/prolog/problems/license_plates/firstminus_2/common.py @@ -22,14 +22,11 @@ test_cases = [ [{'X': '[5, 2, 3, 4]'}, {'X': '[-5, 2, 3, 4]'}]), ] -def test(program, solved_problems): - code = (program + '\n' + - server.problems.solutions_for_problems('prolog', solved_problems)) - +def test(code, aux_code): n_correct = 0 engine_id = None try: - engine_id, output = prolog.engine.create(code=code, timeout=1.0) + engine_id, output = prolog.engine.create(code=code+aux_code, timeout=1.0) if engine_id is not None and 'error' not in map(itemgetter(0), output): # Engine successfully created, and no syntax error in program. for query, answers in test_cases: diff --git a/prolog/problems/license_plates/genexp_2/common.py b/prolog/problems/license_plates/genexp_2/common.py index 4b097f2..6c3dd17 100644 --- a/prolog/problems/license_plates/genexp_2/common.py +++ b/prolog/problems/license_plates/genexp_2/common.py @@ -43,14 +43,11 @@ test_cases = [ {'X': '1+2/3'}, {'X': '1-2/3'}, {'X': '1*(2/3)'}, {'X': '1/(2/3)'}]), ] -def test(program, solved_problems): - code = (program + '\n' + - server.problems.solutions_for_problems('prolog', solved_problems)) - +def test(code, aux_code): n_correct = 0 engine_id = None try: - engine_id, output = prolog.engine.create(code=code, timeout=1.0) + engine_id, output = prolog.engine.create(code=code+aux_code, timeout=1.0) if engine_id is not None and 'error' not in map(itemgetter(0), output): # Engine successfully created, and no syntax error in program. for query, answers in test_cases: diff --git a/prolog/problems/license_plates/getdigits_2/common.py b/prolog/problems/license_plates/getdigits_2/common.py index 4ae42ff..6650b5a 100644 --- a/prolog/problems/license_plates/getdigits_2/common.py +++ b/prolog/problems/license_plates/getdigits_2/common.py @@ -27,14 +27,11 @@ test_cases = [ [{'X': '[3, 2, 4, 2]'}]), ] -def test(program, solved_problems): - code = (program + '\n' + - server.problems.solutions_for_problems('prolog', solved_problems)) - +def test(code, aux_code): n_correct = 0 engine_id = None try: - engine_id, output = prolog.engine.create(code=code, timeout=1.0) + engine_id, output = prolog.engine.create(code=code+aux_code, timeout=1.0) if engine_id is not None and 'error' not in map(itemgetter(0), output): # Engine successfully created, and no syntax error in program. for query, answers in test_cases: diff --git a/prolog/problems/license_plates/joindigits_2/common.py b/prolog/problems/license_plates/joindigits_2/common.py index 189f221..1c5dba8 100644 --- a/prolog/problems/license_plates/joindigits_2/common.py +++ b/prolog/problems/license_plates/joindigits_2/common.py @@ -26,14 +26,11 @@ test_cases = [ [{'X': '[2, 3, 1]'}, {'X': '[2, 31]'}, {'X': '[23, 1]'}, {'X': '[231]'}]), ] -def test(program, solved_problems): - code = (program + '\n' + - server.problems.solutions_for_problems('prolog', solved_problems)) - +def test(code, aux_code): n_correct = 0 engine_id = None try: - engine_id, output = prolog.engine.create(code=code, timeout=1.0) + engine_id, output = prolog.engine.create(code=code+aux_code, timeout=1.0) if engine_id is not None and 'error' not in map(itemgetter(0), output): # Engine successfully created, and no syntax error in program. for query, answers in test_cases: diff --git a/prolog/problems/lists/conc_3/common.py b/prolog/problems/lists/conc_3/common.py index 6efac47..ffd8f0f 100644 --- a/prolog/problems/lists/conc_3/common.py +++ b/prolog/problems/lists/conc_3/common.py @@ -26,14 +26,11 @@ test_cases = [ [{}]), ] -def test(program, solved_problems): - code = (program + '\n' + - server.problems.solutions_for_problems('prolog', solved_problems)) - +def test(code, aux_code): n_correct = 0 engine_id = None try: - engine_id, output = prolog.engine.create(code=code, timeout=1.0) + engine_id, output = prolog.engine.create(code=code+aux_code, timeout=1.0) if engine_id is not None and 'error' not in map(itemgetter(0), output): # Engine successfully created, and no syntax error in program. for query, answers in test_cases: diff --git a/prolog/problems/lists/count_3/common.py b/prolog/problems/lists/count_3/common.py index c257d66..7970240 100644 --- a/prolog/problems/lists/count_3/common.py +++ b/prolog/problems/lists/count_3/common.py @@ -30,14 +30,11 @@ test_cases = [ [{'X': '2'}]), ] -def test(program, solved_problems): - code = (program + '\n' + - server.problems.solutions_for_problems('prolog', solved_problems)) - +def test(code, aux_code): n_correct = 0 engine_id = None try: - engine_id, output = prolog.engine.create(code=code, timeout=1.0) + engine_id, output = prolog.engine.create(code=code+aux_code, timeout=1.0) if engine_id is not None and 'error' not in map(itemgetter(0), output): # Engine successfully created, and no syntax error in program. for query, answers in test_cases: diff --git a/prolog/problems/lists/del_3/common.py b/prolog/problems/lists/del_3/common.py index 5e00f4d..d0e4a29 100644 --- a/prolog/problems/lists/del_3/common.py +++ b/prolog/problems/lists/del_3/common.py @@ -24,14 +24,11 @@ test_cases = [ [{'X': 'g', 'Y': 'u', 'Z': 'f'}]), ] -def test(program, solved_problems): - code = (program + '\n' + - server.problems.solutions_for_problems('prolog', solved_problems)) - +def test(code, aux_code): n_correct = 0 engine_id = None try: - engine_id, output = prolog.engine.create(code=code, timeout=1.0) + engine_id, output = prolog.engine.create(code=code+aux_code, timeout=1.0) if engine_id is not None and 'error' not in map(itemgetter(0), output): # Engine successfully created, and no syntax error in program. for query, answers in test_cases: diff --git a/prolog/problems/lists/divide_3/common.py b/prolog/problems/lists/divide_3/common.py index 83a8a9e..1f14d2f 100644 --- a/prolog/problems/lists/divide_3/common.py +++ b/prolog/problems/lists/divide_3/common.py @@ -29,14 +29,11 @@ test_cases = [ [{'A': '[t, l, q, e, y, r]'}]), ] -def test(program, solved_problems): - code = (program + '\n' + - server.problems.solutions_for_problems('prolog', solved_problems)) - +def test(code, aux_code): n_correct = 0 engine_id = None try: - engine_id, output = prolog.engine.create(code=code, timeout=1.0) + engine_id, output = prolog.engine.create(code=code+aux_code, timeout=1.0) if engine_id is not None and 'error' not in map(itemgetter(0), output): # Engine successfully created, and no syntax error in program. for query, answers in test_cases: diff --git a/prolog/problems/lists/dup_2/common.py b/prolog/problems/lists/dup_2/common.py index cce5aef..66b9c64 100644 --- a/prolog/problems/lists/dup_2/common.py +++ b/prolog/problems/lists/dup_2/common.py @@ -26,14 +26,11 @@ test_cases = [ [{'X': '[k, f, f, g, a]'}]), ] -def test(program, solved_problems): - code = (program + '\n' + - server.problems.solutions_for_problems('prolog', solved_problems)) - +def test(code, aux_code): n_correct = 0 engine_id = None try: - engine_id, output = prolog.engine.create(code=code, timeout=1.0) + engine_id, output = prolog.engine.create(code=code+aux_code, timeout=1.0) if engine_id is not None and 'error' not in map(itemgetter(0), output): # Engine successfully created, and no syntax error in program. for query, answers in test_cases: diff --git a/prolog/problems/lists/evenlen_1_+_oddlen_1/common.py b/prolog/problems/lists/evenlen_1_+_oddlen_1/common.py index 13d9bca..b683cf7 100644 --- a/prolog/problems/lists/evenlen_1_+_oddlen_1/common.py +++ b/prolog/problems/lists/evenlen_1_+_oddlen_1/common.py @@ -32,14 +32,11 @@ test_cases = [ [{}]), ] -def test(program, solved_problems): - code = (program + '\n' + - server.problems.solutions_for_problems('prolog', solved_problems)) - +def test(code, aux_code): n_correct = 0 engine_id = None try: - engine_id, output = prolog.engine.create(code=code, timeout=1.0) + engine_id, output = prolog.engine.create(code=code+aux_code, timeout=1.0) if engine_id is not None and 'error' not in map(itemgetter(0), output): # Engine successfully created, and no syntax error in program. for query, answers in test_cases: diff --git a/prolog/problems/lists/insert_3/common.py b/prolog/problems/lists/insert_3/common.py index fe1fbb6..7d92726 100644 --- a/prolog/problems/lists/insert_3/common.py +++ b/prolog/problems/lists/insert_3/common.py @@ -26,14 +26,11 @@ test_cases = [ [{'A': 'c', 'X': 'i'}]), ] -def test(program, solved_problems): - code = (program + '\n' + - server.problems.solutions_for_problems('prolog', solved_problems)) - +def test(code, aux_code): n_correct = 0 engine_id = None try: - engine_id, output = prolog.engine.create(code=code, timeout=1.0) + engine_id, output = prolog.engine.create(code=code+aux_code, timeout=1.0) if engine_id is not None and 'error' not in map(itemgetter(0), output): # Engine successfully created, and no syntax error in program. for query, answers in test_cases: diff --git a/prolog/problems/lists/len_2/common.py b/prolog/problems/lists/len_2/common.py index 94a05c5..538db56 100644 --- a/prolog/problems/lists/len_2/common.py +++ b/prolog/problems/lists/len_2/common.py @@ -25,14 +25,11 @@ test_cases = [ [{'X': '0'}]), ] -def test(program, solved_problems): - code = (program + '\n' + - server.problems.solutions_for_problems('prolog', solved_problems)) - +def test(code, aux_code): n_correct = 0 engine_id = None try: - engine_id, output = prolog.engine.create(code=code, timeout=1.0) + engine_id, output = prolog.engine.create(code=code+aux_code, timeout=1.0) if engine_id is not None and 'error' not in map(itemgetter(0), output): # Engine successfully created, and no syntax error in program. for query, answers in test_cases: diff --git a/prolog/problems/lists/max_2/common.py b/prolog/problems/lists/max_2/common.py index 1f8769a..6fd9a4d 100644 --- a/prolog/problems/lists/max_2/common.py +++ b/prolog/problems/lists/max_2/common.py @@ -29,14 +29,11 @@ test_cases = [ [{'X': '-22'}]), ] -def test(program, solved_problems): - code = (program + '\n' + - server.problems.solutions_for_problems('prolog', solved_problems)) - +def test(code, aux_code): n_correct = 0 engine_id = None try: - engine_id, output = prolog.engine.create(code=code, timeout=1.0) + engine_id, output = prolog.engine.create(code=code+aux_code, timeout=1.0) if engine_id is not None and 'error' not in map(itemgetter(0), output): # Engine successfully created, and no syntax error in program. for query, answers in test_cases: diff --git a/prolog/problems/lists/memb_2/common.py b/prolog/problems/lists/memb_2/common.py index 30a6dfd..691471f 100644 --- a/prolog/problems/lists/memb_2/common.py +++ b/prolog/problems/lists/memb_2/common.py @@ -22,14 +22,11 @@ test_cases = [ [{'X': 'y'}, {'X': 'l'}, {'X': 'r'}, {'X': 'g'}, {'X': 'a'}]), ] -def test(program, solved_problems): - code = (program + '\n' + - server.problems.solutions_for_problems('prolog', solved_problems)) - +def test(code, aux_code): n_correct = 0 engine_id = None try: - engine_id, output = prolog.engine.create(code=code, timeout=1.0) + engine_id, output = prolog.engine.create(code=code+aux_code, timeout=1.0) if engine_id is not None and 'error' not in map(itemgetter(0), output): # Engine successfully created, and no syntax error in program. for query, answers in test_cases: diff --git a/prolog/problems/lists/min_2/common.py b/prolog/problems/lists/min_2/common.py index fc505b7..65ce979 100644 --- a/prolog/problems/lists/min_2/common.py +++ b/prolog/problems/lists/min_2/common.py @@ -29,14 +29,11 @@ test_cases = [ [{'X': '-22'}]), ] -def test(program, solved_problems): - code = (program + '\n' + - server.problems.solutions_for_problems('prolog', solved_problems)) - +def test(code, aux_code): n_correct = 0 engine_id = None try: - engine_id, output = prolog.engine.create(code=code, timeout=1.0) + engine_id, output = prolog.engine.create(code=code+aux_code, timeout=1.0) if engine_id is not None and 'error' not in map(itemgetter(0), output): # Engine successfully created, and no syntax error in program. for query, answers in test_cases: diff --git a/prolog/problems/lists/palindrome_1/common.py b/prolog/problems/lists/palindrome_1/common.py index 044f7be..7050c8c 100644 --- a/prolog/problems/lists/palindrome_1/common.py +++ b/prolog/problems/lists/palindrome_1/common.py @@ -30,14 +30,11 @@ test_cases = [ [{'X': 'b'}]), ] -def test(program, solved_problems): - code = (program + '\n' + - server.problems.solutions_for_problems('prolog', solved_problems)) - +def test(code, aux_code): n_correct = 0 engine_id = None try: - engine_id, output = prolog.engine.create(code=code, timeout=1.0) + engine_id, output = prolog.engine.create(code=code+aux_code, timeout=1.0) if engine_id is not None and 'error' not in map(itemgetter(0), output): # Engine successfully created, and no syntax error in program. for query, answers in test_cases: diff --git a/prolog/problems/lists/permute_2/common.py b/prolog/problems/lists/permute_2/common.py index 5ade0b5..162b018 100644 --- a/prolog/problems/lists/permute_2/common.py +++ b/prolog/problems/lists/permute_2/common.py @@ -28,14 +28,11 @@ test_cases = [ [{'X': '[[b, e, l], [b, l, e], [e, b, l], [e, l, b], [l, b, e], [l, e, b]]'}]), ] -def test(program, solved_problems): - code = (program + '\n' + - server.problems.solutions_for_problems('prolog', solved_problems)) - +def test(code, aux_code): n_correct = 0 engine_id = None try: - engine_id, output = prolog.engine.create(code=code, timeout=1.0) + engine_id, output = prolog.engine.create(code=code+aux_code, timeout=1.0) if engine_id is not None and 'error' not in map(itemgetter(0), output): # Engine successfully created, and no syntax error in program. for query, answers in test_cases: diff --git a/prolog/problems/lists/rev_2/common.py b/prolog/problems/lists/rev_2/common.py index 2a16e27..f5e4d9c 100644 --- a/prolog/problems/lists/rev_2/common.py +++ b/prolog/problems/lists/rev_2/common.py @@ -28,14 +28,11 @@ test_cases = [ [{'X': '[d, d, c, k, s]'}]), ] -def test(program, solved_problems): - code = (program + '\n' + - server.problems.solutions_for_problems('prolog', solved_problems)) - +def test(code, aux_code): n_correct = 0 engine_id = None try: - engine_id, output = prolog.engine.create(code=code, timeout=1.0) + engine_id, output = prolog.engine.create(code=code+aux_code, timeout=1.0) if engine_id is not None and 'error' not in map(itemgetter(0), output): # Engine successfully created, and no syntax error in program. for query, answers in test_cases: diff --git a/prolog/problems/lists/shiftleft_2/common.py b/prolog/problems/lists/shiftleft_2/common.py index 8de545b..6f3576b 100644 --- a/prolog/problems/lists/shiftleft_2/common.py +++ b/prolog/problems/lists/shiftleft_2/common.py @@ -26,14 +26,11 @@ test_cases = [ [{'A': 'x', 'B': 'y', 'C': 'l', 'D': 'c', 'E': 'h'}]), ] -def test(program, solved_problems): - code = (program + '\n' + - server.problems.solutions_for_problems('prolog', solved_problems)) - +def test(code, aux_code): n_correct = 0 engine_id = None try: - engine_id, output = prolog.engine.create(code=code, timeout=1.0) + engine_id, output = prolog.engine.create(code=code+aux_code, timeout=1.0) if engine_id is not None and 'error' not in map(itemgetter(0), output): # Engine successfully created, and no syntax error in program. for query, answers in test_cases: diff --git a/prolog/problems/lists/shiftright_2/common.py b/prolog/problems/lists/shiftright_2/common.py index 205daa9..3084f9f 100644 --- a/prolog/problems/lists/shiftright_2/common.py +++ b/prolog/problems/lists/shiftright_2/common.py @@ -26,14 +26,11 @@ test_cases = [ [{'A': 'x', 'B': 'y', 'C': 'c', 'D': 'h', 'E': 'l'}]), ] -def test(program, solved_problems): - code = (program + '\n' + - server.problems.solutions_for_problems('prolog', solved_problems)) - +def test(code, aux_code): n_correct = 0 engine_id = None try: - engine_id, output = prolog.engine.create(code=code, timeout=1.0) + engine_id, output = prolog.engine.create(code=code+aux_code, timeout=1.0) if engine_id is not None and 'error' not in map(itemgetter(0), output): # Engine successfully created, and no syntax error in program. for query, answers in test_cases: diff --git a/prolog/problems/lists/sublist_2/common.py b/prolog/problems/lists/sublist_2/common.py index bcf3315..e2d8964 100644 --- a/prolog/problems/lists/sublist_2/common.py +++ b/prolog/problems/lists/sublist_2/common.py @@ -29,14 +29,11 @@ test_cases = [ [{'X': '[[], [a], [a, b], [a, b, c], [b], [b, c], [c]]'}]), ] -def test(program, solved_problems): - code = (program + '\n' + - server.problems.solutions_for_problems('prolog', solved_problems)) - +def test(code, aux_code): n_correct = 0 engine_id = None try: - engine_id, output = prolog.engine.create(code=code, timeout=1.0) + engine_id, output = prolog.engine.create(code=code+aux_code, timeout=1.0) if engine_id is not None and 'error' not in map(itemgetter(0), output): # Engine successfully created, and no syntax error in program. for query, answers in test_cases: diff --git a/prolog/problems/lists/sum_2/common.py b/prolog/problems/lists/sum_2/common.py index a849601..568cfca 100644 --- a/prolog/problems/lists/sum_2/common.py +++ b/prolog/problems/lists/sum_2/common.py @@ -25,14 +25,11 @@ test_cases = [ [{'X': '4'}]), ] -def test(program, solved_problems): - code = (program + '\n' + - server.problems.solutions_for_problems('prolog', solved_problems)) - +def test(code, aux_code): n_correct = 0 engine_id = None try: - engine_id, output = prolog.engine.create(code=code, timeout=1.0) + engine_id, output = prolog.engine.create(code=code+aux_code, timeout=1.0) if engine_id is not None and 'error' not in map(itemgetter(0), output): # Engine successfully created, and no syntax error in program. for query, answers in test_cases: diff --git a/prolog/problems/sets/diff_3/common.py b/prolog/problems/sets/diff_3/common.py index e2706cb..bfa3ce6 100644 --- a/prolog/problems/sets/diff_3/common.py +++ b/prolog/problems/sets/diff_3/common.py @@ -38,14 +38,11 @@ test_cases = [ [{'X': '[]'}]), ] -def test(program, solved_problems): - code = (program + '\n' + - server.problems.solutions_for_problems('prolog', solved_problems)) - +def test(code, aux_code): n_correct = 0 engine_id = None try: - engine_id, output = prolog.engine.create(code=code, timeout=1.0) + engine_id, output = prolog.engine.create(code=code+aux_code, timeout=1.0) if engine_id is not None and 'error' not in map(itemgetter(0), output): # Engine successfully created, and no syntax error in program. for query, answers in test_cases: diff --git a/prolog/problems/sets/intersect_3/common.py b/prolog/problems/sets/intersect_3/common.py index ba90db7..55d2df5 100644 --- a/prolog/problems/sets/intersect_3/common.py +++ b/prolog/problems/sets/intersect_3/common.py @@ -37,14 +37,11 @@ test_cases = [ [{'X': '[1, 2, 4, 7, 9]'}]), ] -def test(program, solved_problems): - code = (program + '\n' + - server.problems.solutions_for_problems('prolog', solved_problems)) - +def test(code, aux_code): n_correct = 0 engine_id = None try: - engine_id, output = prolog.engine.create(code=code, timeout=1.0) + engine_id, output = prolog.engine.create(code=code+aux_code, timeout=1.0) if engine_id is not None and 'error' not in map(itemgetter(0), output): # Engine successfully created, and no syntax error in program. for query, answers in test_cases: diff --git a/prolog/problems/sets/is_subset_2/common.py b/prolog/problems/sets/is_subset_2/common.py index a64d0f8..0d78cd6 100644 --- a/prolog/problems/sets/is_subset_2/common.py +++ b/prolog/problems/sets/is_subset_2/common.py @@ -31,14 +31,11 @@ test_cases = [ [{}]), ] -def test(program, solved_problems): - code = (program + '\n' + - server.problems.solutions_for_problems('prolog', solved_problems)) - +def test(code, aux_code): n_correct = 0 engine_id = None try: - engine_id, output = prolog.engine.create(code=code, timeout=1.0) + engine_id, output = prolog.engine.create(code=code+aux_code, timeout=1.0) if engine_id is not None and 'error' not in map(itemgetter(0), output): # Engine successfully created, and no syntax error in program. for query, answers in test_cases: diff --git a/prolog/problems/sets/is_superset_2/common.py b/prolog/problems/sets/is_superset_2/common.py index abd3cfb..59f2fda 100644 --- a/prolog/problems/sets/is_superset_2/common.py +++ b/prolog/problems/sets/is_superset_2/common.py @@ -31,14 +31,11 @@ test_cases = [ [{}]), ] -def test(program, solved_problems): - code = (program + '\n' + - server.problems.solutions_for_problems('prolog', solved_problems)) - +def test(code, aux_code): n_correct = 0 engine_id = None try: - engine_id, output = prolog.engine.create(code=code, timeout=1.0) + engine_id, output = prolog.engine.create(code=code+aux_code, timeout=1.0) if engine_id is not None and 'error' not in map(itemgetter(0), output): # Engine successfully created, and no syntax error in program. for query, answers in test_cases: diff --git a/prolog/problems/sets/powerset_2/common.py b/prolog/problems/sets/powerset_2/common.py index 77801d7..e97603c 100644 --- a/prolog/problems/sets/powerset_2/common.py +++ b/prolog/problems/sets/powerset_2/common.py @@ -29,14 +29,11 @@ test_cases = [ [{'X': '[1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3]'}]), ] -def test(program, solved_problems): - code = (program + '\n' + - server.problems.solutions_for_problems('prolog', solved_problems)) - +def test(code, aux_code): n_correct = 0 engine_id = None try: - engine_id, output = prolog.engine.create(code=code, timeout=1.0) + engine_id, output = prolog.engine.create(code=code+aux_code, timeout=1.0) if engine_id is not None and 'error' not in map(itemgetter(0), output): # Engine successfully created, and no syntax error in program. for query, answers in test_cases: diff --git a/prolog/problems/sets/subset_2/common.py b/prolog/problems/sets/subset_2/common.py index 99d0799..f7d87d2 100644 --- a/prolog/problems/sets/subset_2/common.py +++ b/prolog/problems/sets/subset_2/common.py @@ -42,14 +42,11 @@ test_cases = [ {'X': '[2, 5, 6, 7]'}, {'X': '[0, 5, 6, 7]'}, {'X': '[0, 2, 5, 6, 7]'}]), ] -def test(program, solved_problems): - code = (program + '\n' + - server.problems.solutions_for_problems('prolog', solved_problems)) - +def test(code, aux_code): n_correct = 0 engine_id = None try: - engine_id, output = prolog.engine.create(code=code, timeout=1.0) + engine_id, output = prolog.engine.create(code=code+aux_code, timeout=1.0) if engine_id is not None and 'error' not in map(itemgetter(0), output): # Engine successfully created, and no syntax error in program. for query, answers in test_cases: diff --git a/prolog/problems/sets/union_3/common.py b/prolog/problems/sets/union_3/common.py index 774c8cf..ae24943 100644 --- a/prolog/problems/sets/union_3/common.py +++ b/prolog/problems/sets/union_3/common.py @@ -34,14 +34,11 @@ test_cases = [ [{'X': '[0, 1, 2, 3, 5, 6, 9]'}]), ] -def test(program, solved_problems): - code = (program + '\n' + - server.problems.solutions_for_problems('prolog', solved_problems)) - +def test(code, aux_code): n_correct = 0 engine_id = None try: - engine_id, output = prolog.engine.create(code=code, timeout=1.0) + engine_id, output = prolog.engine.create(code=code+aux_code, timeout=1.0) if engine_id is not None and 'error' not in map(itemgetter(0), output): # Engine successfully created, and no syntax error in program. for query, answers in test_cases: diff --git a/prolog/problems/sorting/is_sorted_1/common.py b/prolog/problems/sorting/is_sorted_1/common.py index 9213ddc..db5c3cc 100644 --- a/prolog/problems/sorting/is_sorted_1/common.py +++ b/prolog/problems/sorting/is_sorted_1/common.py @@ -34,14 +34,11 @@ test_cases = [ [{}]), ] -def test(program, solved_problems): - code = (program + '\n' + - server.problems.solutions_for_problems('prolog', solved_problems)) - +def test(code, aux_code): n_correct = 0 engine_id = None try: - engine_id, output = prolog.engine.create(code=code, timeout=1.0) + engine_id, output = prolog.engine.create(code=code+aux_code, timeout=1.0) if engine_id is not None and 'error' not in map(itemgetter(0), output): # Engine successfully created, and no syntax error in program. for query, answers in test_cases: diff --git a/prolog/problems/sorting/isort_2/common.py b/prolog/problems/sorting/isort_2/common.py index 6041b35..1669a4a 100644 --- a/prolog/problems/sorting/isort_2/common.py +++ b/prolog/problems/sorting/isort_2/common.py @@ -33,14 +33,11 @@ test_cases = [ [{'X': '[1, 2, 3, 4, 5]'}]), ] -def test(program, solved_problems): - code = (program + '\n' + - server.problems.solutions_for_problems('prolog', solved_problems)) - +def test(code, aux_code): n_correct = 0 engine_id = None try: - engine_id, output = prolog.engine.create(code=code, timeout=1.0) + engine_id, output = prolog.engine.create(code=code+aux_code, timeout=1.0) if engine_id is not None and 'error' not in map(itemgetter(0), output): # Engine successfully created, and no syntax error in program. for query, answers in test_cases: diff --git a/prolog/problems/sorting/pivoting_4/common.py b/prolog/problems/sorting/pivoting_4/common.py index 0e9afaa..3a3a906 100644 --- a/prolog/problems/sorting/pivoting_4/common.py +++ b/prolog/problems/sorting/pivoting_4/common.py @@ -30,14 +30,11 @@ test_cases = [ [{'A': '[1, 0, 3, -2]', 'B': '[22, 8, 5, 7]'}]), ] -def test(program, solved_problems): - code = (program + '\n' + - server.problems.solutions_for_problems('prolog', solved_problems)) - +def test(code, aux_code): n_correct = 0 engine_id = None try: - engine_id, output = prolog.engine.create(code=code, timeout=1.0) + engine_id, output = prolog.engine.create(code=code+aux_code, timeout=1.0) if engine_id is not None and 'error' not in map(itemgetter(0), output): # Engine successfully created, and no syntax error in program. for query, answers in test_cases: diff --git a/prolog/problems/sorting/quick_sort_2/common.py b/prolog/problems/sorting/quick_sort_2/common.py index b1449f1..d46c185 100644 --- a/prolog/problems/sorting/quick_sort_2/common.py +++ b/prolog/problems/sorting/quick_sort_2/common.py @@ -39,14 +39,11 @@ test_cases = [ [{'X': '[1, 2, 3, 4, 5]'}]), ] -def test(program, solved_problems): - code = (program + '\n' + - server.problems.solutions_for_problems('prolog', solved_problems)) - +def test(code, aux_code): n_correct = 0 engine_id = None try: - engine_id, output = prolog.engine.create(code=code, timeout=1.0) + engine_id, output = prolog.engine.create(code=code+aux_code, timeout=1.0) if engine_id is not None and 'error' not in map(itemgetter(0), output): # Engine successfully created, and no syntax error in program. for query, answers in test_cases: diff --git a/prolog/problems/sorting/sins_3/common.py b/prolog/problems/sorting/sins_3/common.py index 4c707ca..efc544e 100644 --- a/prolog/problems/sorting/sins_3/common.py +++ b/prolog/problems/sorting/sins_3/common.py @@ -31,14 +31,11 @@ test_cases = [ [{'X': '[2, 2, 3, 4, 5, 6, 7]'}]), ] -def test(program, solved_problems): - code = (program + '\n' + - server.problems.solutions_for_problems('prolog', solved_problems)) - +def test(code, aux_code): n_correct = 0 engine_id = None try: - engine_id, output = prolog.engine.create(code=code, timeout=1.0) + engine_id, output = prolog.engine.create(code=code+aux_code, timeout=1.0) if engine_id is not None and 'error' not in map(itemgetter(0), output): # Engine successfully created, and no syntax error in program. for query, answers in test_cases: diff --git a/prolog/problems/sorting/slowest_sort_ever_2/common.py b/prolog/problems/sorting/slowest_sort_ever_2/common.py index 72e25e2..5d0f566 100644 --- a/prolog/problems/sorting/slowest_sort_ever_2/common.py +++ b/prolog/problems/sorting/slowest_sort_ever_2/common.py @@ -40,14 +40,11 @@ test_cases = [ [{'X': '[2, 3, 4, 5]'}]), ] -def test(program, solved_problems): - code = (program + '\n' + - server.problems.solutions_for_problems('prolog', solved_problems)) - +def test(code, aux_code): n_correct = 0 engine_id = None try: - engine_id, output = prolog.engine.create(code=code, timeout=1.0) + engine_id, output = prolog.engine.create(code=code+aux_code, timeout=1.0) if engine_id is not None and 'error' not in map(itemgetter(0), output): # Engine successfully created, and no syntax error in program. for query, answers in test_cases: -- cgit v1.2.1