Curta Simulator |verified| [FAST]

This simulator mimics the of the Curta, where you first set digits, then perform an operation. Perfect for understanding how this legendary pocket calculator worked!

# Curta Simulator (Text-Based) # Simulates a mechanical Curta calculator (Type I) # Supports addition, subtraction, multiplication, division, and clearing curta simulator

class CurtaSimulator: def __init__(self): self.register = 0 # Main register (result) self.input_digits = [] # Current input number (up to 11 digits) self.negative = False # Track sign of register def _clear_input(self): self.input_digits = [] def _get_input_value(self): """Convert current input digits to an integer""" if not self.input_digits: return 0 val = int(''.join(map(str, self.input_digits))) return val def add_digit(self, digit): """Add a digit to current input (like turning the setting knob)""" if len(self.input_digits) < 11: # Curta Type I has 11-digit capacity self.input_digits.append(digit) print(f" Input: {self._get_input_value()}") else: print(" Max 11 digits reached.") def clear_input(self): """Clear current input (CR)""" self._clear_input() print(" Input cleared.") def add(self): """Add current input to register""" val = self._get_input_value() self.register += val self._clear_input() print(f" Added {val}. Register = {self.register}") def subtract(self): """Subtract current input from register""" val = self._get_input_value() self.register -= val self._clear_input() print(f" Subtracted {val}. Register = {self.register}") def multiply(self): """Multiply register by current input (simulated)""" val = self._get_input_value() if val != 0: self.register *= val else: print(" Multiplication by zero not allowed (mechanical lock)") self._clear_input() print(f" Multiplied by {val}. Register = {self.register}") def divide(self): """Divide register by current input (simulated)""" val = self._get_input_value() if val == 0: print(" Division by zero not possible.") else: self.register /= val print(f" Divided by {val}. Register = {self.register:.6f}") self._clear_input() def clear_register(self): """Clear main register (CR)""" self.register = 0 self.negative = False print(" Register cleared.") def show(self): """Display current state""" print("\n=== Curta Status ===") print(f"Register: {self.register}") print(f"Current input: {self._get_input_value()}") print("===================") def run_cli(self): """Interactive command-line interface""" print("\n=== CURTA SIMULATOR (Type I) ===") print("Commands:") print(" #<digit> - enter digit (0-9)") print(" clr - clear current input") print(" + - add") print(" - - subtract") print(" * - multiply") print(" / - divide") print(" regclr - clear register") print(" show - show status") print(" quit - exit") print("================================\n") while True: cmd = input("> ").strip().lower() if cmd.startswith("#"): digit = cmd[1:] if digit.isdigit() and len(digit) == 1: self.add_digit(int(digit)) else: print(" Use # followed by a single digit (0-9)") elif cmd == "clr": self.clear_input() elif cmd == "+": self.add() elif cmd == "-": self.subtract() elif cmd == "*": self.multiply() elif cmd == "/": self.divide() elif cmd == "regclr": self.clear_register() elif cmd == "show": self.show() elif cmd == "quit": print("Goodbye!") break else: print(" Unknown command.") This simulator mimics the of the Curta, where