satrak/1 függvény megírása. A
formális specifikációt lejjebb találja.
A függvény egyetlen paramétere a feladványt írja le (lásd a kis
házi feladatokban a puzzle_desc típust), visszatérési
értéke pedig a feladvány összes megoldásának a listája,
tetszőleges sorrendben. Egy megoldást a sátrak saját fájukhoz
viszonyított helyzetét leíró atomok listájaként kell megadni (lásd
a kis házi feladatokban a tent_dirs típust).
Megoldásának nem kell nagyon hatékonynak lennie, azaz
alkalmazhatja a generate-and-test módszert: állítsa elő az
összes lehetséges elrendezést, és gyűjtse össze közülük egy
listába azokat, amelyeket a 3. kis házi feladatban
megírt check_sol/2 függvény vagy annak egy változata
helyesnek talál. Programját csak nem túl nagy méretű
feladványokkal fogjuk tesztelni. De ha jó vagy jeles megajánlott
jegyet szeretne kapni a létraversenybe való bejutással, és jó
helyezést elérni a létraversenyen
(lásd: Egyéb tudnivalók), akkor
ügyeljen a hatékonyságra. Teljesítménymérésre
használhatja a
Benchee modult.
@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
satrak/1 függvény specifikációja
@spec satrak(pd::puzzle_desc) :: tss::[tent_dirs]
# tss a pd feladványleíróval megadott feladvány összes megoldásának listája, tetszőleges sorrendben
1 0 2 0 2 1 0 2 0 2
1 - * - - - 1 - * E - -
1 - - - - - 1 - - - - N
0 - - * - * 0 - - * - *
3 - - - - - 3 N - S - N
0 * - - - * 0 * - - - *
iex> Nhf1.satrak {[1, 1, 0, 3, 0], [1, 0, 2, 0, 2], [{1, 2}, {3, 3}, {3, 5}, {5, 1}, {5, 5}]}
[[:e, :s, :n, :n, :n]]
Egy másik feladvány és a megoldásai
-1 -2 -2 0 -2 -1 -2 -2 0 -2 -1 -2 -2 0 -2 -1 -2 -2 0 -2
-1 - * - - - -1 W * - - - -1 - * - - - -1 - * E - -
-1 - - - - - -1 - - - - N -1 - S - - N -1 - - - - N
-1 - - * - * -1 - - * - * -1 - - * - * -1 - - * - *
3 - - - - - 3 N - S - N 3 N - S - N 3 N - S - N
0 * - - - * 0 * - - - * 0 * - - - * 0 * - - - *
iex> Nhf1.satrak {[-1, -1, -1, 3, 0], [-1, -2, -2, 0, -2], [{1, 2}, {3, 3}, {3, 5}, {5, 1}, {5, 5}]}
[[:w, :s, :n, :n, :n], [:s, :s, :n, :n, :n], [:e, :s, :n, :n, :n]]
Nhf1 legyen, a @moduldoc
szakasz pedig legalább a szerző nevét, email-címét és a dátumot
tartalmazza.
defmodule Nhf1 do
@moduledoc """
Sátrak
@author "Egyetemi Hallgató <egy.hallg@dp.vik.bme.hu>"
@date "2023-10-14"
...
"""
...
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.14 (Erlang/OTP 25) rendszerrel teszteljük.
Khf1.to_internal/1 függvényt.
| DP Admin: dvacakrobotjaitoknakp@iit.bme.hu | Vissza az elejére / Back to the top |