import streamlit as st import pandas as pd from itertools import combinations from copy import deepcopy import io st.set_page_config(page_title="🏏 250 Captain–Vice-Captain Generator", layout="wide") st.title("🏏 Generate All 250 Captain–Vice-Captain Combinations") # File upload uploaded_file = st.file_uploader("📤 Upload Excel File (.xlsx)", type=["xlsx"]) if uploaded_file is not None: try: # Read Excel using openpyxl df = pd.read_excel(uploaded_file, engine="openpyxl") st.subheader("📄 Uploaded Excel Preview") st.dataframe(df) # Extract team names from first two columns team_a_names = df.iloc[:, 0].dropna().tolist() team_b_names = df.iloc[:, 1].dropna().tolist() team_a = [{"name": str(name).strip()} for name in team_a_names] team_b = [{"name": str(name).strip()} for name in team_b_names] # Show teams st.write("🔵 **Team A:**", team_a_names) st.write("🟢 **Team B:**", team_b_names) # Create 25 teams (swap 1 member between A & B) all_teams = [] for i in range(5): for j in range(5): new_team = deepcopy(team_a) new_team[i] = deepcopy(team_b[j]) all_teams.append({ "Team Name": f"Team {len(all_teams) + 1}", "Players": new_team }) # Create 250 unique (Captain, Vice-Captain) teams full_team_list = [] team_output_counter = 1 for team in all_teams: player_list = team["Players"] team_name = team["Team Name"] cvc_combos = list(combinations(player_list, 2)) for cap, vc in cvc_combos: if cap['name'] != vc['name']: team_rows = [] for member in player_list: role = "Member" if member['name'] == cap['name']: role = "Captain" elif member['name'] == vc['name']: role = "Vice-Captain" team_rows.append({ "Team": f"{team_name} ({team_output_counter})", "Player": member['name'], "Role": role }) full_team_list.extend(team_rows) team_output_counter += 1 final_df = pd.DataFrame(full_team_list) st.subheader("📋 All 250 Captain–Vice-Captain Combinations") st.dataframe(final_df, use_container_width=True) # Download CSV csv = final_df.to_csv(index=False).encode("utf-8") st.download_button( label="📥 Download CSV", data=csv, file_name="250_captain_vc_teams.csv", mime="text/csv" ) st.success(f"✅ Generated {team_output_counter - 1} Unique Captain–VC Teams") except Exception as e: st.error(f"❌ Error: {e}")