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 ≤ n
0 < row ≤ n
, 0 < col ≤ n
0 < 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" ... """ ... endA 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 |