# your code goes here
class MenuItem:
def __init__(self, name, price):
self.name = name
self.price = price
class Bill:
def __init__(self, table_number, server_name):
self.table_number = table_number
self.server_name = server_name
self.items = []
self.gst_rate = 0.125
def add_item(self, item):
self.items.append(item)
def calculate_total(self):
subtotal = sum(item.price for item in self.items)
gst = subtotal * self.gst_rate
total = subtotal
return subtotal, gst, total
def print_bill(self):
print(f"Table Number: {self.table_number}")
print(f"Server: {self.server_name}")
print("Items:")
for item in self.items:
print(f" - {item.name}: ${item.price:.2f}")
subtotal, gst, total = self.calculate_total()
print(f"Subtotal: ${subtotal:.2f}")
print(f"GST (12.5%): ${gst:.2f}")
print(f"Total: ${total:.2f}")
class Restaurant:
def __init__(self):
self.menu = []
self.bills = []
def add_menu_item(self, name, price):
self.menu.append(MenuItem(name, price))
def create_bill(self, table_number, server_name):
bill = Bill(table_number, server_name)
self.bills.append(bill)
return bill
def split_bill(self, bill, num_splits):
split_bills = []
for _ in range(num_splits):
split_bills.append(Bill(bill.table_number, bill.server_name))
for item in bill.items:
for split_bill in split_bills:
split_bill.add_item(item)
return split_bills
# Example usage
restaurant = Restaurant()
restaurant.add_menu_item("Pasta", 12.00)
restaurant.add_menu_item("Pizza", 15.00)
restaurant.add_menu_item("Salad", 8.00)
# Create a bill for table 1
bill = restaurant.create_bill(1, "John")
# Add items to the bill
bill.add_item(restaurant.menu[0]) # Pasta
bill.add_item(restaurant.menu[1]) # Pizza
# Print the bill
bill.print_bill()
# Split the bill into 2
split_bills = restaurant.split_bill(bill, 2)
for i, split_bill in enumerate(split_bills, 1):
print(f"\nSplit Bill {i}:")
split_bill.print_bill()
IyB5b3VyIGNvZGUgZ29lcyBoZXJlCgpjbGFzcyBNZW51SXRlbToKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBwcmljZSk6CiAgICAgICAgc2VsZi5uYW1lID0gbmFtZQogICAgICAgIHNlbGYucHJpY2UgPSBwcmljZQoKY2xhc3MgQmlsbDoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0YWJsZV9udW1iZXIsIHNlcnZlcl9uYW1lKToKICAgICAgICBzZWxmLnRhYmxlX251bWJlciA9IHRhYmxlX251bWJlcgogICAgICAgIHNlbGYuc2VydmVyX25hbWUgPSBzZXJ2ZXJfbmFtZQogICAgICAgIHNlbGYuaXRlbXMgPSBbXQogICAgICAgIHNlbGYuZ3N0X3JhdGUgPSAwLjEyNQoKICAgIGRlZiBhZGRfaXRlbShzZWxmLCBpdGVtKToKICAgICAgICBzZWxmLml0ZW1zLmFwcGVuZChpdGVtKQoKICAgIGRlZiBjYWxjdWxhdGVfdG90YWwoc2VsZik6CiAgICAgICAgc3VidG90YWwgPSBzdW0oaXRlbS5wcmljZSBmb3IgaXRlbSBpbiBzZWxmLml0ZW1zKQogICAgICAgIGdzdCA9IHN1YnRvdGFsICogc2VsZi5nc3RfcmF0ZQogICAgICAgIHRvdGFsID0gc3VidG90YWwKICAgICAgICByZXR1cm4gc3VidG90YWwsIGdzdCwgdG90YWwKCiAgICBkZWYgcHJpbnRfYmlsbChzZWxmKToKICAgICAgICBwcmludChmIlRhYmxlIE51bWJlcjoge3NlbGYudGFibGVfbnVtYmVyfSIpCiAgICAgICAgcHJpbnQoZiJTZXJ2ZXI6IHtzZWxmLnNlcnZlcl9uYW1lfSIpCiAgICAgICAgcHJpbnQoIkl0ZW1zOiIpCiAgICAgICAgZm9yIGl0ZW0gaW4gc2VsZi5pdGVtczoKICAgICAgICAgICAgcHJpbnQoZiIgLSB7aXRlbS5uYW1lfTogJHtpdGVtLnByaWNlOi4yZn0iKQogICAgICAgIHN1YnRvdGFsLCBnc3QsIHRvdGFsID0gc2VsZi5jYWxjdWxhdGVfdG90YWwoKQogICAgICAgIHByaW50KGYiU3VidG90YWw6ICR7c3VidG90YWw6LjJmfSIpCiAgICAgICAgcHJpbnQoZiJHU1QgKDEyLjUlKTogJHtnc3Q6LjJmfSIpCiAgICAgICAgcHJpbnQoZiJUb3RhbDogJHt0b3RhbDouMmZ9IikKCmNsYXNzIFJlc3RhdXJhbnQ6CiAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgc2VsZi5tZW51ID0gW10KICAgICAgICBzZWxmLmJpbGxzID0gW10KCiAgICBkZWYgYWRkX21lbnVfaXRlbShzZWxmLCBuYW1lLCBwcmljZSk6CiAgICAgICAgc2VsZi5tZW51LmFwcGVuZChNZW51SXRlbShuYW1lLCBwcmljZSkpCgogICAgZGVmIGNyZWF0ZV9iaWxsKHNlbGYsIHRhYmxlX251bWJlciwgc2VydmVyX25hbWUpOgogICAgICAgIGJpbGwgPSBCaWxsKHRhYmxlX251bWJlciwgc2VydmVyX25hbWUpCiAgICAgICAgc2VsZi5iaWxscy5hcHBlbmQoYmlsbCkKICAgICAgICByZXR1cm4gYmlsbAoKICAgIGRlZiBzcGxpdF9iaWxsKHNlbGYsIGJpbGwsIG51bV9zcGxpdHMpOgogICAgICAgIHNwbGl0X2JpbGxzID0gW10KICAgICAgICBmb3IgXyBpbiByYW5nZShudW1fc3BsaXRzKToKICAgICAgICAgICAgc3BsaXRfYmlsbHMuYXBwZW5kKEJpbGwoYmlsbC50YWJsZV9udW1iZXIsIGJpbGwuc2VydmVyX25hbWUpKQogICAgICAgIGZvciBpdGVtIGluIGJpbGwuaXRlbXM6CiAgICAgICAgICAgIGZvciBzcGxpdF9iaWxsIGluIHNwbGl0X2JpbGxzOgogICAgICAgICAgICAgICAgc3BsaXRfYmlsbC5hZGRfaXRlbShpdGVtKQogICAgICAgIHJldHVybiBzcGxpdF9iaWxscwoKIyBFeGFtcGxlIHVzYWdlCnJlc3RhdXJhbnQgPSBSZXN0YXVyYW50KCkKcmVzdGF1cmFudC5hZGRfbWVudV9pdGVtKCJQYXN0YSIsIDEyLjAwKQpyZXN0YXVyYW50LmFkZF9tZW51X2l0ZW0oIlBpenphIiwgMTUuMDApCnJlc3RhdXJhbnQuYWRkX21lbnVfaXRlbSgiU2FsYWQiLCA4LjAwKQoKIyBDcmVhdGUgYSBiaWxsIGZvciB0YWJsZSAxCmJpbGwgPSByZXN0YXVyYW50LmNyZWF0ZV9iaWxsKDEsICJKb2huIikKCiMgQWRkIGl0ZW1zIHRvIHRoZSBiaWxsCmJpbGwuYWRkX2l0ZW0ocmVzdGF1cmFudC5tZW51WzBdKSAgIyBQYXN0YQpiaWxsLmFkZF9pdGVtKHJlc3RhdXJhbnQubWVudVsxXSkgICMgUGl6emEKCiMgUHJpbnQgdGhlIGJpbGwKYmlsbC5wcmludF9iaWxsKCkKCiMgU3BsaXQgdGhlIGJpbGwgaW50byAyCnNwbGl0X2JpbGxzID0gcmVzdGF1cmFudC5zcGxpdF9iaWxsKGJpbGwsIDIpCmZvciBpLCBzcGxpdF9iaWxsIGluIGVudW1lcmF0ZShzcGxpdF9iaWxscywgMSk6CiAgICBwcmludChmIlxuU3BsaXQgQmlsbCB7aX06IikKICAgIHNwbGl0X2JpbGwucHJpbnRfYmlsbCgp