1. nagy házi feladat (Elixir): Sátrak

1.0 változat — $LastChangedDate: 2023-09-29 10:40:07 +0200 (Fri, 29 Sep 2023) $
Kiadás: 2023-09-29
Beadási határidő a honlapon.

A sátrak feladvány

Az 1. nagy házi feladat

Az első nagy házi feladat a 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.

Elixir-specifikációk

Típusok egy parcella koordinátáinak megadására

      @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

Típusok a feladvány leírására

      @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

Típusok a sátrak helyzetének leírására

      @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

A 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

Példák

Egy feladvány és a megoldása
      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]]

Egyéb követelmények

A modul neve 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.

Segédanyagok

  1. Sablon a program megírásához: nhf1_sablon.ex
  2. Tesztesetek: nhf1_teszt.zip
    A beolvasásukhoz használja az első kis házi feladatban megírt Khf1.to_internal/1 függvényt.
  3. Szkript a tesztesetek futtatásához: nhf1_teszt.exs

Dokumentációs követelmények

Egyéb tudnivalók

DP Admin: dvacakrobotjaitoknakp@iit.bme.hu Vissza az elejére / Back to the top