% D. Korunic % 1. zadatak % odredi najdulje putovanje - dolazni i odredisni grad i dan s najvise % letova najdulje_putovanje(X):- findall(Letovi/Dan, putovanje(_, _, Dan, Letovi), Lista), najvise(Lista, X). % trivijalan slucaj - ima samo jedan element, dakle vrati doticni najvise([Letovi/Dan], Letovi/Dan). % ima barem 2 komada, s time da je broj letova u 1. danu veci od broja % letova u w. danu najvise([Letovi1/Dan1, Letovi2/Dan2|Rep], Rjesenje):- broj_elemenata(Letovi1/Dan1, Broj1), broj_elemenata(Letovi2/Dan2, Broj2), Broj1 > Broj2, najvise([Letovi1/Dan1|Rep], Rjesenje). % analogno prethodnom, ali ovdje ima jednako ili manje letova u prvom danu % od drugog najvise([Letovi1/Dan1, Letovi2/Dan2|Rep], Rjesenje):- broj_elemenata(Letovi1/Dan1, Broj1), broj_elemenata(Letovi2/Dan2, Broj2), Broj1 =< Broj2, najvise([Letovi2/Dan2|Rep], Rjesenje). % trivijalan primjer za prebrojavanje elemenata u listi letova - dan se % ignorira, a jedan po jedan se "cijepaju" glave od repa i prebrojavaju broj_elemenata([]/_ , 0). broj_elemenata([_|Rep]/Dan, Broj):- broj_elemenata(Rep/Dan, Broj1), Broj is Broj1+1. % 3. zadatak % ispis matrice - jedan po jedan element ispisi, predji u slijedeci % red i nastavi po repu print_array([]). print_array([H|T]):- write(H), nl, print_array(T). ispis([]). ispis([H|T]):- write(H), nl, ispis(T). % da li je pozicija finalna naci cemo tako da je provjerimo % s time da pocinjemo od 1 kao pocetne vrijednosti kockice pobjeda(List):- provjeri(List,1). % ok, finale - dosli smo do kraja, pa vise nije vazna % prethodna vrijednost kockice provjeri([],_). % naisli smo na listu na mjestu nekog clana u stupcu - pozovi % provjeru retka na cijeloj listi - sa argumentom brojem zadnjeg % parsiranog elementa + 1 provjeri([H|T],N) :- provjeri_redak(H,N,Last), Next is Last+1, provjeri(T,Next). % element u retku koji odgovara sam sebi (pretpostavljenoj vrijednosti) % naravno, vrati njegovu vrijednost ako je sve OK provjeri_redak([H],H,H). % element u retku, s time da je iduci x odnosno kraj polja - pa za % njega vrati 0 tako da onemogucis dalje parsiranje provjeri_redak([H,x],H,0). % standardna rutina za provjeru retka - idi jedan po jedan i provjeravaj % jesu li po redu provjeri_redak([H|T],H,N):- H2 is H+1, provjeri_redak(T,H2,N). % rutina koja ce dohvatiti element ili polje dohvati(Tablica, Element, Polje):- nadji_redak(Tablica, Element, Polje, 0). % kretanje po redcima + stupcima nadji_redak([Glava|_], Element, Redak:Stupac, Redak):- nadji_stupac(Glava, Element, Stupac, 0). nadji_redak([_|Rep], Element, Redak:Stupac, R):- RPom is R+1, nadji_redak(Rep, Element, Redak:Stupac, RPom). % kretanje po stupcima nadji_stupac([Glava|_], Glava, Stupac, Stupac). nadji_stupac([_|Rep], Element, Stupac, S):- SPom is S+1, nadji_stupac(Rep, Element, Stupac, SPom).