heap enhancements
jezkator at gmail.com
jezkator at gmail.com
Fri Jan 3 22:06:47 EST 2020
ok, so it could be like this?
import sys
chain = sys.stdin.read().splitlines()
array_z = list()
for line in chain:
row=list(map(str, line.split()))
array_z.append(row)
#every line in input changes into 2D array
def checking(chain):
"checking if characters are numbers or not"
for char in chain:
if char not in "0123456789-":
return False
return True
class MaxHeap:
def __init__(self):
"""heap __init__ constructor"""
self.heap =[]
def bubble_up(self, i):
""""bubble the element up if condition is ok """
while i > 0:
j = (i - 1) // 2
if self.heap[i] <= self.heap[j]:
break
self.heap[j], self.heap[i] = self.heap[i], self.heap[j]
i = j
def insert(self, k):
"""insert element in heap"""
self.heap += [k]
self.bubble_up(len(self.heap) - 1)
def peek(self):
"""return the biggest element"""
return self.heap[0]
def size(self):
"""return quantity of elements in heap"""
return len(self.heap)
def is_empty(self):
"""is heap empty?"""
return self.size() == 0
def bubble_down(self, i):
"""bubble down the element"""
n = self.size()
while 2 * i + 1 < n:
j = 2 * i + 1
if j + 1 < n and self.heap[j] < self.heap[j + 1]:
j += 1
if self.heap[i] < self.heap[j]:
self.heap[i], self.heap[j] = self.heap[j], self.heap[i]
i = j
def pop(self):
"""delete the biggest element and change the heap"""
element = self.heap[0]
self.heap[0] = self.heap[-1]
self.heap.pop()
self.bubble_down(0)
return element
for i in range (len( array_z)):
for j in range (len( array_z[i])):
digit_z= array_z[i][j]
if digit_z.isdigit() is True:
array_z[i][j]=int( array_z[i][j])
check =checking(digit_z)
if check is True:
array_z[i][j]=int( array_z[i][j])
Heap=MaxHeap()
for a in range (len( array_z)):
if array_z[a][0]>0:
Heap.insert( array_z[a])
if array_z[a][0] < 0:
print( array_z[a][1]+": ",end="") #print name of delivery
index_of_package= array_z[a][0]
while index_of_package<0 and (Heap.is_empty()) is False:
delivery_package=Heap.pop()
print(delivery_package[1],end=" ") #print name of package in delivery
index_of_package+= 1
print("")
print("Depo: ",end="")
while (Heap.is_empty()) is False:
depo_package=Heap.pop()
print(depo_package[1],end=" ") #print name of package in depo
More information about the Python-list
mailing list