Chyuedu/leetcode_study
0
1import streamlit as st2import pandas as pd3 4CSV_PATH = "leetcode_enriched.csv"5 6# ========== Load Data ==========7df = pd.read_csv(CSV_PATH)8df = df.reset_index(drop=True)9 10# session state11if "index" not in st.session_state:12 st.session_state.index = 013 14# ========== Sidebar Filters ==========15st.sidebar.title("๐ Filters")16 17search = st.sidebar.text_input("Search title / slug")18 19difficulty_filter = st.sidebar.multiselect(20 "Difficulty",21 ["Easy", "Medium", "Hard"],22 default=["Easy", "Medium", "Hard"]23)24 25tag_filter = st.sidebar.text_input("Tag contains (e.g. dp, graph)")26 27# ========== Filtering ==========28filtered = df.copy()29 30if search:31 filtered = filtered[32 filtered["title"].str.contains(search, case=False, na=False) |33 filtered["slug"].str.contains(search, case=False, na=False)34 ]35 36filtered = filtered[filtered["difficulty"].isin(difficulty_filter)]37 38if tag_filter:39 filtered = filtered[40 filtered["tags"].astype(str).str.contains(tag_filter, case=False, na=False)41 ]42 43# reset index for browsing44filtered = filtered.reset_index(drop=True)45 46st.title("๐ LeetCode Manager")47 48st.write(f"Total filtered: {len(filtered)}")49 50# ========== Navigation ==========51if len(filtered) == 0:52 st.warning("No results found.")53 st.stop()54 55idx = st.session_state.index % len(filtered)56row = filtered.iloc[idx]57 58st.subheader(f"{row['id']} - {row['title']}")59st.write(f"Slug: `{row['slug']}`")60 61# ========== Edit Panel ==========62st.divider()63 64difficulty = st.selectbox(65 "Difficulty",66 ["Easy", "Medium", "Hard"],67 index=["Easy", "Medium", "Hard"].index(row["difficulty"])68 if row["difficulty"] in ["Easy", "Medium", "Hard"] else 069)70 71tags = st.text_input("Tags", value=str(row.get("tags", "")))72 73# ========== Save ==========74if st.button("๐พ Save"):75 original_idx = df[df["id"] == row["id"]].index[0]76 df.at[original_idx, "difficulty"] = difficulty77 df.at[original_idx, "tags"] = tags78 df.to_csv(CSV_PATH, index=False)79 st.success("Saved to CSV!")80 81# ========== Navigation buttons ==========82col1, col2, col3 = st.columns(3)83 84with col1:85 if st.button("โฌ
Prev"):86 st.session_state.index -= 187 st.rerun()88 89with col2:90 st.write(f"{idx+1} / {len(filtered)}")91 92with col3:93 if st.button("Next โก"):94 st.session_state.index += 195 st.rerun()