A kis házi feladat a nagy házi feladathoz (a sátrak feladványhoz) kapcsolódik, ezért először ezt ismertetjük pár mondatban.
to_external/3
függvény
megírása. A függvénynek nem feladata a megoldás
helyességének ellenőrzése. A formális specifikációt lejjebb
találja.
Khf1.to_internal/1
függvény visszatérési
értékével azonos felépítésű.:n
(észak), :e
(kelet), :s
(dél), :w
(nyugat).khf2_r0.txt
, khf2_r1.txt
és khf2_r2.txt
).:ok
atom.A fájlban sorok vannak, a nemüres sorok szavakból állnak. A sorokat
legalább egy újsor-jel, a szavakat legalább egy szóköz
karakter választja el egymástól. A szavak (esetleg negatív) egész
számok, sátrakat jelölő N
, E
, S
vagy W
betűk, fákat jelölő
csillagok (*
), valamint üres parcellákat jelölő kötőjelek (-
)
lehetnek.
A fájl első nemüres sora a sátrak oszloponkénti számát, további sorainak első szava a sátrak soronkénti számát adja meg, az összes többi szó pedig az egyes parcellák tartalmát (fa, sátor vagy üres) írja le. Tetszőleges értékű negatív számokat használunk annak jelzésére, hogy egy sorban vagy oszlopban nem ismert a sátrak száma.
:n
, :e
, :s
, :w
)
vannak;@type row :: integer # sor száma (1-től n-ig) @type col :: integer # oszlop száma (1-től m-ig) @type field :: {row, col} # egy parcella koordinátái
@type tents_count_rows :: [integer] # a sátrak száma soronként @type tents_count_cols :: [integer] # a sátrak száma oszloponként @type trees :: [field] # a fákat tartalmazó parcellák koordinátái lexikálisan rendezve @type puzzle_desc :: {tents_count_rows, tents_count_cols, trees} # a feladványleíró hármas
@type dir :: :n | :e | :s | :w # a sátorpozíciók iránya: north, east, south, west @type tent_dirs :: [dir] # a sátorpozíciók irányának listája a fákhoz képest
to_external/3
függvény specifikációja@spec to_external(pd::puzzle_desc, ds::tent_dirs, file::String.t) :: :ok # A pd = {rs, cs, ts} feladványleíró és a ds sátorirány-lista alapján # a feladvány szöveges ábrázolását írja ki a file fájlba, ahol # rs a sátrak soronkénti számának a listája, # cs a sátrak oszloponkénti számának a listája, # ts a fákat tartalmazó parcellák koordinátájának lexikálisan rendezett listája
iex> puzzle0 = {[-1, 0, 0, -3, 0], [0, 0, -2, 0, 0], []} {[-1, 0, 0, -3, 0], [0, 0, -2, 0, 0], []} iex> Khf2.to_external puzzle0, [], "khf2_r0.txt" :ok
iex> puzzle1 = {[1, 1, 0, 3, 0], [1, 0, 2, 0, 2], [{1, 2}, {3, 3}, {3, 5}, {5, 1}, {5, 5}]} {[1, 1, 0, 3, 0], [1, 0, 2, 0, 2], [{1, 2}, {3, 3}, {3, 5}, {5, 1}, {5, 5}]} iex> Khf2.to_external puzzle1, [:e,:s,:n,:n,:n], "khf2_r1.txt" :ok
iex> puzzle2 = {[1, 1, -1, 3, 0], [1, 0, -2, 0, 2], [{1, 2}, {3, 3}, {3, 5}, {5, 1}, {5, 5}]} {[1, 1, -1, 3, 0], [1, 0, -2, 0, 2], [{1, 2}, {3, 3}, {3, 5}, {5, 1}, {5, 5}]} iex> Khf2.to_external puzzle2, [:e,:s,:n,:n,:w], "khf2_r2.txt" :ok
iex> puzzle3 = {[2], [0, 1, -1, 0, -1], [{1, 1}, {1, 4}]} {[2], [0, 1, -1, 0, -1], [{1, 1}, {1, 4}]} iex> Khf2.to_external puzzle3, [:e,:e], "khf2_r3.txt" :ok
iex> puzzle4 = {[0, -1, 0, 1, 1, 0], [3], [{1, 1}, {3, 1}, {6, 1}]} {[0, -1, 0, 1, 1, 0], [3], [{1, 1}, {3, 1}, {6, 1}]} iex> Khf2.to_external puzzle4, [:s,:s,:n], "khf2_r4.txt" :ok
khf2_r0.txt khf2_r1.txt khf2_r2.txt khf2_r3.txt khf2_r4.txt 0 0 -2 0 0 1 0 2 0 2 1 0 -2 0 2 0 1 -1 0 -1 3 -1 - - - - - 1 - * E - - 1 - * E - - 2 * E - * E 0 * 0 - - - - - 1 - - - - N 1 - - - - N -1 S 0 - - - - - 0 - - * - * -1 - - * - * 0 * -3 - - - - - 3 N - S - N 3 N - S - - 1 S 0 - - - - - 0 * - - - * 0 * - - W * 1 N 0 *
Khf2
legyen, a @moduldoc
szakasz pedig legalább a szerző nevét, email-címét és a dátumot
tartalmazza.
defmodule Khf2 do @moduledoc """ Kemping térképe @author "Egyetemi Hallgató <egy.hallg@dp.vik.bme.hu>" @date "2023-10-30" ... """ ... 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.14 (Erlang/OTP 25) rendszerrel teszteljük.
DP Admin: dvacakrobotjaitoknakp@iit.bme.hu | Vissza az elejére / Back to the top |