Prijatelji bi se radi v petek dogovorili za urico ob soku, a imajo težave pri iskanju skupnega prostega termina. Pomagaj jim s funkcijo SkupneProsteUre(prosteUre), ki sprejme tabelo množic prostih ur posameznih oseb in vrne množico ur, ob katerih so vse osebe proste.
Za primer vzemimo, da je tabela prosteUre videti tako:
[ {15, 17, 18, 19}, {14, 17, 19, 21},
{17, 19, 22}, {16, 17, 18, 19, 20} ]
V tem primeru se lahko dobijo bodisi ob 17. ali pa ob 19. uri. Rezultat je torej množica {17, 19}.
Poiskati moramo torej vse elemente (proste ure), ki nastopajo v vseh množicah. Ti elementi tvorijo ravno presek vseh množic. Presek množic v tabeli izračunamo na podoben način, kot bi na primer izračunali vsoto števil v tabeli.
Ustvarimo pomožno množico, recimo ji m, in jo nastavimo na kopijo prve množice v tabeli (prosteUre[0]). Nato se sprehodimo po tabeli prosteUre in vsakokrat izračunamo presek množice m in trenutne množice v tabeli. Rezultat ponovno zapišemo v množico m. Po prvem obhodu zanke bo množica m (še vedno) enaka množici prosteUre[0], po drugem pa bo vsebovala skupne elemente prvih dveh množic v tabeli prosteUre (torej presek množic prosteUre[0] in prosteUre[1]). Po tretjem obhodu bo množica m vsebovala skupne elemente prvih treh množic itd. Zapišimo našo funkcijo:
Kaj bi se zgodilo, če bi stavek m = prosteUre[0].copy() nadomestili s preprostejšim m = prosteUre[0]? Funkcija bi sicer še vedno delovala pravilno, bi pa imela nepričakovan stranski učinek, saj bi spremenila del svojega vhoda – množico prosteUre[0]! Če ne razumeš, zakaj, si oglej tole.
Napiši in preizkusi funkcijo ProsteUreZaVsajEnoOsebo(prosteUre), ki sprejme tabelo množic prostih ur posameznih oseb in vrne množico vseh ur, v katerih je vsaj ena oseba prosta. V zgornjem primeru bi funkcija vrnila to množico:
{14, 15, 16, 17, 18, 19, 20, 21, 22}