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.
: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 "2022-10-01" ... """ ... 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 |