بازی تجزیه به عوامل اول

در این بازی، یک عدد به شما نمایش داده می‌شود و شما باید آن را به عوامل اول تجزیه کنید.

کد اصلی تجزیه به عوامل اول

sup_chars = {
    "1": "¹",
    "2": "²", 
    "3": "³",
    "4": "⁴",
    "5": "⁵",
    "6": "⁶",
    "7": "⁷",
    "8": "⁸",
    "9": "⁹",
    "0": "⁰"
}

number = int(input("Yek adad vared konid: "))
original_number = number

result = ""

for i in range(2, number + 1):
    count = 0
    
    while number % i == 0:
        count += 1
        number = number // i
    
    if count > 0:
        if count == 1:
            result += f"{i} × "
        else:
            result += f"{i}{sup_chars[str(count)]} × "
            
    if number == 1:
        break

result = result.rstrip(" × ")

print(f"tajzie adad {original_number} barabar ast ba: {result}")




کد بازی تجزیه به عوامل اول

import random
import time

def is_prime(n: int) -> bool:
    """Check if a number is prime."""
    if n < 2:
        return False
    for i in range(2, int(n ** 0.5) + 1):
        if n % i == 0:
            return False
    return True

def get_prime_factors(n: int) -> list[int]:
    """Return a list of prime factors for a given number."""
    factors = []
    i = 2
    while i * i <= n:
        while n % i == 0:
            factors.append(i)
            n = n // i
        i += 1
    if n > 1:
        factors.append(n)
    return factors

def get_random_number(level: int) -> int:
    """Generate a random number based on difficulty level."""
    ranges = {
        1: (10, 100),
        2: (100, 1000),
        3: (1000, 10000)
    }
    min_val, max_val = ranges.get(level, (10, 100))
    return random.randint(min_val, max_val)

def check_answer(number: int, user_factors: list[int]) -> bool:
    """Verify if the user's answer matches the correct prime factors."""
    correct_factors = get_prime_factors(number)
    return sorted(user_factors) == sorted(correct_factors)

def get_hint(number: int, hint_type: int) -> str:
    """Provide a hint based on the hint type selected."""
    factors = get_prime_factors(number)
    hints = {
        1: f"Try dividing by {random.choice([2, 3, 5])}",
        2: f"One of the prime factors is: {random.choice(factors)}",
        3: f"The number has {len(factors)} prime factors"
    }
    return hints.get(hint_type, "Invalid hint type")

def get_valid_input(prompt: str, valid_range: tuple[int, int]) -> int:
    """Get and validate numeric input within a specified range."""
    while True:
        try:
            value = int(input(prompt))
            if valid_range[0] <= value <= valid_range[1]:
                return value
            print(f"Please enter a number between {valid_range[0]} and {valid_range[1]}")
        except ValueError:
            print("Please enter a valid number")

def main() -> None:
    """Main game loop."""
    print("Welcome to Prime Factorization Puzzle - 2 Players!")
    print("1: Beginner")
    print("2: Intermediate") 
    print("3: Advanced")
    
    level = get_valid_input("Choose your level (1-3): ", (1, 3))
    
    player1_name = input("Enter Player 1 name: ").strip()
    player2_name = input("Enter Player 2 name: ").strip()
    player1_score = 0
    player2_score = 0
    round_number = 1
    TIME_LIMIT = 30  # seconds per turn
    
    while True:
        for current_player, score in [(player1_name, player1_score), (player2_name, player2_score)]:
            print(f"\nRound {round_number}: {current_player}'s turn")
            number = get_random_number(level)
            print(f"\nFactorize this number: {number}")
            
            start_time = time.time()
            hints_remaining = 3
            
            while hints_remaining > 0:
                use_hint = input("Do you want to use a hint? (y/n): ").lower().strip()
                if use_hint == 'y':
                    hint_type = get_valid_input("Which hint? (1-3): ", (1, 3))
                    print(get_hint(number, hint_type))
                    hints_remaining -= 1
                    print(f"Hints remaining: {hints_remaining}")
                elif use_hint == 'n':
                    break
                else:
                    print("Please enter 'y' or 'n'")
            
            try:
                remaining_time = max(0, TIME_LIMIT - (time.time() - start_time))
                print(f"Time remaining: {remaining_time:.1f} seconds")
                factors_input = input("Enter the prime factors separated by spaces: ").strip()
                elapsed_time = time.time() - start_time
                
                if elapsed_time > TIME_LIMIT:
                    print("Time's up!")
                    print(f"The correct factorization was: {get_prime_factors(number)}")
                    continue
                
                if not factors_input:
                    print("Please enter some numbers!")
                    continue

                user_factors = [int(x) for x in factors_input.split()]
                
                if check_answer(number, user_factors):
                    points = max(1, int(10 - elapsed_time/3))  # More points for faster answers
                    if current_player == player1_name:
                        player1_score += points
                    else:
                        player2_score += points
                    print(f"Correct! Time taken: {elapsed_time:.1f} seconds")
                    print(f"Points earned: {points}")
                    print(f"Scores - {player1_name}: {player1_score}, {player2_name}: {player2_score}")
                else:
                    print(f"Wrong! The correct factorization was: {get_prime_factors(number)}")
                
            except ValueError:
                print("Invalid input! Please enter numbers separated by spaces.")
                continue
            
        round_number += 1
        while True:
            play_again = input("Continue to next round? (y/n): ").lower().strip()
            if play_again in ['y', 'n']:
                break
            print("Please enter 'y' or 'n'")
            
        if play_again == 'n':
            break
    
    print("\nGame Over!")
    print("Final Scores:")
    print(f"{player1_name}: {player1_score}")
    print(f"{player2_name}: {player2_score}")
    
    if player1_score > player2_score:
        winner = player1_name
    elif player2_score > player1_score:
        winner = player2_name
    else:
        print("It's a tie!")
        return
    
    print(f"Winner: {winner}!")

if __name__ == "__main__":
    main()
بازگشت به صفحه اصلی