import streamlit as st import math def インデックスから順列を生成する(elements, index): n = len(elements) result = [] elements = sorted(elements) steps = [] while n > 0: factorial = math.factorial(n - 1) pos, index = divmod(index, factorial) result.append(elements.pop(pos)) step_detail = { "ステップ": len(result), "選ばれた位置": pos, "残りのインデックス": index, "現在の順列": result.copy(), "残りの要素": elements.copy() } steps.append(step_detail) n -= 1 return result, steps # Streamlitアプリの設定 st.title("インデックスから順列を生成") # ユーザー入力 elements = st.text_input("要素をカンマ区切りで入力:", "1,2,3,4,5,6") index = st.number_input("インデックスを入力:", min_value=0, value=88, step=1) # 入力をリストに変換 elements = [int(e.strip()) for e in elements.split(",")] # 順列の生成と過程の取得 if st.button("生成"): 生成された順列, 過程 = インデックスから順列を生成する(elements, index) # 結果の表示 st.write(f"生成された順列: {生成された順列}") # 過程の表示 for step in 過程: st.write(f"ステップ {step['ステップ']}:") st.write(f" 選ばれた位置: {step['選ばれた位置']}") st.write(f" 残りのインデックス: {step['残りのインデックス']}") st.write(f" 現在の順列: {step['現在の順列']}") st.write(f" 残りの要素: {step['残りの要素']}")