diff options
Diffstat (limited to 'prolog')
-rw-r--r-- | prolog/problems/clp_fd/gcd_3/sl.py | 14 | ||||
-rw-r--r-- | prolog/problems/clp_fd/magic_1/sl.py | 14 | ||||
-rw-r--r-- | prolog/problems/clp_fd/puzzle_abc_3/sl.py | 10 | ||||
-rw-r--r-- | prolog/problems/clp_fd/puzzle_beth_1/sl.py | 11 | ||||
-rw-r--r-- | prolog/problems/clp_fd/puzzle_momson_2/sl.py | 10 | ||||
-rw-r--r-- | prolog/problems/clp_fd/puzzle_ratio_2/sl.py | 10 | ||||
-rw-r--r-- | prolog/problems/clp_fd/tobase_3/sl.py | 17 | ||||
-rw-r--r-- | prolog/problems/dcg/ab_2/sl.py | 11 | ||||
-rw-r--r-- | prolog/problems/dcg/digit_2/sl.py | 9 | ||||
-rw-r--r-- | prolog/problems/dcg/expr_2/sl.py | 11 | ||||
-rw-r--r-- | prolog/problems/dcg/expr_3/sl.py | 15 | ||||
-rw-r--r-- | prolog/problems/dcg/flower_2/sl.py | 11 | ||||
-rw-r--r-- | prolog/problems/dcg/number_2/sl.py | 10 | ||||
-rw-r--r-- | prolog/problems/dcg/number_3/sl.py | 14 | ||||
-rw-r--r-- | prolog/problems/dcg/number_proper_2/sl.py | 10 | ||||
-rw-r--r-- | prolog/problems/dcg/paren_2/sl.py | 11 | ||||
-rw-r--r-- | prolog/problems/dcg/paren_3/sl.py | 14 |
17 files changed, 202 insertions, 0 deletions
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 = '''\ +<p><code>gcd(X, Y, GCD)</code>: <code>GCD</code> je največji skupni delitelj števil <code>X</code> in <code>Y</code>. Implementiraj ta predikat z uporabo omejitev.</p> +<p>Namig: poskusi najprej napisati predikat, ki poišče <em>vse</em> skupne delitelje dveh števil.</p> +<pre> + ?- gcd(36, 84, GCD). + GCD = 12. +</pre>''' + +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 = '''\ +<p><code>magic(S)</code>: seznam <code>S</code> predstavlja 3×3 magični kvadrat (<code>S</code> 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.</p> +<pre> + ?- magic(S). + S = [2, 7, 6, 9, 5, 1, 4, 3, 8] ; + … +</pre>''' + +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 = '''\ +<p>Oseba <code>A</code> je dve leti starejša od osebe <code>B</code>, ki je dvakrat starejša od osebe <code>C</code>. Skupaj so osebe A, B in C stare 27 let.</p> +<p>Napiši predikat <code>puzzle_abc(A, B, C)</code>, ki izračuna koliko so stare osebe A, B in C.</p>''' + +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 = '''\ +<p>Ko so Beti vprašali koliko je stara, je odgovorila takole "Čez dve leti bom dvakrat starejša kot sem bila pet let nazaj".</p> +<p>Napiši predikat <code>puzzle_beth(X)</code>, ki izračuna njeno trenutno starost <code>X</code>.</p> +''' + +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 = '''\ +<p>Mama in sin sta skupaj stara 66 let. Mamina leta so ravno sinova obrnjena leta (obrnjene so cifre). Koliko sta stara?</p> +<p>Napiši predikat <code>puzzle_momson(M, S)</code>, ki izračuna starost mame <code>M</code> in sina <code>S</code>.</p>''' + +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 = '''\ +<p>Trenutni starosti osebe <code>A</code> in osebe <code>B</code> sta v razmerju 5:4. Čez tri leta bo razmerje njunih let postalo 11:9.</p> +<p>Napiši predikat <code>puzzle_ratio(A, B)</code>, ki izračuna starost osebe <code>A</code> in osebe <code>B</code>.</p>''' + +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 = '''\ +<p><code>tobase(Number, B, X)</code>: število <code>Number</code> je v desetiškem sistemu. <code>X</code> predstavlja to število v sistemu z bazo <code>B</code>. Implementiraj predikat z uporabo omejitev. Omeji vrednost <code>B</code> na interval [2..10].</p> +<pre> + ?- tobase(42, 2, X). + X = 101010. + ?- tobase(N, 2, 101010). + N = 42. + ?- tobase(42, B, 101010). + B = 2. +</pre>''' + +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 = '''\ +<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/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 = {} |