Problem p03147 (python)

Fixed submission:
def solve(height):
    
    water_count = 0 #水やり回数

    while True:
        index = [i for i, v in enumerate(height) if v >0] #水をやる必要のある花のリスト インデックスが連続した範囲でしか水やりできない
    
        # 花の水やり範囲を決定
        min_index = index[0] #インデックスの最小値
        max_index = index[0] #インデックスの最大値
    
        while True:
            if (max_index+1) in index:
                max_index += 1
            else:
                break
    
        for flower in range(min_index, max_index+1):
            height[flower] -= 1 
        water_count += 1 #水やりカウンタ増やす
        
        if sum(height) == 0: #水やりが終わったら終了
            break
    print(water_count)
    
def solve_zero(height): #元々のリストがすべて０のとき
    print(0)

if __name__ == "__main__":
    N = int(input()) 
    height = list(map(int, input().split())) #入力：花の高さ
    if sum(height) == 0:
        solve_zero(height)
    else:
        solve(height)

Buggy submission (verdict: Runtime Error):
N = int(input()) 
height = list(map(int, input().split())) #入力：花の高さ
water_count = 0 #水やり回数
while True:
    index = [i for i, v in enumerate(height) if v >0] #水をやる必要のある花のリスト インデックスが連続した範囲でしか水やりできない
    
    if len(index) == len(height): #全部高さが一以上のとき
        height -= 1 
        water_count += 1
    
    else:
        # 花の水やり範囲を決定
        min_index = index[0] #インデックスの最小値
        max_index = index[0] #インデックスの最大値
    
        while True:
            if (max_index+1) in index:
                max_index += 1
            else:
                break
    
        for flower in range(min_index, max_index+1):
            height[flower] -= 1 
        water_count += 1 #水やりカウンタ増やす
        
    if sum(height) == 0: #水やりが終わったら終了
        break
print(water_count)

Buggy submission (verdict: Runtime Error):
N = int(input()) 
height = list(map(int, input().split())) #入力：花の高さ
water_count = 0 #水やり回数
while True:
    index = [i for i, v in enumerate(height) if v >0] #水をやる必要のある花のリスト インデックスが連続した範囲でしか水やりできない
    
    # 花の水やり範囲を決定
    min_index = index[0] #インデックスの最小値
    max_index = index[0] #インデックスの最大値
    
    while True:
        if (max_index+1) in index:
            max_index += 1
        else:
            break
    
    for flower in range(min_index, max_index+1):
        height[flower] -= 1 #水やりカウンタ増やす
    water_count += 1
        
    if sum(height) == 0: #水やりが終わったら終了
        break
print(water_count)

Buggy submission (verdict: Runtime Error):
N = int(input()) 
height = list(map(int, input().split())) #入力：花の高さ
water_count = 0 #水やり回数
while True:
    index = [i for i, v in enumerate(height) if v >0] #水をやる必要のある花のリスト インデックスが連続した範囲でしか水やりできない
    
    # 花の水やり範囲を決定
    min_index = index[0] #インデックスの最小値
    max_index = index[0] #インデックスの最大値
    
    while True:
        if max_index+1 in index:
            max_index += 1
        else:
            break
            
    # print("index: {}".format(index)) 
    
    water_amount = min(height[min_index:max_index+1]) #あげる水の量
    for flower in range(min_index, max_index+1):
        height[flower] -= water_amount #水やりカウンタ増やす
    
    # print("height:{} ".format(height))
    water_count +=water_amount
        
    if sum(height) ==0: #水やりが終わったら終了
        break
print(water_count)

Buggy submission (verdict: Runtime Error):
N = int(input())
height = list(map(int, input().split())) #入力：花の高さ
water_count = 0 #水やり回数
while True:
    index = [i for i, v in enumerate(height) if v >0] #水をやる必要のある花のリスト インデックスが連続した範囲でしか水やりできない
    
    # 花の水やり範囲を決定
    min_index = index[0] #インデックスの最小値
    max_index = index[0] #インデックスの最大値
    
    while True:
        if max_index+1 in index:
            max_index += 1
        else:
            break
            
    # print("index: {}".format(index)) 
    
    water_amount = min(height[min_index:max_index+1]) #あげる水の量
    for flower in range(min_index, max_index+1):
        height[flower] -= water_amount #水やりカウンタ増やす
    
    # print("height:{} ".format(height))
    water_count +=water_amount
        
    if np.sum(height) ==0: #水やりが終わったら終了
        break
print(water_count)