Spaces:
Running
Running
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}") | |