fluss(drau, 6).
fluss(lieser, 4).
fluss(riegerbach, 2).
fluss(donau, 0).
fluss(inn, 8).
fluss(glan, 0).
fluss(gail, 3).
fluss(maibachl, 1).
fluss(mur, 0).
fluss(gurk, 3).
see_(millstaettersee_end, 60).
abfluss(mur_glan).
stadt(spittal, drau).
stadt(hermagor, mur).
stadt(st_veit, mur).
stadt(graz, mur).
stadt(linz, donau).
stadt(wien, donau).
verlauf(lieser, lieser_drau, 90000, 4).
verlauf(drau, lieser_drau, 10000, 4).
verlauf(lieser_drau, spittal, 90000, 8).
verlauf(spittal, millstaettersee, 10000, 3).
verlauf(riegerbach, millstaettersee, 100000, 10).
verlauf(millstaettersee, millstaettersee_end, 12000, 0.1389).
verlauf(inn, inn_donau, 5000, 5).
verlauf(millstaettersee_end, linz, 2000, 5).
verlauf(linz, inn_donau, 3000, 5).
verlauf(inn_donau, wien, 10000, 2).
verlauf(wien, donau_meer, 100000, 2).
verlauf(millstaettersee_end, gail_mur, 13000, 6).
verlauf(gail_mur, hermagor, 2000, 6).
verlauf(hermagor, mur_glan, 1000, 6).
verlauf(mur_glan, st_veit, 10000, 4).
verlauf(st_veit, maibachl_mur, 30000, 4).
verlauf(maibachl_mur, gurk_mur, 30000, 3).
verlauf(gurk_mur, graz, 10000, 3).
verlauf(graz, mur_meer, 100000, 3).
verlauf(maibachl, maibachl_mur, 10000, 5).
verlauf(gurk, gurk_mur, 10000, 5).
verlauf(gail, gail_mur, 10000, 5).
verlauf(mur_glan, glanstadt, 10000, 4).
verlauf(glanstadt, glan_meer, 100000, 4).
verlauf_hilfe(A, B) :-
verlauf(A, B, _, _).
my_div(0, _, 0) :-
!.
my_div(XX, YY, ZZ) :-
ZZ \== 0,
nonvar(YY),
!,
XX is YY / ZZ.
my_div(XX, YY, ZZ) :-
nonvar(XX),
ZZ \== 0,
!,
YY is XX * ZZ.
my_mal(0, _, 0) :-
!.
my_mal(XX, YY, ZZ) :-
nonvar(YY),
ZZ \== 0,
!,
XX is YY * ZZ.
my_mal(XX, YY, ZZ) :-
ZZ \== 0,
nonvar(XX),
!,
YY is XX / ZZ.
wassermenge(PUNKT, MENGE) :-
abfluss(PUNKT),
my_setof(Z, verlauf_hilfe(Z, PUNKT), LIST),
vorher(LIST, MENGEN),
my_div(MENGE, MENGEN, 2).
wassermenge(PUNKT, MENGE) :-
stadt(PUNKT, _),
my_setof(Z, verlauf_hilfe(Z, PUNKT), LIST),
vorher(LIST, MENGEN),
MENGE is MENGEN.
wassermenge(PUNKT, MENGE) :-
see_(PUNKT, _),
my_setof(Z, verlauf_hilfe(Z, PUNKT), LIST),
my_setof(XX, verlauf_hilfe(PUNKT, XX), LISTE),
len(LISTE, LEN),
vorher(LIST, MENGEN),
my_div(MENGE, MENGEN, LEN).
wassermenge(PUNKT, MENGE) :-
fluss(PUNKT, MENGE),
MENGE \== 0.
wassermenge(PUNKT, MENGE) :-
my_setof(Z, verlauf_hilfe(Z, PUNKT), LIST),
vorher(LIST, MENGE).
vorher([], 0).
vorher([H|T], MENGE) :-
vorher(T, MENGE1),
wassermenge(H, MENGE2),
MENGE is MENGE1 + MENGE2.
len([], 0).
len(L, A) :-
L=[_|T] ,
len(T, AN),
A is AN + 1.
my_setof(X, Y, Z) :-
setof(X, Y, Z),
!.
my_setof(_, _, []).
verschmutzung(PUNKTA, PUNKTB, MENGEA, MENGEB, ZEIT) :-
godown(PUNKTA, PUNKTB, FAKTOR, ZEITN),
my_mal(MENGEB, MENGEA, FAKTOR),
my_div(ZEIT, ZEITN, 60).
godown(PUNKTB, PUNKTB, 1, 0).
godown(PUNKTA, PUNKTB, FAKTOR, ZEIT) :-
verlauf(PUNKTA, NEXT_, WEG, SPEED),
godown(NEXT_, PUNKTB, FAKTORN, ZEITN),
schmutz(PUNKTA, FAKTOR_),
my_mal(FAKTOR, FAKTOR_, FAKTORN),
my_div(ZEIT_, WEG, SPEED),
ZEIT is ZEIT_ + ZEITN.
schmutz(PUNKTA, FAKTOR) :-
see_(PUNKTA, MENGE),
!,
my_setof(XX, verlauf_hilfe(PUNKTA, XX), LISTE),
len(LISTE, LEN),
my_div(FAKTORN, 1, LEN),
my_div(FAKTOR, FAKTORN, MENGE).
schmutz(PUNKTA, FAKTOR) :-
abfluss(PUNKTA),
!,
FAKTOR = 1/2.
schmutz(_, 1).