summaryrefslogtreecommitdiff
path: root/prolog/problems/dcg
diff options
context:
space:
mode:
Diffstat (limited to 'prolog/problems/dcg')
-rw-r--r--prolog/problems/dcg/ab_2/sl.py11
-rw-r--r--prolog/problems/dcg/common.py2
-rw-r--r--prolog/problems/dcg/digit_2/sl.py9
-rw-r--r--prolog/problems/dcg/expr_2/sl.py11
-rw-r--r--prolog/problems/dcg/expr_3/sl.py15
-rw-r--r--prolog/problems/dcg/flower_2/sl.py11
-rw-r--r--prolog/problems/dcg/number_2/sl.py10
-rw-r--r--prolog/problems/dcg/number_3/sl.py14
-rw-r--r--prolog/problems/dcg/number_proper_2/sl.py10
-rw-r--r--prolog/problems/dcg/paren_2/sl.py11
-rw-r--r--prolog/problems/dcg/paren_3/sl.py14
11 files changed, 118 insertions, 0 deletions
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 = '''\
+<p>Napiši DCG gramatiko z začetnim simbolom <code>ab</code> za jezik <code>a<sup>m</sup>b<sup>n</sup></code>, kjer sta m, n ≥ 0.</p>
+<p>Primeri veljavnih besed: <code>[]</code>, <code>a</code>, <code>aab</code>, <code>abbb</code>, <code>bbb</code>.</p>
+<p>Namig: za generiranje vedno daljših besed uporabi poizvedbo <code>conc(Word,_,_), ab(Word,[])</code>.</p>'''
+
+hint = {}
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/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 = '''\
+<p>Napiši gramatiko z začetnim simbolom <code>digit</code> za jezik definiran z naslednjo množico: {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}.</p>'''
+
+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 = '''\
+<p>Napiši gramatiko z začetnim simbolom <code>expr</code> za jezik aritmetičnih izrazov, ki vsebujejo števila (brez vodilnih ničel), vsoto in množenje. Podizrazi se lahko združujejo z oklepaji.</p>
+<p>Primeri veljavnih besed: <code>(1+2)*3</code>, <code>42*8*3</code>, <code>(2+1)*(3+4)</code>.</p>
+'''
+
+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 = '''\
+<p>Napiši gramatiko z začetnim simbolom <code>expr</code> 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.</p>
+<p>Primeri veljavnih besed: <code>(1+2)*3</code>, <code>42*8*3</code>, <code>(2+1)*(3+4)</code>.</p>
+<pre>
+ ?- expr(N, ['(',2,'+',1,')','*','(',3,'+',4,')'], []). % (2+1)*(3+4) = 21
+ N = 21.
+</pre>
+'''
+
+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 = '''\
+<p>Napiši gramatiko z začetnim simbolom <code>flower</code> za jezik <code>+<sup>n</sup>-<sup>m</sup>+<sup>n</sup></code>, kjer je m > 0 in n ≥ 0.</p>
+<p>Primeri veljavnih besed: <code>-</code>, <code>++-++</code>, <code>+---+</code>.</p>
+'''
+
+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 = '''\
+<p>Napiši gramatiko z začetnim simbolom <code>number</code> za jezik nenegativnih celih števil. Števila lahko vsebujejo vodilne ničle.</p>
+<p>Primeri veljavnih besed: <code>123</code>, <code>54</code>, <code>0122</code>, <code>0001221</code>, <code>0</code>.</p>'''
+
+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 = '''\
+<p>Napiši gramatiko z začetnim simbolom <code>number</code> za jezik nenegativnih celih števil. Števila lahko vsebujejo vodilne ničle. Pomen besede v tem jeziku je kar numerična vrednost predstavljenega števila.</p>
+<pre>
+ ?- number(N, [1,2,3,4], []).
+ N = 1234.
+</pre>
+'''
+
+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 = '''\
+<p>Napiši gramatiko z začetnim simbolom <code>number</code> za jezik nenegativnih celih števil. Števila <em>ne smejo</em> vsebovati vodilnih ničel.</p>
+<p>Primeri veljavnih besed: <code>123</code>, <code>54</code>, <code>122</code>, <code>1221</code>, <code>0</code>.</p>'''
+
+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 = '''\
+<p>Napiši gramatiko z začetnim simbolom <code>paren</code> za jezik pravilno gnezdenih zaporedij oklepajev. Terminale v tej gramatiki piši takole: <code>['(']</code> in <code>[')']</code>.</p>
+<p>Primeri veljavnih besed: <code>()</code>, <code>(())</code>, <code>()(())</code>, <code>(()())()</code>.</p>
+<p>Primeri neveljavnih besed: <code>)(</code>, <code>((()</code>, <code>))</code>.</p>'''
+
+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 = '''\
+<p>Napiši gramatiko z začetnim simbolom <code>paren</code> za jezik pravilno gnezdenih zaporedij oklepajev. Pomen besede v tem jeziku je največja globina gnezdenja oklepajev.</p>
+<pre>
+ ?- paren(D, ['(','(',')',')','(',')'], []). % (())()
+ D = 2.
+</pre>
+'''
+
+hint = {}