A feladat kapcsolódik a nagy házi feladatokhoz (Elixir, Prolog). A megoldandó feladatot itt most önállóan, a nagy házi feladattól függetlenül ismertetjük.
satrak_mx
függvényÍrjon satrak_mx
néven olyan Elixir-függvényt,
amelynek három paramétere van (nm
, fs
és ss
), a visszatérési értéke pedig a sátrak
helyét leíró mss
mátrix vagy a nil
atom.
nm
paraméter egy {n, m}
pár,
amely a kert mint mátrix legutolsó elemének (azaz az utolsó
sor utolsó elemének) a koordinátáit adja meg. Ez úgy is
értelmezhető, hogy n
a mátrix sorainak,
m
pedig az oszlopainak a száma.
fs
paraméter a kertben álló f darab fa
helyét írja le {i, j}
alakú számpárokból
álló, f  hosszúságú listaként,
ahol i
, ill. j
az adott fa
sorának, ill. oszlopának sorszáma, amelyekre1 ≤ i ≤ n
és 1 ≤ j ≤ m
.
(*)
ss
paraméter minden fához megadja a hozzá
tartozó sátor relatív helyét egy olyan s 
hosszúságú listaként, amelynek elemei
a :W
, :N
, :E
vagy :S
atomok (az égtájak angol nevének
kezdőbetűire utalva: W
est –
nyugat, N
orth –
észak, E
ast –
kelet, S
outh – dél). Az ss
lista k-adik eleme adja meg, hogy
az fs
lista k-adik eleme által
megadott fához képest melyik oldalszomszédos parcellán van a
fához tartozó sátor. A fák helyét és a sátrak irányát megadó
listák különböző hosszúságúak lehetnek: ha f < s,
akkor a sátrak irányát megadó lista első f eleme
utáni elemeit el kell dobni; ha f > s, akkor az
azt jelenti, hogy az első s fa után következő
fákhoz nem tartozik sátor.
mss
visszatérési érték a sátrak helyét leíró,
n
sorból és m
oszlopból álló
mátrix, amelyben a sátrak helyén az 1
egész
szám áll, a többi helyen pedig a 0
.
A függvény visszatérési értéke a nil
atom legyen a
következő esetekben:
fs
listának van a mátrixon kívülre
mutató {i, j}
eleme, azaz nem teljesül rá a
fenti (*) feltétel (lásd
az alábbi példák közt
a (sikertelen 1)
tesztesetet);
{i, j}
pozíciója a mátrixon
kívül van, azaz nem teljesül rá a
fenti (*) feltétel (lásd
az alábbi példák közt
a (sikertelen 2)
tesztesetet);
(sikertelen 3)
tesztesetet).
Minden egyéb esetben a fentiekben leírt módon állítsa elő az eredménymátrixot.
@type parc_koord :: {i::integer, j::integer} # Egy parcella helyét megadó {i,j} pár ({sor,oszlop}) @type f_helyek :: [parc_koord] # A fák helyét leíró lista @type irany :: :N | :E | :S | :W # Északra, délre, keletre, nyugatra @type s_iranyok :: [irany] # A fákhoz tartozó sátrak irányát leíró lista @type s_matrix :: [[ 0 | 1 ]] | nil # Sátrak mátrixa: 1 = van, 0 = nincs @spec satrak_mx(nm::parc_koord, fs::f_helyek, ss::s_iranyok) :: mss::s_matrixA modul neve
Khf3
legyen, a @moduldoc
szakasz pedig legalább a szerző nevét, email-címét és a dátumot
tartalmazza.
defmodule Khf3 do @moduledoc """ Sátrak mátrixa @author "Egyetemi Hallgató <egy.hallg@dp.vik.bme.hu>" @date "2021-10-09" ... """ ... endMinden publikus, azaz
def
-fel definiált függvény elé
írjon rövid leírást is (a feladatkiírásból átvett specifikáción és
fejkommenten kívül), például:
@doc """ A satrak_mx függvény a sátrak helyét leíró, 0|1 értékű mátrixot állít elő. """A segédfüggvények legyenek lokálisak (
defp
), írjon
hozzájuk típusspecifikációt és fejkommentként rövid leírást is, például:
@spec hany_eves(x:: integer, t::String.t, z::any) :: n::integer # Az árbóc x hosszából, a kikötő t nevéből és a csillagok z állásából # a kapitány n életkora úgy számítható ki, hogy vesszük...
A beadott programokat Linux környezetben Elixir 1.7.3 (Erlang/OTP 21) rendszerrel teszteljük.
iex> Khf3.satrak_mx({2,3}, [{2,2}], [:N]) [[0,1,0],[0,0,0]] iex> Khf3.satrak_mx({2,3}, [{2,2}], [:E]) [[0,0,0],[0,0,1]] iex> Khf3.satrak_mx({2,3}, [{3,2}], [:N]) nil# (sikertelen 1)
iex> Khf3.satrak_mx({2,3}, [{2,2}], [:S]) nil# (sikertelen 2)
iex> Khf3.satrak_mx({2,3}, [{1,1},{2,2}], [:E,:N]) nil# (sikertelen 3)
iex> Khf3.satrak_mx({4,5}, [{2,4},{1,5},{3,2}], [:S,:W,:W]) [[0, 0, 0, 1, 0], [0, 0, 0, 0, 0], [1, 0, 0, 1, 0], [0, 0, 0, 0, 0]] iex> Khf3.satrak_mx({6,6}, [{1,3},{1,5},{3,1},{4,6},{5,1},{5,4},{6,5}], [:S,:E,:N,:W,:E,:S,:E]) [[0, 0, 0, 0, 0, 1], [1, 0, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 1, 0], [0, 1, 0, 0, 0, 0], [0, 0, 0, 1, 0, 1]]
DP Admin: dvacakrobotjaitoknakp@iit.bme.hu | Vissza az elejére / Back to the top |