Commit e1011218 authored by Ing. Petr Pauš, Ph.D.'s avatar Ing. Petr Pauš, Ph.D.
Browse files

semestralka a kody ze cviceni

parent 664e5cbf
Loading
Loading
Loading
Loading
+34 −0
Original line number Diff line number Diff line
def binary_search(arr:list, x:any) -> int:
    min = 0
    max = len(arr) - 1
    while min <= max:
        mid = (min + max) // 2
        if x<arr[mid]:
            max = mid - 1
        elif x>arr[mid]:
            min = mid + 1
        else:
            return mid
    return None

def binary_search_rek(arr:list, x:any, min:int, max:int) -> int:
    if min <= max:
        mid = (min + max) // 2
        if x<arr[mid]:
            return binary_search_rek(arr, x, min, mid - 1)
        elif x>arr[mid]:
            return binary_search_rek(arr, x, mid+1, max)
        else:
            return mid
    return None

def binary_search_recursive(arr:list, x:any) -> int:
    return binary_search_rek(arr, x, 0, len(arr)-1)

l  = [1,2,3,6,9,21,33,44,66,77,90,91,92,95,100,1000,10000]

index = binary_search(l, 2)
print(f"index={index}: {l[index]}")

index = binary_search_recursive(l, 2)
print(f"index={index}: {l[index]}")
 No newline at end of file
+34 −0
Original line number Diff line number Diff line

def binary_search(arr:list, data:any) -> int:
    min = 0
    max = len(arr)-1
    while min<=max:
        mid = (min + max) // 2
        if data < arr[mid]:
            max = mid - 1
        elif data > arr[mid]:
            min = mid + 1
        else:
            return mid

    return None 

def binary_search_rekursive(arr:list, data:any, min:int, max:int) -> int:
    if min>max:
        return None
    
    mid = (min + max) // 2
    if data < arr[mid]:
        return binary_search_rekursive(arr, data, min, mid-1)
    elif data > arr[mid]:
        return binary_search_rekursive(arr, data, mid+1, max)
    else:
        return mid
    
def binary_search_rek(arr:list, data)->int:
    return binary_search_rekursive(arr, data, 0, len(arr)-1)

l = [1,3,4,8,9,10,15,20,30,50,66,77,90,95,99,100]

print(binary_search(l,8))
print(binary_search_rek(l,8))
 No newline at end of file
+85 −0
Original line number Diff line number Diff line
class Equipment:
    def __init__(self, id:int, name:str):
        self.id = id
        self.name = name
    
    def __str__(self) -> str:
        return f"{self.name} ({self.id})"
    
class Furniture(Equipment):
    def __init__(self, id:int, name:str, legs:int):
        super().__init__(id, name)
        self.legs = legs

    def __str__(self):
        return super().__str__() + f" legs: {self.legs}"

class Electronics(Equipment):
    def __init__(self, id:int, name:str, power:int):
        super().__init__(id, name)
        self.power = power

    def __str__(self):
        return super().__str__() + f" power: {self.power}"
    
class WashingMachine(Electronics):
    def __init__(self, id:int, name:str, power:int, weight:float):
        super().__init__(id, name, power)
        self.weight = weight


    def __str__(self):
        return super().__str__() + f" weight: {self.weight}"
    

class Household:
    def __init__(self):
        self.items = {}

    def add(self, eq:Equipment):
        if eq.id in self.items:
            raise Exception("Already exists")
        self.items[eq.id] = eq

    def __str__(self):
        result = ""
        for id, eq in self.items.items():
            result += str(eq) + "\n"
        return result
    
    def delete(self, id:int):
        if id not in self.items:
            raise Exception("Does not exist")
        del self.items[id]

e1 = Equipment(1, "Koberec")
e2 = Furniture(2, "Knihovna", 4)
e3 = Electronics(3, "TV", 100)
e4 = WashingMachine(4, "Pracka", 500, 50)
e5 = Electronics(1, "PC", 300)

print(e1)
print(e2)
print(e3)
print(e4)

house = Household()

try:
    house.add(e1)
    house.add(e2)
    house.add(e3)
    house.add(e4)
    house.add(e5)
except Exception as e:
    print(e)

print(house)

try:
    house.delete(2)
    house.delete(100)
except Exception as e:
    print(e)

print(house)
+84 −0
Original line number Diff line number Diff line
class Equipment:
    def __init__(self, id:int, name:str):
        self.id = id
        self.name = name
        self.owner = ""
    
    def __str__(self):
        return f"{self.name} ({self.id})"
    
class Furniture(Equipment):
    def __init__(self, id:int, name:str, legs:int):
        super().__init__(id, name)
        self.legs = legs

    def __str__(self):
        return super().__str__() + f" legs: {self.legs}"

class Electronics(Equipment):
    def __init__(self, id:int, name:str, power:int):
        super().__init__(id, name)
        self.power = power

    def __str__(self):
        return super().__str__() + f" power: {self.power}"

class WashingMachine(Electronics):
    def __init__(self, id, name, power, weight):
        super().__init__(id, name, power)
        self.weight = weight

    def __str__(self):
        return super().__str__() + f" weight: {self.weight}"

class Household:
    def __init__(self):
        self.items = {}

    def add(self, eq):
        if eq.id in self.items:
            raise Exception("Already exists")
        self.items[eq.id] = eq

    def __str__(self):
        result = ""
        for id, eq in self.items.items():
            result += str(eq) + "\n"
        return result
    
    def delete(self, id):
        if id not in self.items:
            raise Exception("Does not exist")
        del self.items[id]


e1 = Equipment(1, "Koberec")
e2 = Furniture(2, "Gauc", 4)
e3 = Electronics(3, "TV", 100)
e4 = WashingMachine(4, "Pracka", 500, 50)

print(e1)
print(e2)
print(e3)
print(e4)

e5 = Electronics(3, "PC", 300)

house = Household()
try:
    house.add(e1)
    house.add(e2)
    house.add(e3)
    house.add(e4)
    house.add(e5)
except Exception as e:
    print(e)
print(house)

try:
    house.delete(2)
    house.delete(6)
except Exception as e:
    print(e)

print(house)
 No newline at end of file
+50 −0
Original line number Diff line number Diff line
MAXDIST = 1e10

def min_dist(dist, visited, n:int) -> int:
    min = MAXDIST
    for w in range(n):
        if dist[w] < min and visited[w] == False:
            min = dist[w]
            min_index = w
    return min_index

def dijkstra(v: int, graph, n:int):
    visited = [False for i in range(n)]
    dist = [graph[v][i] for i in range(n)]
    pred = [v for i in range(n)]

    visited[v] = True
    dist[v] = 0

    for i in range(1,n):
        u = min_dist(dist, visited, n)
        visited[u] = True
        for w in range(n):
           if visited[w]==False and dist[w]>dist[u] + graph[u][w]:
               dist[w] = dist[u] + graph[u][w]
               pred[w] = u

    return dist, pred

graph = [[MAXDIST, 2, 1, MAXDIST, MAXDIST, MAXDIST, 4, MAXDIST],
         [2, MAXDIST, MAXDIST, 5, MAXDIST, MAXDIST, MAXDIST, MAXDIST],
         [1, MAXDIST, MAXDIST, MAXDIST, 2, 7, 2, MAXDIST],
         [MAXDIST, 5, MAXDIST, MAXDIST, MAXDIST, MAXDIST, MAXDIST, 4],
         [MAXDIST, MAXDIST, 2, MAXDIST, MAXDIST, 8, MAXDIST, 3],
         [MAXDIST, MAXDIST, 7, MAXDIST, 8, MAXDIST, 2, MAXDIST],
         [4, MAXDIST, 2, MAXDIST, MAXDIST, 2, MAXDIST, MAXDIST],
         [MAXDIST, MAXDIST, MAXDIST, 4, 3, MAXDIST, MAXDIST, MAXDIST]]


def print_solution(start, end, n, dist, pred ):
    x = end
    while x!=start:
        print(x, "<- ", end="")
        x = pred[x]
    print(start)
dist, pred = dijkstra(0, graph, 8)
print(dist)
print(pred)

print_solution(0, 5, 8, dist, pred)
Loading