thd (_,_,x) = x
waterInCity = thd . waterInCity' (0,[],0)
waterInCity' t [] = t
waterInCity' (highest,buildings,water) (x:[]) = if x < highest
then (highest,buildings,water)
else (highest
,[],water
+ sum(map ((min highest x
)-) buildings
)) waterInCity' (highest,buildings,water) (x:xs) = if x >= highest
then waterInCity' (x
,[],water
+ sum(map (highest
-) buildings
)) xs
else waterInCity' (highest,x:buildings,water) xs
main = do
print $ waterInCity [] == 0
print $ waterInCity [1] == 0
print $ waterInCity [1,1] == 0
print $ waterInCity [1,0] == 0
print $ waterInCity [0,1] == 0
print $ waterInCity [1,0,1] == 1
print $ waterInCity [2,0,1,3] == 3
print $ waterInCity [6,3,4,7,4,3,7,7] == 3 + 2 + 3 + 4
print $ waterInCity [2,5,1,2,3,4,7,7,6] == 10
print $ waterInCity [1,5,4,3,2,1]
dGhkIChfLF8seCkgPSB4Cgp3YXRlckluQ2l0eSA6OiBbSW50XSAtPiBJbnQKd2F0ZXJJbkNpdHkgPSB0aGQgLiB3YXRlckluQ2l0eScgKDAsW10sMCkgCgp3YXRlckluQ2l0eScgOjogKEludCxbSW50XSxJbnQpIC0+IFtJbnRdIC0+IChJbnQsW0ludF0sSW50KQp3YXRlckluQ2l0eScgdCBbXSA9IHQKd2F0ZXJJbkNpdHknIChoaWdoZXN0LGJ1aWxkaW5ncyx3YXRlcikgKHg6W10pID0gaWYgeCA8IGhpZ2hlc3QgCgl0aGVuIChoaWdoZXN0LGJ1aWxkaW5ncyx3YXRlcikKIAllbHNlIChoaWdoZXN0LFtdLHdhdGVyICsgc3VtKG1hcCAoKG1pbiBoaWdoZXN0IHgpLSkgYnVpbGRpbmdzKSkKd2F0ZXJJbkNpdHknIChoaWdoZXN0LGJ1aWxkaW5ncyx3YXRlcikgKHg6eHMpID0gaWYgeCA+PSBoaWdoZXN0IAoJdGhlbiB3YXRlckluQ2l0eScgKHgsW10sd2F0ZXIgKyBzdW0obWFwIChoaWdoZXN0LSkgYnVpbGRpbmdzKSkgeHMKCWVsc2Ugd2F0ZXJJbkNpdHknIChoaWdoZXN0LHg6YnVpbGRpbmdzLHdhdGVyKSB4cwoKbWFpbiA9IGRvIAoJcHJpbnQgJCB3YXRlckluQ2l0eSBbXSA9PSAwCglwcmludCAkIHdhdGVySW5DaXR5IFsxXSA9PSAwCglwcmludCAkIHdhdGVySW5DaXR5IFsxLDFdID09IDAKCXByaW50ICQgd2F0ZXJJbkNpdHkgWzEsMF0gPT0gMAoJcHJpbnQgJCB3YXRlckluQ2l0eSBbMCwxXSA9PSAwCglwcmludCAkIHdhdGVySW5DaXR5IFsxLDAsMV0gPT0gMQoJcHJpbnQgJCB3YXRlckluQ2l0eSBbMiwwLDEsM10gPT0gMwoJcHJpbnQgJCB3YXRlckluQ2l0eSBbNiwzLDQsNyw0LDMsNyw3XSA9PSAzICsgMiArIDMgKyA0CglwcmludCAkIHdhdGVySW5DaXR5IFsyLDUsMSwyLDMsNCw3LDcsNl0gPT0gMTAKCXByaW50ICQgd2F0ZXJJbkNpdHkgWzEsNSw0LDMsMiwxXSAKCQ==