from lib_misc import gcd def is_curious(n, d): assert(len(str(n)) == 2 and len(str(d)) == 2) if n == d: return False for i in range(1, 10): if str(i) in str(n) and str(i) in str(d): try: n_ = int(str(n).replace(str(i), "")) d_ = int(str(d).replace(str(i), "")) except ValueError: return False try: if n_ / d_ == n / d: return True except ZeroDivisionError: return False return False def euler_033(): fs = [(n, d) for n in range(10, 100) for d in range(n, 100) if is_curious(n, d)] n = 1 d = 1 for n_, d_ in fs: n *= n_ d *= d_ return d // gcd(n, d) if __name__ == "__main__": assert(is_curious(49, 98) is True) assert(is_curious(30, 50) is False) print("e033.py: {}".format(euler_033())) assert(euler_033() == 100)