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_internal/1
függvény
megírása. A formális specifikációt lejjebb találja.
A megírandó függvény egy sátrak feladványt tartalmazó fájl elérési útját kapja meg paraméterként, és ebből állítja elő a feladványt leíró Elixir adatstruktúrát.
A fájlban sorok vannak, a sorok szavakból állnak. A sorokat újsor-jelek választják el egymástól. Megengedett, hogy a fájlban üres sorok, azaz csak szóköz-jellegű (whitespace) karaktereket tartalmazó — esetleg üres — jelsorozatok legyenek, ezeket figyelmen kívül kell hagyni.
Egy nemüres sorban a szavakat egy vagy több szóköz-jellegű karakter választja el egymástól, továbbá a sorok elején és végén is lehetnek szóköz-jellegű karakterek. A szavak egész számok, fákat jelölő csillagok (*) és üres parcellákat jelölő kötőjelek (-) lehetnek. Az egész számok egy opcionális negatív előjellel (-) kezdődnek, amit egy nemüres (decimális) számjegysorozat követ. (Negatív számokat fogunk használni annak jelzésére, hogy egy sorban vagy oszlopban nem ismert a sátrak száma.)
A fájl első nemüres sora a sátrak oszloponként elvárt számát tartalmazza. A fájl többi sorának első szava a sátrak soronként elvárt számát adja meg, a többi szó pedig az egyes parcellák tartalmát (fa vagy üres parcella).
A fájl sorainak száma így eggyel több, mint a kempinget leíró mátrix sorainak száma, míg a fájl első nemüres sorában levő szavak száma eggyel több, mint a mátrix oszlopszáma.
A mátrix helyességét nem kell ellenőriznie, azaz feltételezheti, hogy a mátrix minden sorában — az első kivételével, ahol eggyel kevesebb szó van — azonos a szavak száma, a sátrak oszloponkénti, ill. soronkénti számát megadó szavak (esetleg negatív) egész számok, a mátrix többi szava vagy *, vagy -, és a szavakat egy vagy több szóköz-jellegű karakter választja el.
A függvény visszatérési értéke egy hármas: a sátrak soronkénti számát tartalmazó lista, a sátrak oszloponkénti számát tartalmazó lista, valamint a fákat tartalmazó parcellák koordinátáit tartalmazó lista (a koordináták lexikálisan növekvő sorrendjében).
A fájl beolvasására a File.read!/1
függvény, a
beolvasott adatok feldolgozására a String
modul
függvényeinek használatát javasoljuk.
@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
to_internal/1
függvény specifikációja@spec to_internal(file::String.t) :: pd::puzzle_desc # A file fájlban szövegesen ábrázolt feladvány leírója pd
Khf1.to_internal/1
khf1_f1.txt 1 0 2 0 2 1 - * - - - 1 - - - - - 0 - - * - * 3 - - - - - 0 * - - - *
iex> Khf1.to_internal "khf1_f1.txt" {[1, 1, 0, 3, 0], [1, 0, 2, 0, 2], [{1, 2}, {3, 3}, {3, 5}, {5, 1}, {5, 5}]}
khf1_f2.txt 1 0 -2 0 2 1 - * - - - 1 - - - - - -1 - - * - * 3 - - - - - 0 * - - - *
iex> Khf1.to_internal "khf1_f2.txt" {[1, 1, -1, 3, 0], [1, 0, -2, 0, 2], [{1, 2}, {3, 3}, {3, 5}, {5, 1}, {5, 5}]}
Khf1
legyen, a @moduldoc
szakasz pedig legalább a szerző nevét, email-címét és a dátumot
tartalmazza.
defmodule Khf1 do @moduledoc """ Kemping @author "Egyetemi Hallgató <egy.hallg@dp.vik.bme.hu>" @date "2022-09-24" ... """ ... 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 |