idaresiwins

Fluid Volume of a Heightmap

Feb 3rd, 2022
1,414
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.42 KB | None | 0 0
  1. import itertools
  2. def volume(table):
  3.     try:
  4.         counter = 0
  5.         subtract = 0
  6.         findRange = itertools.chain.from_iterable(table)
  7.         findRange = set(findRange)
  8.         shallowest = min(findRange)
  9.         tabDiff = max(findRange) - min(findRange)
  10.         act = False
  11.         for iter in range(0,tabDiff):
  12.             tableTerrace = []
  13.             for row in table:
  14.                 row2 = []
  15.                 for num in row:
  16.                     if num > shallowest:
  17.                         num = shallowest + 1
  18.                         row2.append(num)
  19.                     elif num < shallowest:
  20.                         num = shallowest
  21.                         row2.append(num)
  22.                         counter +=1
  23.                     else:
  24.                         row2.append(num)
  25.                         counter +=1
  26.                 tableTerrace.append(row2)
  27.             edges = [tableTerrace[0], tableTerrace[len(tableTerrace)-1], [x[0] for x in tableTerrace], [x[len(x)-1] for x in tableTerrace]]
  28.  
  29.             for row in edges:
  30.                 for index, item in enumerate(row):
  31.                     if item == shallowest:
  32.                         row[index] = shallowest - 1
  33.                         act = True
  34.                         subtract +=1
  35.                     else:
  36.                         pass
  37.  
  38.             while act == True:
  39.                 act = False
  40.                 for index, row2 in enumerate(tableTerrace):
  41.                     for index2, item2 in enumerate(row2):
  42.                         if item2 == shallowest:
  43.                             try:
  44.                                 check = [row2[index2 - 1], row2[index2+1], tableTerrace[index - 1][index2], tableTerrace[index + 1][index2]]
  45.                                 if shallowest-1 in check:
  46.                                     row2[index2] = shallowest - 1
  47.                                     act = True
  48.                                     subtract +=1
  49.                                 else:
  50.                                     pass
  51.                             except IndexError:
  52.                                 act = True
  53.                         else:
  54.                             continue
  55.                 if act == True:
  56.                     pass
  57.                 else:
  58.                     pass
  59.             shallowest = shallowest + 1
  60.  
  61.         answer = counter - subtract
  62.     except UnboundLocalError:
  63.         answer = 0
  64.     return answer
Advertisement
Add Comment
Please, Sign In to add comment