File size: 2,188 Bytes
1fcdf1c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
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()