A kis házi feladat a nagy házi feladathoz kapcsolódik, ezért először ezt ismertetjük.
A 4. kis házi feladatban egy tekercsekk(M, Mx)
predikátumot kell megírni:
% tekercsekk(M, Mx): Mx egy listák listájaként ábrázolt, 0 és M % közötti egészekből álló mátrix. Az eljárás akkor és csak akkor fut le % sikeresen, ha Mx egy számtekercs feladvány helyes megoldását írja le.
A pontos specifikációt lejjebb találja. Példák:
| ?- tekercsekk(2, [[0,1,2], [2,0,1], [1,2,0]]). yes % helyes megoldás
| ?- tekercsekk(2, [[1,2,0], [0,1,2], [2,0,1]]). no % A tekercsvonal nem helyes
| ?- tekercsekk(2, [[1,0,2], [0,2,1], [1,0,2]]). no % Az oszlopok nem helyesek
| ?- tekercsekk(2, [[1,2,0], [0,0,1], [2,1,2]]). no % A 2-3. sor nem helyes
| ?- tekercsekk(2, [[0,2,1], [0,1,0], [2,1,2]]). no % Az 1-2. oszlop, a 2-3. sor, és a tekercs sem helyes
A tekercsekk(M, Mx)
eljárás specifikációja:
Mx
egy négyzetes mátrix (amelynek N
sora
és N
oszlopa van), M
pedig egy természetes
szám, melyre teljesül, hogy N >= M
. Az Mx
mátrix minden eleme egy 0
és M
közé eső
természetes szám (ezek a feltételek minden tesztesetre garantáltan
teljesülnek).
Jelöljük Z
-vel az N-M
(nem
negatív) különbséget. Az eljárás fusson le sikeresen, ha az alábbi két
feltétel teljesül, egyébként hiúsuljon meg:
Mx
minden sorában és minden oszlopában a pozitív
számok pontosan egyszer, a nullák pontosan
Z
-szer fordulnak elő.Mx
mátrix elemeit a tekercsvonal
sorrendjében soroljuk fel, majd elhagyjuk ebből a felsorolásból
a 0
értékeket, akkor egy olyan felsorolást kapunk,
amelyben az 1,2,
...,M
sorozat
pontosan N
-szer ismétlődik.
% :- type ciklus == integer. % :- type matrix == list(sor). % :- type sor == list(integer). % :- pred tekercsekk(ciklus::in, matrix::in).
| ?- tekercsekk(2, [[0,0,1,2],[0,1,2,0],[2,0,0,0],[1,2,0,1]]). no
| ?- tekercsekk(2, [[0,0,1,2],[0,2,1,0],[0,0,2,1],[1,0,0,2]]). no
| ?- tekercsekk(2, [[1,0,2,0],[0,0,0,0],[0,2,1,1],[2,1,0,2]]). no
| ?- tekercsekk(2, [[1,0,0,2],[2,0,1,0],[0,2,0,1],[0,1,2,0]]). yes
| ?- tekercsekk(2, [[1,0,0,2],[0,1,2,0],[0,2,1,0],[2,0,0,1]]). yes
| ?- tekercsekk(2, [[1,2,0,0],[2,1,0,0],[0,0,2,1],[0,0,1,2]]). yes
DP Admin: dvacakrobotjaitoknakp@iit.bme.hu | Vissza az elejére / Back to the top |