From d6e07c5934f6adac80f41c2326ae1014148cf946 Mon Sep 17 00:00:00 2001 From: Arhan Ansari Date: Sat, 11 May 2024 21:49:00 +0530 Subject: [PATCH 1/4] Create PrefixtoPostFix.py --- code/PrefixtoPostFix.py | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 code/PrefixtoPostFix.py diff --git a/code/PrefixtoPostFix.py b/code/PrefixtoPostFix.py new file mode 100644 index 0000000..09f2e21 --- /dev/null +++ b/code/PrefixtoPostFix.py @@ -0,0 +1,23 @@ +class PrefixtoPostFix: + def isOperator(self, x): + return x in {'-', '+', '/', '*', '^'} + + def convert(self, expression): + stack = [] + for i in range(len(expression)-1, -1, -1): + c = expression[i] + if self.isOperator(c): + s1 = stack.pop() + s2 = stack.pop() + temp = s1 + s2 + c + stack.append(temp) + else: + stack.append(c) + result = stack.pop() + return result + + +if __name__ == "__main__": + prefix = "*/93+*24-76" + print("Prefix Expression:", prefix) + print("Postfix Expression:", PrefixtoPostFix().convert(prefix)) From 770cdd3797ecac1a2a05283afc469c3aa47a11fe Mon Sep 17 00:00:00 2001 From: Arhan Ansari Date: Sat, 11 May 2024 23:12:31 +0530 Subject: [PATCH 2/4] Create linked_list_python.md --- linked_list/linked_list_python.md | 125 ++++++++++++++++++++++++++++++ 1 file changed, 125 insertions(+) create mode 100644 linked_list/linked_list_python.md diff --git a/linked_list/linked_list_python.md b/linked_list/linked_list_python.md new file mode 100644 index 0000000..af56360 --- /dev/null +++ b/linked_list/linked_list_python.md @@ -0,0 +1,125 @@ +# Linked List in Python +- [Nodes and Size](#nodes-and-size) +- [Boundary condition](#boundary-condition) +- [addFirst()](#addFirst()) +- [addLast()](#addLast()) +- [removeFirst()](#removeFirst()) +- [removeLast()](#removeLast()) + +## Nodes and Size +```python +class LinkedList: + class Node: + def __init__(self, obj): + self.data = obj + self.next = None + + def __init__(self): + self.head = None + self.tail = None + self.currentSize = 0 + + def addFirst(self, obj): + node = self.Node(obj) + node.next = self.head + self.head = node + if self.tail is None: + self.tail = node + self.currentSize += 1 + + def addLast(self, obj): + node = self.Node(obj) + if self.head is None: + self.head = self.tail = node + else: + self.tail.next = node + self.tail = node + self.currentSize += 1 + + def removeFirst(self): + if self.head is None: + return None + tmp = self.head.data + if self.head.next is None: + self.head = self.tail = None + else: + self.head = self.head.next + self.currentSize -= 1 + return tmp + + def removeLast(self): + if self.head is None: + return None + if self.head.next is None: + return self.removeFirst() + current = self.head + previous = None + while current != self.tail: + previous = current + current = current.next + previous.next = None + self.tail = previous + self.currentSize -= 1 + return current.data +``` +## Boundary Condition +- Empty data structure +- Single element in the data structure +- Adding / removing beginning of data structure +- Adding / removing end of data structure +- Working in the middle + +## addFirst() +```python +def addFirst(self, obj): + node = self.Node(obj) + node.next = self.head + self.head = node + if self.tail is None: + self.tail = node + self.currentSize += 1 +``` + +## addLast() +```python +def addLast(self, obj): + node = self.Node(obj) + if self.head is None: + self.head = self.tail = node + else: + self.tail.next = node + self.tail = node + self.currentSize += 1 +``` + +## removeFirst() +```python +def removeFirst(self): + if self.head is None: + return None + tmp = self.head.data + if self.head.next is None: + self.head = self.tail = None + else: + self.head = self.head.next + self.currentSize -= 1 + return tmp +``` + +## removeLast() +```python +def removeLast(self): + if self.head is None: + return None + if self.head.next is None: + return self.removeFirst() + current = self.head + previous = None + while current != self.tail: + previous = current + current = current.next + previous.next = None + self.tail = previous + self.currentSize -= 1 + return current.data +``` From e707eacb366eba8d44d4913fd33b8053397fb7cc Mon Sep 17 00:00:00 2001 From: Arhan Ansari Date: Sun, 12 May 2024 01:16:47 +0530 Subject: [PATCH 3/4] Update PrefixtoPostFix.py --- code/PrefixtoPostFix.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/code/PrefixtoPostFix.py b/code/PrefixtoPostFix.py index 09f2e21..1fdfff5 100644 --- a/code/PrefixtoPostFix.py +++ b/code/PrefixtoPostFix.py @@ -1,12 +1,12 @@ -class PrefixtoPostFix: - def isOperator(self, x): - return x in {'-', '+', '/', '*', '^'} +class PrefixToPostFix: + def is_operator(self, x): + return x in {"-", "+", "/", "*", "^"} def convert(self, expression): stack = [] - for i in range(len(expression)-1, -1, -1): + for i in range(len(expression) - 1, -1, -1): c = expression[i] - if self.isOperator(c): + if self.is_operator(c): s1 = stack.pop() s2 = stack.pop() temp = s1 + s2 + c @@ -20,4 +20,4 @@ def convert(self, expression): if __name__ == "__main__": prefix = "*/93+*24-76" print("Prefix Expression:", prefix) - print("Postfix Expression:", PrefixtoPostFix().convert(prefix)) + print("Postfix Expression:", PrefixToPostFix().convert(prefix)) From b88aecfeed67c842b1d482c0f473b3d8bfc48c1d Mon Sep 17 00:00:00 2001 From: Arhan Ansari Date: Sun, 12 May 2024 01:26:53 +0530 Subject: [PATCH 4/4] Create Source.py --- final-project/Source.py | 296 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 296 insertions(+) create mode 100644 final-project/Source.py diff --git a/final-project/Source.py b/final-project/Source.py new file mode 100644 index 0000000..612e10b --- /dev/null +++ b/final-project/Source.py @@ -0,0 +1,296 @@ +import os +import math + +class Carriage: + def __init__(self): + self.carriageType = "" + self.carriageID = "" + self.carriagePlaces = 0 + + def set_data(self, carriageType, carriageID, carriagePlaces): + self.carriageType = carriageType + self.carriageID = carriageID + self.carriagePlaces = carriagePlaces + + def get_carriage_type(self): + return self.carriageType + + def get_carriage_id(self): + return self.carriageID + + def get_carriage_places(self): + return self.carriagePlaces + + def display(self): + print("------------------------------------------ ") + print(" Carriage: " + self.carriageID + " " + self.carriageType + " " + str(self.carriagePlaces)) + +class Passenger: + def __init__(self): + self.firstName = "" + self.lastName = "" + self.ticketType = "" + + def set_data(self, firstName, lastName, ticketType): + self.firstName = firstName + self.lastName = lastName + self.ticketType = ticketType + + def get_first_name(self): + return self.firstName + + def get_last_name(self): + return self.lastName + + def get_ticket_type(self): + return self.ticketType + + def display(self): + print("------------------------------------------ ") + print(" Passenger: " + self.firstName + " " + self.lastName + " " + self.ticketType) + +class Node: + def __init__(self, data): + self.data = data + self.next = None + +class LinkedList: + def __init__(self): + self.head = None + + def add_node(self, val): + new_node = Node(val) + if self.head is None: + self.head = new_node + else: + temp = self.head + while temp.next is not None: + temp = temp.next + temp.next = new_node + + def delete_first(self): + if self.head is None: + print("Passengers list is empty!") + else: + self.head = self.head.next + + def get_first_element(self): + if self.head is not None: + return self.head.data + + def display(self): + if self.head is None: + print("Passengers list is empty!") + else: + temp = self.head + while temp is not None: + print(temp.data, end=" --> ") + temp = temp.next + print() + +class Stack: + def __init__(self): + self.front = None + + def push(self, d): + new_node = Node(d) + if self.front is None: + new_node.next = None + else: + new_node.next = self.front + self.front = new_node + + def pop(self): + if self.front is None: + print("UNDERFLOW") + else: + self.front = self.front.next + + def print_stack(self): + if self.front is None: + print("UNDERFLOW!") + else: + temp = self.front + while temp is not None: + print(temp.data, end=" <--> ") + temp = temp.next + print() + +def main(): + Num = 1 + numOfBusiness = 0 + numOfFirst = 0 + businessSpace = 0 + firstSpace = 0 + + while True: + os.system('cls' if os.name == 'nt' else 'clear') + print("\t*** MENU *** ") + print("1. Add passenger to file") + print("2. Read passengers info from file") + print("3. Add carriage to file") + print("4. Read carriage info from file") + print("5. Show linked lists") + choice = input("Your choice:") + + if choice == "1": + print("\n------------------------------------------ ") + with open("Passengers", "ab") as out: + print("\t*** Add Passenger ***") + firstName = input("Enter first name: ") + lastName = input("Enter last name: ") + ticketType = input("Enter ticket type (Business/First): ") + Psg = Passenger() + Psg.set_data(firstName, lastName, ticketType) + out.write(Psg.__dict__.encode()) + input("\nPress Enter to continue...") + + elif choice == "2": + print("\n\t*** Passenger File *** ") + Num = 1 + with open("Passengers", "rb") as f: + while True: + data = f.read(1024) + if not data: + break + else: + Psg = Passenger() + Psg.__dict__.update(eval(data)) + print(f"{Num}.") + Psg.display() + Num += 1 + input("\nPress Enter to continue...") + + elif choice == "3": + print("\n------------------------------------------ ") + with open("Carriages", "ab") as out: + print("\t*** Add Carriages ***") + carriageID = input("Enter ID: ") + carriageType = input("Enter type (Business/First): ") + carriagePlaces = int(input("Enter number of seats: ")) + Crg = Carriage() + Crg.set_data(carriageType, carriageID, carriagePlaces) + out.write(Crg.__dict__.encode()) + input("\nPress Enter to continue...") + + elif choice == "4": + print("\n\t*** Carriage File ***") + Num = 1 + with open("Carriages", "rb") as f: + while True: + data = f.read(1024) + if not data: + break + else: + Crg = Carriage() + Crg.__dict__.update(eval(data)) + print(f"{Num}.") + Crg.display() + Num += 1 + input("\nPress Enter to continue...") + + elif choice == "5": + listBusiness = LinkedList() + listFirst = LinkedList() + numOfBusiness = 0 + numOfFirst = 0 + with open("Passengers", "rb") as f: + while True: + data = f.read(1024) + if not data: + break + else: + Psg = Passenger() + Psg.__dict__.update(eval(data)) + if Psg.get_ticket_type() == "Business": + listBusiness.add_node(Num) + numOfBusiness += 1 + else: + listFirst.add_node(Num) + numOfFirst += 1 + Num += 1 + print("\n------------------------------------------ ") + print("Linked List - 'Business class'") + listBusiness.display() + print("Overall 'Business':", numOfBusiness, "\n") + print("Linked List - 'First class'") + listFirst.display() + print("Overall 'First':", numOfFirst) + print("------------------------------------------ ") + businessSpace = 0 + firstSpace = 0 + with open("Carriages", "rb") as f: + while True: + data = f.read(1024) + if not data: + break + else: + Crg = Carriage() + Crg.__dict__.update(eval(data)) + if Crg.get_carriage_type() == "Business": + businessSpace += Crg.get_carriage_places() + else: + firstSpace += Crg.get_carriage_places() + businessSpace = math.ceil(businessSpace / 2) + firstSpace = math.ceil(firstSpace / 2) + while True: + print("\n\t*** INNER MENU *** ") + print("1. Distribute 'Business class'") + print("2. Distribute 'First class'") + print("0. Go back ") + inner_choice = input("Your choice:") + if inner_choice == "1": + stackBusiness = Stack() + print("\n------------------------------------------ ") + print("Number of free spaces (Business):", businessSpace) + if numOfBusiness <= businessSpace: + for i in range(numOfBusiness): + distributedPerson = listBusiness.get_first_element() + stackBusiness.push(distributedPerson) + listBusiness.delete_first() + businessSpace -= 1 + print("Free spaces left:", businessSpace) + elif numOfBusiness > businessSpace: + for i in range(businessSpace): + distributedPerson = listBusiness.get_first_element() + stackBusiness.push(distributedPerson) + listBusiness.delete_first() + print("You need", numOfBusiness - businessSpace, "more spaces!") + else: + print("You need", numOfBusiness - businessSpace, "free spaces!") + print("Business class passengers list: ", end="") + stackBusiness.print_stack() + input("\nPress Enter to continue...") + elif inner_choice == "2": + stackFirst = Stack() + print("\n------------------------------------------ ") + print("Number of free spaces (First):", firstSpace) + if numOfFirst <= firstSpace: + for i in range(numOfFirst): + distributedPerson = listFirst.get_first_element() + stackFirst.push(distributedPerson) + listFirst.delete_first() + firstSpace -= 1 + print("Free spaces left:", firstSpace) + elif numOfFirst > firstSpace: + for i in range(firstSpace): + distributedPerson = listFirst.get_first_element() + stackFirst.push(distributedPerson) + listFirst.delete_first() + print("You need", numOfFirst - firstSpace, "more spaces!") + else: + print("You need", numOfFirst - firstSpace, "spaces!") + print("First class passengers list: ", end="") + stackFirst.print_stack() + input("\nPress Enter to continue...") + elif inner_choice == "0": + break + else: + print("\nYour choice is not available in the menu!") + input("\nPress Enter to continue...") + else: + print("\nYour choice is not available in the menu!") + input("\nPress Enter to continue...") + +if __name__ == "__main__": + main()