2. kis házi feladat (Elixir): Szövegelő

1.0 változat — $LastChangedDate: 2021-10-12 22:33:00 +0200 (Tue, 12 Oct 2021) $
Kiadás: 2021-09-21
Beadási határidő a honlapon.

Adva van egy n sorból álló szövegfájl (n ≥ 0), amelyben a sorokat egy vagy több újsor-karakter (\n), a szavakat egy vagy több egyéb szóköz-jellegű (ún. whitespace) karakter választja el egymástól. Jelöljük a legtöbb szót tartalmazó sor szavainak számát m-mel (m > 0). Állítson elő egy olyan n*m méretű ún. szövegmátrixot, amelynek sorai a szövegfájl nem üres sorainak felelnek meg, a celláiban pedig a szövegfájl egyes szavai vannak, balra illesztve. Ha a szövegfájl valamely sorában m-nél kevesebb szó van, a mátrix adott sorában az üresen maradó jobb oldali cellákba a nil atomot rakja be.

A mátrix sorait listaként, a mátrixot sorok listájaként ábrázoljuk.

A szavak Elixir-sztringek, UTF-8 kódolással. A szavakban — a szóköz-jellegű karaktereket kivéve — bármilyen karakter lehet. A sorok elején és végén a szóköz-jellegű karaktereket, valamint az üres sorokat hagyja figyelmen kívül.

A szovegelo függvény

Írjon szovegelo néven olyan Elixir-függvényt, amelynek egyetlen paramétere a fájl elérési útja, eredménye pedig a szövegmátrix.

Fájl beolvasására a File.read!/1 függvény használatát javasoljuk.

Elixir-specifikációk

  @spec szovegelo(file :: String.t) :: rss:: [[String.t | nil]]
  # A file fájl tartalmából előállítja az rss szövegmátrixot.
  # A beolvasott szöveg és a szövegmátrix sorainak száma azonos.
  # A szövegmátrix oszlopainak száma megegyezik a leghosszabb
  # sor szavainak számával. A mátrix minden egyes cellájában a
  # fájl egy-egy szava vagy a nil atom van. A szavakat egy vagy
  # több szóköz-jellegű karakter választja el. A sorokba balról
  # jobbra haladva kerülnek be a szavak, a sorok végén üresen
  # maradó cellákba pedig a nil atom.
A modul neve 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 """
  Szövegelő
  @author "Egyetemi Hallgató <egy.hallg@dp.vik.bme.hu>"
  @date   "2021-10-01"
  ...
  """
  ...
  end
Minden publikus, azaz def-fel definiált függvény elé írjon rövid leírást is (a feladatkiírásból átvett specifikáción és fejkommenten kívül), például:
  @doc """
  A szovegelo függvény egy szövegfájl tartalmából mátrixot állít elő.
  """
A segédfüggvények legyenek lokálisak (defp), írjon hozzájuk típusspecifikációt és fejkommentként rövid leírást is, például:
  @spec hany_eves(x:: integer, t::String.t, z::any) :: n::integer 
  # Az árbóc x hosszából, a kikötő t nevéből és a csillagok z állásából
  # a kapitány n életkora úgy számítható ki, hogy vesszük... 
  

A beadott programokat Linux környezetben Elixir 1.7.3 (Erlang/OTP 21) rendszerrel teszteljük.

Kis példák

      iex> Khf2.szovegelo "khf2_s0.txt"
      []
      iex> Khf2.szovegelo "khf2_s1.txt"
      [["."]]
      iex> Khf2.szovegelo "khf2_s2.txt"
      [
        ["---", "%%%", "7", "(())", "$$$$", "***", nil, nil, nil, nil],
        ["===", "!!!!!", "\"\"\"\"", "'''", nil, nil, nil, nil, nil, nil],
        ["..", "??", "@@", "&&", "##", "<<", "...", ">>", "bla", "BlaBla"]
      ]
      iex> Khf2.szovegelo "khf2_s3.txt"
      [["itt", "a", "vége", ":", "fuss", "el", "véle!"]]
      iex> Khf2.szovegelo "khf2_s4.txt"
      [
        ["Lakott", "egy", "kisbaba", "Vácott,", nil],
        ["folyton", "a", "macskával", "játszott.", nil],
        ["Kapott", "egy", "plüsst:", nil, nil],
        ["\"Inkább", "ezt", "üsd!\"", nil, nil],
        ["Azt", "hitték,", "arra", "majd", "átszok..."]
      ]
A szövegfájlok: khf2_s0.txt, khf2_s1.txt, khf2_s2.txt, khf2_s3.txt, khf2_s4.txt

Segédanyagok

  1. Sablon a program megírásához: dp_khf2_sablon.ex
  2. Szkript a tesztesetek futtatásához: dp_khf2_teszt.exs
  3. Nagyobb szövegfáljok és eredménymátrixok a teszteléshez:

Tudnivalók a beadásról

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