From 14711aa542684f8a083754cbfe32a023391f932b Mon Sep 17 00:00:00 2001 From: asmitashewale07 Date: Wed, 22 Apr 2026 01:07:49 +0530 Subject: [PATCH 1/4] Add files via upload Video https://drive.google.com/file/d/1Q7rCmfMgquYr9nKYxOTMc4zXalFk51C-/view?usp=sharing --- Demo.docx | Bin 0 -> 15527 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 Demo.docx diff --git a/Demo.docx b/Demo.docx new file mode 100644 index 0000000000000000000000000000000000000000..9f0d8a84a1905c1facc6aaf90a37bce760d3ab0e GIT binary patch literal 15527 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 OfZne~c82|rv;PO?r!kNK literal 0 HcmV?d00001 From 105212ccbb6654067b3a3fa5eeafda3ac7817769 Mon Sep 17 00:00:00 2001 From: asmitashewale07 Date: Wed, 22 Apr 2026 01:20:35 +0530 Subject: [PATCH 2/4] Create README.md --- Team180-TimetableGenerattor/README.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 Team180-TimetableGenerattor/README.md diff --git a/Team180-TimetableGenerattor/README.md b/Team180-TimetableGenerattor/README.md new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/Team180-TimetableGenerattor/README.md @@ -0,0 +1 @@ + From f79d58f7f59de2a27cf188c7e3106e1a82dbe1ab Mon Sep 17 00:00:00 2001 From: asmitashewale07 Date: Wed, 22 Apr 2026 01:42:48 +0530 Subject: [PATCH 3/4] Add files via upload --- Team180-TimetableGenerattor/buffer.py | 211 ++++++++++++++++++++++++++ 1 file changed, 211 insertions(+) create mode 100644 Team180-TimetableGenerattor/buffer.py diff --git a/Team180-TimetableGenerattor/buffer.py b/Team180-TimetableGenerattor/buffer.py new file mode 100644 index 000000000..8cfb2c9c0 --- /dev/null +++ b/Team180-TimetableGenerattor/buffer.py @@ -0,0 +1,211 @@ +import csv +import random +import customtkinter as ctk +from tkinter import ttk, messagebox + +#THEME +ctk.set_appearance_mode("light") +ctk.set_default_color_theme("blue") + + +#SMART GENERATOR +def generate(classes, subjects, teachers, hours, days, slots): + timetable = {c: [["Free"] * slots for _ in days] for c in classes} + subject_count = {c: {sub: 0 for sub in subjects} for c in classes} + teacher_busy = {t: [[False]*slots for _ in days] for t in teachers} + + for c in classes: + for i, sub in enumerate(subjects): + teacher = teachers[i % len(teachers)] + required = hours[i] + + attempts = 0 + while subject_count[c][sub] < required and attempts < 500: + d = random.randint(0, len(days)-1) + s = random.randint(0, slots-1) + + if timetable[c][d][s] != "Free": + attempts += 1 + continue + + if teacher_busy[teacher][d][s]: + attempts += 1 + continue + + # no consecutive same subject + if s > 0 and sub in timetable[c][d][s-1]: + attempts += 1 + continue + + # max 2 per day + if sum(1 for x in timetable[c][d] if sub in x) >= 2: + attempts += 1 + continue + + timetable[c][d][s] = f"{sub} ({teacher})" + teacher_busy[teacher][d][s] = True + subject_count[c][sub] += 1 + + # fallback + if subject_count[c][sub] < required: + for d in range(len(days)): + for s in range(slots): + if timetable[c][d][s] == "Free": + timetable[c][d][s] = f"{sub} ({teacher})" + teacher_busy[teacher][d][s] = True + subject_count[c][sub] += 1 + if subject_count[c][sub] >= required: + break + if subject_count[c][sub] >= required: + break + + return timetable + + +#CSV +def save_csv(timetable, classes, days, slots): + for c in classes: + with open(f"{c}.csv", "w", newline="") as f: + writer = csv.writer(f) + times = [f"{9+i}:00-{10+i}:00" for i in range(slots)] + writer.writerow(["Day"] + times) + + for d in range(len(days)): + writer.writerow([days[d]] + timetable[c][d]) + + messagebox.showinfo("Saved", "CSV files saved successfully!") + + +#UI +def show_ui(): + app = ctk.CTk() + app.geometry("1400x800") + app.title("Smart Timetable Generator") + + timetable_data = {} + + # COLORS (SOFT AESTHETIC) + BG = "#F5F7FB" + PANEL = "#E9EEF6" + CARD = "#FFFFFF" + ACCENT = "#4F8EF7" + TEXT = "#1F2937" + FREE = "#FECACA" + + app.configure(fg_color=BG) + + app.grid_columnconfigure(1, weight=1) + app.grid_rowconfigure(0, weight=1) + + # SIDEBAR + sidebar = ctk.CTkFrame(app, width=300, fg_color=PANEL, corner_radius=15) + sidebar.grid(row=0, column=0, sticky="ns", padx=10, pady=10) + sidebar.grid_propagate(False) + + ctk.CTkLabel(sidebar, text="Input Panel", + text_color=TEXT, + font=("Segoe UI", 20, "bold")).pack(pady=20) + + def create_entry(label): + ctk.CTkLabel(sidebar, text=label, text_color=TEXT).pack(anchor="w", padx=20) + e = ctk.CTkEntry(sidebar, width=240) + e.pack(padx=20, pady=6) + return e + + class_entry = create_entry("Classes (A,B,C)") + subject_entry = create_entry("Subjects") + teacher_entry = create_entry("Teachers") + hours_entry = create_entry("Hours") + days_entry = create_entry("Days") + slots_entry = create_entry("Slots") + + #MAIN AREA + main_area = ctk.CTkFrame(app, fg_color=BG) + main_area.grid(row=0, column=1, sticky="nsew", padx=10, pady=10) + + main_area.grid_rowconfigure(0, weight=1) + main_area.grid_columnconfigure(0, weight=1) + + notebook = ttk.Notebook(main_area) + notebook.grid(row=0, column=0, sticky="nsew") + + #GENERATE + def generate_ui(): + nonlocal timetable_data + + for tab in notebook.tabs(): + notebook.forget(tab) + + try: + classes = [x.strip() for x in class_entry.get().split(",") if x.strip()] + subjects = [x.strip() for x in subject_entry.get().split(",") if x.strip()] + teachers = [x.strip() for x in teacher_entry.get().split(",") if x.strip()] + days = [x.strip() for x in days_entry.get().split(",") if x.strip()] + hours = [int(x.strip()) for x in hours_entry.get().split(",")] + slots = int(slots_entry.get()) + + if len(subjects) != len(hours): + messagebox.showerror("Error", "Subjects and hours must match!") + return + + if sum(hours) > len(days) * slots: + messagebox.showerror("Error", "Too many hours!") + return + + except: + messagebox.showerror("Error", "Invalid input") + return + + timetable_data = generate(classes, subjects, teachers, hours, days, slots) + + for c in classes: + frame = ctk.CTkFrame(notebook, fg_color=BG) + notebook.add(frame, text=c) + + scroll = ctk.CTkScrollableFrame(frame, fg_color=BG) + scroll.pack(fill="both", expand=True, padx=10, pady=10) + + times = [f"{9+i}:00-{10+i}:00" for i in range(slots)] + + # HEADER + for s in range(slots): + ctk.CTkLabel(scroll, text=times[s], + fg_color=ACCENT, text_color="white", + corner_radius=8, width=130).grid(row=0, column=s+1, padx=6, pady=6) + + for d in range(len(days)): + ctk.CTkLabel(scroll, text=days[d], + fg_color="#CBD5F5", text_color=TEXT, + corner_radius=8, width=100).grid(row=d+1, column=0, padx=6, pady=6) + + for s in range(slots): + val = timetable_data[c][d][s] + color = CARD if val != "Free" else FREE + + ctk.CTkLabel(scroll, + text=val.replace(" (", "\n("), + width=130, + height=80, + corner_radius=12, + fg_color=color, + text_color=TEXT).grid(row=d+1, column=s+1, padx=6, pady=6) + + save_btn.configure(command=lambda: save_csv(timetable_data, classes, days, slots)) + + #BUTTONS + ctk.CTkButton(sidebar, text="Generate", + command=generate_ui, + fg_color=ACCENT, + height=40).pack(pady=15) + + save_btn = ctk.CTkButton(sidebar, text="Save CSV", + fg_color="#34D399", + height=40) + save_btn.pack(pady=5) + + app.mainloop() + + +#MAIN +if __name__ == "__main__": + show_ui() From 2f5e012d58c6bfa8691ac6307b91ced45bf5a772 Mon Sep 17 00:00:00 2001 From: asmitashewale07 Date: Wed, 22 Apr 2026 08:37:19 +0530 Subject: [PATCH 4/4] README.md --- Team180-TimetableGenerattor/README.md | 46 +++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/Team180-TimetableGenerattor/README.md b/Team180-TimetableGenerattor/README.md index 8b1378917..b40fb7167 100644 --- a/Team180-TimetableGenerattor/README.md +++ b/Team180-TimetableGenerattor/README.md @@ -1 +1,47 @@ +#Buffer 7.0 project +##Team Members +- Shewale Asmita +- Vaishampayan Dhanashree + + Problem statement: +Creating a lecture timetable manually can be time-consuming and error-prone. Teachers and students often face overlapping classes, some subjects don’t get enough periods, and too many lectures in a day can make schedules chaotic. The goal of this project is to build a system that can automatically generate a balanced timetable, making sure lectures don’t overlap, every subject gets the required hours, and daily schedules stay manageable. This will use data structures and algorithms to solve the problem efficiently for both classes and teachers. +Description of data structures used: +Dictionary (for classes, teachers, subjects): used for fast lookup and organized mapping (e.g., class → timetable, teacher → availability). +2D List (matrix): used to represent the timetable as days × slots, making it easy to access and update any position directly. +Nested Dictionary (subject count): used to track how many times each subject is assigned, ensuring required hours are met. +2D Boolean List (teacher availability): used to quickly check if a teacher is free or busy at a given time slot. +Greedy + Random approach: used to assign slots efficiently while trying to satisfy constraints without heavy computation. +Constraint checking logic: ensures no clashes, no repetition, and balanced scheduling. +Limited attempts (loop control): prevents infinite loops and keeps the algorithm efficient. + +1. Backend Logic +Uses dictionary (hash map) to store timetable → fast access using class name +Uses 2D lists for each class → represents days × slots structure +Uses random allocation to assign subjects → avoids fixed/manual scheduling +Uses constraint checking: ○ Teacher availability (teacher_busy) + No slot clash + No consecutive same subject + Max 2 lectures per subject per day + +Uses loop + attempts limit (500) → prevents infinite loops +Uses fallback logic → fills remaining slots if constraints fail +Uses modulus (%) to assign teachers to subjects cyclically + + 2. Input +From UI (user enters): + Classes (A, B, C…) + Subjects + Teachers + Hours per subject + Days (Mon, Tue…) + Number of slots per day + + 3. Output + Timetable (dictionary format internally) + GUI display (tab-wise for each class using table layout) + CSV files for each class + Visual output: ○ Free slots highlighted + Subject + Teacher shown in each cell +#Demo Video Link +https://drive.google.com/file/d/1Q7rCmfMgquYr9nKYxOTMc4zXalFk51C-/view?usp=drive_link