import itertools import gradio as gr def solve_cryptarithm(equation): # Hilangkan spasi dari input user equation = equation.replace(" ", "") # Pisahkan bagian kiri dan kanan persamaan left_side, right_side = equation.split('=') # Ambil semua huruf unik dari persamaan letters = set(filter(str.isalpha, equation)) letters = ''.join(letters) # Jika huruf terlalu banyak (lebih dari 10), maka tidak mungkin menyelesaikan if len(letters) > 10: return "Terlalu banyak huruf untuk diselesaikan!" # Dapatkan semua kombinasi angka unik untuk huruf digits = '0123456789' for perm in itertools.permutations(digits, len(letters)): # Buat mapping huruf ke angka translation = str.maketrans(letters, ''.join(perm)) # Terjemahkan persamaan ke angka translated_left_side = left_side.translate(translation) translated_right_side = right_side.translate(translation) # Cek apakah ada angka yang dimulai dengan 0 pada posisi pertama if any(part.startswith('0') and len(part) > 1 for part in translated_left_side.split('+') + translated_right_side.split('+')): continue try: # Evaluasi apakah nilai kiri sama dengan nilai kanan if eval(translated_left_side) == eval(translated_right_side): return f"Solusi ditemukan: {translated_left_side} = {translated_right_side}" except: continue return "Tidak ada solusi yang ditemukan." def solve_multiple_equations(equations): results = [] for equation in equations.splitlines(): if equation.strip(): # Hanya memproses baris yang tidak kosong result = solve_cryptarithm(equation) results.append(result) return "\n".join(results) # Membuat antarmuka Gradio iface = gr.Interface( fn=solve_multiple_equations, inputs=gr.Textbox(lines=10, placeholder="Masukkan satu atau beberapa persamaan cryptarithm di sini..."), outputs="text", title="Solver Cryptarithm", description="Masukkan persamaan cryptarithm (misal: SEND + MORE = MONEY) di setiap baris." ) if __name__ == "__main__": iface.launch()