A kis házi feladat a nagy házi feladathoz kapcsolódik, ezért először ezt ismertetjük.
A függvény paramétere egy szöveges feladványleíró-lista, az eredménye pedig a kiterített számtekercs, azaz egy olyan lista, amely a bal felső mezőtől kezdve a tekeredő vonal sorrendjében tartalmazza a koordináta–érték párokat.
A szöveges feladványleíró-lista egy sztringekből álló, legalább
kételemű lista, melynek első eleme a tábla méretét
(n), második eleme a ciklus hosszát (m),
esetleges további elemei pedig a kitöltött mezők koordinátáját
(row, col) és értékét (val)
adják meg. Feltételezheti, hogy a sztringekben csak egész számok
vannak, n és m mindig meg van adva,
továbbá ha vannak kitöltött mezők, akkor
a row, col, val hármasok
elemei mindig meg vannak adva. A sztringekben az egész számok
között legalább egy szóköz van, előttük vagy utánuk 0 vagy több
szóköz lehet.
Például az 1. ábrán látható feladványt így írjuk le:
["6", "3", "1 5 2", "2 2 1", "4 6 1"]A függvény eredménye ebben az esetben ez lesz:
[{{1, 1}, nil}, {{1, 2}, nil}, {{1, 3}, nil}, {{1, 4}, nil}, {{1, 5}, 2}, {{1, 6}, nil},
{{2, 6}, nil}, {{3, 6}, nil}, {{4, 6}, 1}, {{5, 6}, nil}, {{6, 6}, nil},
{{6, 5}, nil}, {{6, 4}, nil}, {{6, 3}, nil}, {{6, 2}, nil}, {{6, 1}, nil},
{{5, 1}, nil}, {{4, 1}, nil}, {{3, 1}, nil}, {{2, 1}, nil},
{{2, 2}, 1}, {{2, 3}, nil}, {{2, 4}, nil}, {{2, 5}, nil},
{{3, 5}, nil}, {{4, 5}, nil}, {{5, 5}, nil},
{{5, 4}, nil}, {{5, 3}, nil}, {{5, 2}, nil},
{{4, 2}, nil}, {{3, 2}, nil},
{{3, 3}, nil}, {{3, 4}, nil},
{{4, 4}, nil}, {{4, 3}, nil}]
@type size() :: integer() # tábla mérete (0 < n)
@type cycle() :: integer() # ciklus hossza (0 < m <= n)
@type value() :: integer() # mező értéke (0 < v <= m)
@type row() :: integer() # sor száma (1-től n-ig)
@type col() :: integer() # oszlop száma (1-től n-ig)
@type field() :: {row(), col()} # mező koordinátái
@type field_value() :: {field(), value()} # mező és értéke
@type field_opt_value() :: {field(), value() | nil} # mező és opcionális értéke
@type list_desc() :: [String.t()] # 1. elem: méret, 2. elem: ciklushossz, többi elem esetleg: mezők és értékük
helix/1 függvény specifikációja
@spec helix(ps::list_desc()) :: gs::[field_opt_value()]
# A ps szöveges feladványleíró-lista szerinti számtekercs kiterített listája gs
iex> Khf2.helix([" 2", "1 ", " 2 2 1 "])
[{{1, 1}, nil}, {{1, 2}, nil}, {{2, 2}, 1}, {{2, 1}, nil}]
iex> Khf2.helix([" 3 ", " 2 "])
[{{1, 1}, nil}, {{1, 2}, nil}, {{1, 3}, nil}, {{2, 3}, nil}, {{3, 3}, nil}, {{3, 2}, nil}, {{3, 1}, nil}, {{2, 1}, nil}, {{2, 2}, nil}]
iex> Khf2.helix(["3 ", " 2", "1 1 1", "1 3 2", "2 2 1", "3 1 2", " 3 3 1 "])
[{{1, 1}, 1}, {{1, 2}, nil}, {{1, 3}, 2}, {{2, 3}, nil}, {{3, 3}, 1}, {{3, 2}, nil}, {{3, 1}, 2}, {{2, 1}, nil}, {{2, 2}, 1}]
iex> Khf2.helix(["3", "2", "3 3 1", "1 3 2", "3 1 2", "2 2 1"])
[{{1, 1}, nil}, {{1, 2}, nil}, {{1, 3}, 2}, {{2, 3}, nil}, {{3, 3}, 1}, {{3, 2}, nil}, {{3, 1}, 2}, {{2, 1}, nil}, {{2, 2}, 1}]
iex> Khf2.helix([" 4", " 2", " 1 3 1", " 2 3 2"])
[{{1, 1}, nil}, {{1, 2}, nil}, {{1, 3}, 1}, {{1, 4}, nil},
{{2, 4}, nil}, {{3, 4}, nil}, {{4, 4}, nil},
{{4, 3}, nil}, {{4, 2}, nil}, {{4, 1}, nil},
{{3, 1}, nil}, {{2, 1}, nil},
{{2, 2}, nil}, {{2, 3}, 2},
{{3, 3}, nil}, {{3, 2}, nil}]
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ámtekercs-leíró konvertálása és ellenőrzése
@author "Egyetemi Hallgató <egy.hallg@edu.bme.hu>"
@date "2025-10-xx"
"""
...
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.18 (Erlang/OTP 28) rendszerrel teszteljük.
| DP Admin: dvacakrobotjaitoknakpadm@dp.iit.bme.hu | Vissza az elejére / Back to the top |