| BME Villamosmérnöki és Informatikai Kar
Műszaki informatika szak |
Nappali tagozat
2006/2007. tanév, tavaszi félév
|
ts = [t0, t1, ...,
tz-1] szólista, ahol 0 ≤ z. Válogassa ki
ts-ből azokat a (ti,tj)
szópárokat, amelyekre 0 ≤ i < z, 0 ≤ j <
z, i ≠ j és 0 ≤ k mellett teljesül,
hogy a ti utolsó k karaktere
megegyezik a tj első k karakterével.
(Az ilyen szópárokat a továbbiakban k helyen átfedőnek vagy röviden
k-átfedőnek nevezzük.)
Precízebben: Jelöljük a ti karaktereit a
ci0
ci1 ...
cim-1, a tj
karaktereit pedig a cj0
cj1 ...
cjn-1 azonosítókkal. Elő kell állítani
az összes olyan (ti,tj) párt, amelyekre
0 ≤ k és i ≠ j mellett a
cim-k = cj0,
cim-k+1 = cj1,
..., cim-1 = cjk-1
feltételek mind teljesülnek.
A k-nál rövidebb szavakat értelemszerűen ki kell hagyni a
felsorolásból.
atfedok néven, amely egy füzérlista
elemeinek párosításával előállítható összes k-átfedő füzérpár
listáját adja eredményül (tetszőleges sorrendben).
(* atfedok : int -> string list -> (string * string) list
atfedok k ts = a ts lista k helyen átfedő elemeinek összes
lehetséges párosítását tartalmazó lista
*)
atfedok/3 néven, amely egy
névkonstans-lista elemeinek párosításával előállítható összes
k-átfedő névkonstans-pár listáját előállítja (tetszőleges
sorrendben).
% :- type szolista == list(atom). % :- type atfedes == int. % :- type szopar ---> atom-atom. % :- type szoparlista ---> list(szopar). % :- pred atfedok(szolista::in, atfedes::in, szoparlista::out) % atfedok(K,L1,L2), ahol L2 az L1 lista K helyen átfedő elemeinek % összes lehetséges párosítását tartalmazó lista
atfedok 2 ["alma","omlik","mama","malom","ikra","atom","adat","ragad"] =
[("alma", "malom"), ("alma", "mama"), ("atom", "omlik"), ("omlik", "ikra"),
("malom", "omlik"), ("mama", "malom"), ("ikra", "ragad"),
("adat", "atom"), ("ragad", "adat")]
atfedok 3 ["alma","omlik","mama","malom","ikra","atom","adat","ragad"] =
[]
atfedok 1 ["alma","omlik","mama","malom","ikra","atom","adat","ragad"] =
[("alma", "adat"), ("alma", "atom"), ("ikra", "alma"), ("mama", "alma"),
("mama", "adat"), ("mama", "atom"), ("atom", "mama"), ("malom", "mama"),
("atom", "malom"), ("ikra", "adat"), ("ikra", "atom")]
atfedok 2 ["aa", "aa"] = [("aa", "aa"), ("aa", "aa")]
atfedok 3 ["aa", "aa"] = []
?- atfedok(2,[alma,omlik,mama,malom,ikra,atom,adat,ragad],L). L = [alma-mama,alma-malom,malom-omlik,omlik-ikra,atom-omlik,mama-malom,ikra-ragad,adat-atom,ragad-adat] ; no ?- atfedok(3,[alma,omlik,mama,malom,ikra,atom,adat,ragad],L). L = [] ; no ?- atfedok(1,[alma,omlik,mama,malom,ikra,atom,adat,ragad],L). L = [alma-atom,alma-adat,mama-alma,mama-atom,mama-adat,malom-mama,ikra-alma, ikra-atom,ikra-adat,atom-mama,atom-malom] ; no ?- atfedok(2,[aa,aa],L). L = [aa-aa,aa-aa] ; no ?- atfedok(3,[aa,aa],L). L = [] ; no
atfedok.sml, illetve atfedok.plnéven.
Az új beadási határidő (2007. március 31., szombat helyett)
2007. április 2., hétfő 24:00.
A vizsgaosztályzat megállapításakor a határidőre beadott, helyesen megoldott kis házi feladatokért plusz 1-1 pont jár.