A kis házi feladat a nagy házi feladathoz kapcsolódik, ezért először ezt ismertetjük.
Az első függvény paramétere egy szöveges feladványleíró-lista, az eredménye pedig a feladványt leíró Elixir adatstruktúra. A második függvénynek az utóbbi a paramétere, az eredménye pedig az igaz vagy a hamis logikai érték, attól függően, a feladványleíró megfelel-e a követelményeknek.
A szöveges feladványleíró-lista egy sztringekből álló, legalább
kételemű lista, melynek első eleme a tábla méretét
(n), második eleme a ciklus hosszát (m),
esetleges további elemei pedig a kitöltött mezők koordinátáját
(row, col) és értékét (val)
adják meg. Feltételezheti, hogy a sztringekben csak egész számok
vannak, n és m mindig meg van adva,
továbbá ha vannak kitöltött mezők, akkor
a row, col, val hármasok
elemei mindig meg vannak adva. A sztringekben az egész számok
között legalább egy szóköz van, előttük vagy utánuk 0 vagy több
szóköz lehet.
Például az 1. ábrán látható feladványt így írjuk le:
["6", "3", "1 5 2", "2 2 1", "4 6 1"]Az első függvény eredménye, valamint a második függvény paramétere ebben az esetben ez lesz:
{6, 3, [{{1,5},2},{{2,2},1},{{4,6},1}]}
A második függvény eredménye az adott esetben true
lesz, mert a feladványleíró megfelel az előírásoknak. Ezeket most
össze is foglaljuk:
0 < n, 0 < m ≤ n0 < row ≤ n, 0 < col ≤ n0 < val ≤ m
@type size() :: integer() # tábla mérete (0 < n)
@type cycle() :: integer() # ciklus hossza (0 < m <= n)
@type value() :: integer() # mező értéke (0 < v <= m)
@type row() :: integer() # sor száma (1-től n-ig)
@type col() :: integer() # oszlop száma (1-től n-ig)
@type field() :: {row(), col()} # mező koordinátái
@type field_value() :: {field(), value()} # mező és értéke
@type puzzle_desc() :: {size(), cycle(), [field_value()]} # feladvány
@type list_desc() :: [String.t()] # 1. elem: méret, 2. elem: ciklushossz, többi elem esetleg: mezők és értékük
to_internal/1 és a correct?/1 függvények specifikációja
@spec to_internal(ps::list_desc()) :: pd::puzzle_desc()
# A ps szöveges feladványleíró-listának megfelelő adatstruktúra pd
@spec correct?(pd::puzzle_desc()) :: b::boolean()
# b igaz, ha a pd feladványleíró helyes, egyébként hamis
iex> Khf1.to_internal(["6", "3", "1 5 2", "2 2 1", "4 6 1"])
{6, 3, [{{1,5}, 2},{{2,2}, 1},{{4,6}, 1}]}
iex> Khf1.correct?({6, 3, [{{1,5}, 2},{{2,2}, 1},{{4,6}, 1}]})
true
iex> Khf1.to_internal(["3", "2", "1 3 2"])
{3, 2, [{{1,3}, 2}]}
iex> Khf1.correct?({3, 2, [{{1,3}, 2}]})
true
iex> Khf1.to_internal(["3", "2"])
{3, 2, []}
iex> Khf1.correct?({3, 2, []})
true
iex> Khf1.to_internal(["2", "2", "1 3 2"])
{2, 2, [{{1,3}, 2}]}
iex> Khf1.correct?({2, 2, [{{1,3}, 2}]})
false
iex> Khf1.to_internal(["3", "2", "1 3 3"])
{3, 2, [{{1,3}, 3}]}
iex> Khf1.correct?({3, 2, [{{1,3}, 3}]})
false
Khf1 legyen, a @moduldoc
szakasz pedig legalább a szerző nevét, email-címét és a dátumot
tartalmazza.
defmodule Khf1 do
@moduledoc """
Számtekercs-leíró konvertálása és ellenőrzése
@author "Egyetemi Hallgató <egy.hallg@dp.vik.bme.hu>"
@date "2024-09-23"
...
"""
...
end
A segédfüggvények legyenek lokálisak (defp), írjon
hozzájuk típusspecifikációt és fejkommentként tömör leírást is.
A beadott programokat Linux környezetben Elixir 1.17 (Erlang/OTP 27) rendszerrel teszteljük.
| DP Admin: dvacakrobotjaitoknakp@iit.bme.hu | Vissza az elejére / Back to the top |