A kis házi feladat a nagy házi feladathoz kapcsolódik, ezért először ezt ismertetjük.
Ez a kis házi feladat, bár a specifikációja részben eltér a nagy házi feladatétól, segíti a felkészülést az utóbbi megoldására, esetleg közvetlenül alkalmazható is a megoldásban.
A függvénynek két paramétere van. Az első egy hármas, ennek első
tagja n, a számsorozatok száma az előállítandó
listákban. Második tagja m, az ismétlődő számsorozat hossza,
harmadik tagja pedig len, az előállítandó listák hossza. A
második paraméter olyan {ix,val} párok (esetleg üres)
listája, amelyek azt írják elő, hogy a listák ix indexű
helyén val értékű elemnek kell lennie. A paraméterekre
vonatkozó korlátok: 1 < n, 1 ≤
m, n*m ≤ len, 1 ≤ ix ≤
len, 0 ≤ val ≤ m.
Figyelem: az Elixir a listát 0-tól, a feladvány 1-től
indexeli.
A függvény eredménye az összes olyan len hosszú lista listája,
melyekben
m-ig tartó számsorozat – ebben a sorrendben,
esetleg közbeszúrt 0-kal – n-szer ismétlődik,len-n*m számú helyen 0-k vannak,Feltételezheti, hogy a bemenő paraméterek szintaktikailag, szemantikailag helyesek.
Például ha {n, m, len} = {7, 5, 36} és a
korlát-lista [{33,3}], akkor a függvényhívás eredménye ez
lesz:
[ [1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 0, 4, 5],
[1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 0, 5],
[1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 0]
]
@type count() :: integer() # számsorozatok száma, n (1 < n)
@type cycle() :: integer() # számsorozat hossza, m (1 <= m)
@type size() :: integer() # listahossz, len (1 < len)
@type value() :: integer() # listaelem értéke, val (0 <= val <= m)
@type index() :: integer() # listaelem sorszáma, ix (1 <= ix <= len)
@type index_value() :: {index(), value()} # listaelem indexe és értéke
cyclists/3 függvény specifikációja @spec cyclists({n::count(), m::cycle(), len::size()}, constraints::[index_value()]) :: results::[[value()]]
# results az összes olyan len hosszú lista listája, melyekben
# * az 1-től m-ig tartó számsorozat – ebben a sorrendben, esetleg közbeszúrt 0-kal – n-szer ismétlődik,
# * len-n*m számú helyen 0-k vannak,
# * a constraints korlát-listában felsorolt indexű cellákban a megadott értékű elemek vannak.
def cyclists({n, m, len}, constraints) do
...
end
iex> Khf3.cyclists({7, 5, 37}, [{3,0},{6,4},{9,2}])
[
[0, 1, 0, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4,
5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5],
[1, 0, 0, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4,
5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5],
[1, 2, 0, 0, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4,
5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5],
[1, 2, 0, 3, 0, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4,
5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5]
]
iex> Khf3.cyclists({10, 7, 72}, [{1,0},{2,0}])
[
[0, 0, 1, 2, 3, 4, 5, 6, 7, 1, 2, 3, 4, 5, 6, 7, 1, 2, 3, 4, 5, 6, 7, 1, 2, 3,
4, 5, 6, 7, 1, 2, 3, 4, 5, 6, 7, 1, 2, 3, 4, 5, 6, 7, 1, 2, 3, 4, 5, 6, 7, 1,
2, 3, 4, 5, 6, 7, 1, 2, 3, 4, 5, 6, 7, 1, 2, 3, 4, 5, 6, 7]
]
iex> Khf3.cyclists({9, 5, 49}, [{44,4}])
[
[1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1,
2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 0, 0, 0, 0, 5],
[1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1,
2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 0, 0, 0, 5, 0],
[1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1,
2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 0, 0, 5, 0, 0],
[1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1,
2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 0, 5, 0, 0, 0],
[1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1,
2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 0, 0, 0, 0]
]
Khf3 legyen, a @moduldoc
szakasz pedig legalább a szerző nevét, email-címét és a dátumot
tartalmazza.
defmodule Khf3 do
@moduledoc """
Ciklikus számlisták
@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 |