def base_types(value, base): if isinstance(value, Fraction) and isinstance(base, Fraction): result = int(str(int(value)), int(base)) # value must be string return Fraction(result, 1) elif isinstance(value, Fraction) and isinstance(base, str): return [Fraction(int(str(int(value)), toOrd(c))) for c in base] elif isinstance(value, str) and isinstance(base, Fraction): result = int(value, int(base)) return Fraction(result, 1) elif isinstance(value, str) and isinstance(base, str): if len(base) == 1: return base_types(value, Fraction(toOrd(base))) else: return [base_types(value, Fraction(toOrd(b))) for b in base] elif isinstance(value, Fraction) and isinstance(base, list): return [base_types(value, b) for b in base] elif isinstance(value, list) and isinstance(base, Fraction): return [base_types(v, base) for v in value] elif isinstance(value, str) and isinstance(base, list): return [base_types(value, b) for b in base] elif isinstance(value, list) and isinstance(base, str): return [base_types(v, base) for v in value] # base can be a char, use codepage value to convert elif isinstance(value, list) and isinstance(base, list): if len(value) > len(base): return [base_types(i, j) for (i, j) in zip(value, cycle(base))] else: return [base_types(i, j) for (i, j) in zip(cycle(value), base)]
def addition_types(x, y): if isinstance(x, Fraction) and isinstance(y, Fraction): return x + y elif isinstance(x, Fraction) and isinstance(y, str): return ''.join([toChr(toOrd(c) + int(x)) for c in y]) elif isinstance(x, str) and isinstance(y, Fraction): return ''.join([toChr(toOrd(c) + int(y)) for c in x]) elif isinstance(x, str) and isinstance(y, str): return x + y elif isinstance(x, Fraction) and isinstance(y, list): return [addition_types(x, i) for i in y] elif isinstance(x, list) and isinstance(y, Fraction): return [addition_types(i, y) for i in x] elif isinstance(x, str) and isinstance(y, list): return [addition_types(x, i) for i in y] elif isinstance(x, list) and isinstance(y, str): return [addition_types(i, y) for i in x] elif isinstance(x, list) and isinstance(y, list): if len(x) > len(y): return [addition_types(i, j) for (i, j) in zip(x, cycle(y))] else: return [addition_types(i, j) for (i, j) in zip(cycle(x), y)]
def make_ord_types(x): if isinstance(x, Fraction): return [Fraction(toOrd(c)) for c in str(x)] elif isinstance(x, str): return [Fraction(toOrd(c)) for c in x] elif isinstance(x, list): return [make_ord_types(i) for i in x]
def toInt(x): if isinstance(x, Fraction): return int(x) elif isinstance(x, str): return toOrd(x) elif isinstance(x, list): return len(x)
def index_types(x, y): if isinstance(x, Fraction) and isinstance(y, Fraction): return x.numerator if isTrue(y) else x.denominator elif isinstance(x, Fraction) and isinstance(y, str): return [x.numerator if isTrue(c) else x.denominator for c in y] elif isinstance(x, str) and isinstance(y, Fraction): return x[int(y) % len(x)] elif isinstance(x, str) and isinstance(y, str): return [x[toOrd(c) % len(x)] for c in y] elif isinstance(x, Fraction) and isinstance(y, list): return [index_types(x, i) for i in y] elif isinstance(x, list) and isinstance(y, Fraction): return x[int(y)] elif isinstance(x, str) and isinstance(y, list): return [[index_types(x, i)] for i in y] elif isinstance(x, list) and isinstance(y, str): return [[index_types(i, y)] for i in x] elif isinstance(x, list) and isinstance(y, list): if len(x) > len(y): return [index_types(i, j) for (i, j) in zip(x, cycle(y))] else: return [index_types(i, j) for (i, j) in zip(cycle(x), y)]
def apply_not_types(x): if isinstance(x, Fraction): return Fraction(1) if x == 0 else Fraction(0) elif isinstance(x, str): return [apply_not_types(Fraction(toOrd(c))) for c in x] elif isinstance(x, list): return [apply_not_types(i) for i in x]
def dec_types(x): if isinstance(x, Fraction): return x - 1 elif isinstance(x, str): return ''.join([toChr(toOrd(c) - 1) for c in x]) elif isinstance(x, list): return [dec_types(i) for i in x]
def prime_types(x): if isinstance(x, Fraction): result = nth_prime_number(int(x)) return Fraction(result) elif isinstance(x, str): result = nth_prime_number(toOrd(x)) return Fraction(result) elif isinstance(x, list): return [prime_types(i) for i in x]
def sci_format_types(x): if isinstance(x, Fraction): if x == int(x): return Fraction(10**x).limit_denominator(10**abs(int(x))) else: return Fraction(10**x).limit_denominator(10**abs(int(x)) * 1000) elif isinstance(x, str): return [sci_format_types(Fraction(toOrd(c))) for c in x] elif isinstance(x, list): return [sci_format_types(i) for i in x]
def factorial_types(x): if isinstance(x, Fraction): fact = Fraction(1) for i in range(1, 1 + int(x)): fact = fact * i return fact elif isinstance(x, str): return [factorial_types(Fraction(toOrd(c))) for c in x] elif isinstance(x, list): return [factorial_types(i) for i in x]
def make_sum_types(x): if isinstance(x, Fraction): digits = str(int(x)) result = 0 for d in digits: result += int(d) return Fraction(result) elif isinstance(x, str): return Fraction(sum([int(toOrd(c)) for c in x])) elif isinstance(x, list): return Fraction(sum([make_sum_types(i) for i in x]))
def power_types(x, y): if isinstance(x, Fraction) and isinstance(y, Fraction): return x**y elif isinstance(x, Fraction) and isinstance(y, str): return [Fraction(x**toOrd(c)) for c in y] elif isinstance(x, str) and isinstance(y, Fraction): return [Fraction(toOrd(c)**y) for c in x] elif isinstance(x, str) and isinstance(y, str): if len(x) > len(y): return [ Fraction(toOrd(i)**toOrd(j)) for (i, j) in zip(x, cycle(y)) ] else: return [ Fraction(toOrd(i)**toOrd(j)) for (i, j) in zip(cycle(x), y) ] elif isinstance(x, Fraction) and isinstance(y, list): return [power_types(x, i) for i in y] elif isinstance(x, list) and isinstance(y, Fraction): return [power_types(i, y) for i in x] elif isinstance(x, str) and isinstance(y, list): return [[power_types(x, i)] for i in y] elif isinstance(x, list) and isinstance(y, str): return [[power_types(i, y)] for i in x] elif isinstance(x, list) and isinstance(y, list): if len(x) > len(y): return [power_types(i, j) for (i, j) in zip(x, cycle(y))] else: return [power_types(i, j) for (i, j) in zip(cycle(x), y)]
def fraction_types(x, y): if isinstance(x, Fraction) and isinstance(y, Fraction): return Fraction(x, y).limit_denominator() elif isinstance(x, Fraction) and isinstance(y, str): return [Fraction(x, toOrd(c)) for c in y] elif isinstance(x, str) and isinstance(y, Fraction): return [Fraction(toOrd(c), y) for c in x] elif isinstance(x, str) and isinstance(y, str): if len(x) > len(y): return [ Fraction(toOrd(i), toOrd(j)) for (i, j) in zip(x, cycle(y)) ] else: return [ Fraction(toOrd(i), toOrd(j)) for (i, j) in zip(cycle(x), y) ] elif isinstance(x, Fraction) and isinstance(y, list): return [fraction_types(x, i) for i in y] elif isinstance(x, list) and isinstance(y, Fraction): return [fraction_types(i, y) for i in x] elif isinstance(x, str) and isinstance(y, list): return [[fraction_types(x, i)] for i in y] elif isinstance(x, list) and isinstance(y, str): return [[fraction_types(i, y)] for i in x] elif isinstance(x, list) and isinstance(y, list): if len(x) > len(y): return [fraction_types(i, j) for (i, j) in zip(x, cycle(y))] else: return [fraction_types(i, j) for (i, j) in zip(cycle(x), y)]
def module_types(x, y): if isinstance(x, Fraction) and isinstance(y, Fraction): return x % y elif isinstance(x, Fraction) and isinstance(y, str): return [Fraction(x % toOrd(c)) for c in y] elif isinstance(x, str) and isinstance(y, Fraction): return [Fraction(toOrd(c) % y) for c in x] elif isinstance(x, str) and isinstance(y, str): if len(x) > len(y): return [ Fraction(toOrd(i) % toOrd(j)) for (i, j) in zip(x, cycle(y)) ] else: return [ Fraction(toOrd(i) % toOrd(j)) for (i, j) in zip(cycle(x), y) ] elif isinstance(x, Fraction) and isinstance(y, list): return [module_types(x, i) for i in y] elif isinstance(x, list) and isinstance(y, Fraction): return [module_types(i, y) for i in x] elif isinstance(x, str) and isinstance(y, list): return [[module_types(x, i)] for i in y] elif isinstance(x, list) and isinstance(y, str): return [[module_types(i, y)] for i in x] elif isinstance(x, list) and isinstance(y, list): if len(x) > len(y): return [module_types(i, j) for (i, j) in zip(x, cycle(y))] else: return [module_types(i, j) for (i, j) in zip(cycle(x), y)]
def quocient_types(x, y): if isinstance(x, Fraction) and isinstance(y, Fraction): return Fraction(x // y) elif isinstance(x, Fraction) and isinstance(y, str): return [Fraction(x // toOrd(c)) for c in y] elif isinstance(x, str) and isinstance(y, Fraction): return [Fraction(toOrd(c) // y) for c in x] elif isinstance(x, str) and isinstance(y, str): if len(x) > len(y): return [ Fraction(toOrd(i) // toOrd(j)) for (i, j) in zip(x, cycle(y)) ] else: return [ Fraction(toOrd(i) // toOrd(j)) for (i, j) in zip(cycle(x), y) ] elif isinstance(x, Fraction) and isinstance(y, list): return [quocient_types(x, i) for i in y] elif isinstance(x, list) and isinstance(y, Fraction): return [quocient_types(i, y) for i in x] elif isinstance(x, str) and isinstance(y, list): return [[quocient_types(x, i)] for i in y] elif isinstance(x, list) and isinstance(y, str): return [[quocient_types(i, y)] for i in x] elif isinstance(x, list) and isinstance(y, list): if len(x) > len(y): return [quocient_types(i, j) for (i, j) in zip(x, cycle(y))] else: return [quocient_types(i, j) for (i, j) in zip(cycle(x), y)]
def less_than_types(x, y): if isinstance(x, Fraction) and isinstance(y, Fraction): return Fraction(1) if x < y else Fraction(0) elif isinstance(x, Fraction) and isinstance(y, str): return [Fraction(1) if x < toOrd(c) else Fraction(0) for c in y] elif isinstance(x, str) and isinstance(y, Fraction): return [Fraction(1) if toOrd(c) < y else Fraction(0) for c in x] elif isinstance(x, str) and isinstance(y, str): if len(x) > len(y): return [ Fraction(1) if i < j else Fraction(0) for (i, j) in zip(x, cycle(y)) ] else: return [ Fraction(1) if i < j else Fraction(0) for (i, j) in zip(cycle(x), y) ] elif isinstance(x, Fraction) and isinstance(y, list): return [less_than_types(x, i) for i in y] elif isinstance(x, list) and isinstance(y, Fraction): return [less_than_types(i, y) for i in x] elif isinstance(x, str) and isinstance(y, list): return [[less_than_types(x, i)] for i in y] elif isinstance(x, list) and isinstance(y, str): return [[less_than_types(i, y)] for i in x] elif isinstance(x, list) and isinstance(y, list): if len(x) > len(y): return [less_than_types(i, j) for (i, j) in zip(x, cycle(y))] else: return [less_than_types(i, j) for (i, j) in zip(cycle(x), y)]
def different_types(x, y): if isinstance(x, Fraction) and isinstance(y, Fraction): return Fraction(1) if x != y else Fraction(0) elif isinstance(x, Fraction) and isinstance(y, str): return [Fraction(1) if x != toOrd(c) else Fraction(0) for c in y] elif isinstance(x, str) and isinstance(y, Fraction): return [Fraction(1) if toOrd(c) != y else Fraction(0) for c in x] elif isinstance(x, str) and isinstance(y, str): if len(x) > len(y): return [ Fraction(1) if i != j else Fraction(0) for (i, j) in zip(x, cycle(y)) ] else: return [ Fraction(1) if i != j else Fraction(0) for (i, j) in zip(cycle(x), y) ] elif isinstance(x, Fraction) and isinstance(y, list): return [different_types(x, i) for i in y] elif isinstance(x, list) and isinstance(y, Fraction): return [different_types(i, y) for i in x] elif isinstance(x, str) and isinstance(y, list): return [[different_types(x, i)] for i in y] elif isinstance(x, list) and isinstance(y, str): return [[different_types(i, y)] for i in x] elif isinstance(x, list) and isinstance(y, list): if len(x) > len(y): return [different_types(i, j) for (i, j) in zip(x, cycle(y))] else: return [different_types(i, j) for (i, j) in zip(cycle(x), y)]
def greater_eq_than_types(x, y): if isinstance(x, Fraction) and isinstance(y, Fraction): return Fraction(1) if x >= y else Fraction(0) elif isinstance(x, Fraction) and isinstance(y, str): return [Fraction(1) if x >= toOrd(c) else Fraction(0) for c in y] elif isinstance(x, str) and isinstance(y, Fraction): return [Fraction(1) if toOrd(c) >= y else Fraction(0) for c in x] elif isinstance(x, str) and isinstance(y, str): if len(x) > len(y): return [ Fraction(1) if i >= j else Fraction(0) for (i, j) in zip(x, cycle(y)) ] else: return [ Fraction(1) if i >= j else Fraction(0) for (i, j) in zip(cycle(x), y) ] elif isinstance(x, Fraction) and isinstance(y, list): return [greater_eq_than_types(x, i) for i in y] elif isinstance(x, list) and isinstance(y, Fraction): return [greater_eq_than_types(i, y) for i in x] elif isinstance(x, str) and isinstance(y, list): return [[greater_eq_than_types(x, i)] for i in y] elif isinstance(x, list) and isinstance(y, str): return [[greater_eq_than_types(i, y)] for i in x] elif isinstance(x, list) and isinstance(y, list): if len(x) > len(y): return [greater_eq_than_types(i, j) for (i, j) in zip(x, cycle(y))] else: return [greater_eq_than_types(i, j) for (i, j) in zip(cycle(x), y)]
def equal_types(x, y): if isinstance(x, Fraction) and isinstance(y, Fraction): return Fraction(1) if x == y else Fraction(0) elif isinstance(x, Fraction) and isinstance(y, str): return [Fraction(1) if x == toOrd(c) else Fraction(0) for c in y] elif isinstance(x, str) and isinstance(y, Fraction): return [Fraction(1) if toOrd(c) == y else Fraction(0) for c in x] elif isinstance(x, str) and isinstance(y, str): if len(x) > len(y): return [ Fraction(1) if i == j else Fraction(0) for (i, j) in zip(x, cycle(y)) ] else: return [ Fraction(1) if i == j else Fraction(0) for (i, j) in zip(cycle(x), y) ] elif isinstance(x, Fraction) and isinstance(y, list): return [equal_types(x, i) for i in y] elif isinstance(x, list) and isinstance(y, Fraction): return [equal_types(i, y) for i in x] elif isinstance(x, str) and isinstance(y, list): return [[equal_types(x, i)] for i in y] elif isinstance(x, list) and isinstance(y, str): return [[equal_types(i, y)] for i in x] elif isinstance(x, list) and isinstance(y, list): if len(x) > len(y): return [equal_types(i, j) for (i, j) in zip(x, cycle(y))] else: return [equal_types(i, j) for (i, j) in zip(cycle(x), y)]
def make_any_types(x): if isinstance(x, Fraction): return Fraction(1) if x != 0 else Fraction(0) elif isinstance(x, str): ords = [int(toOrd(c)) for c in x] result = 0 for d in ords: result += d return Fraction(1) if result > 0 else Fraction(0) elif isinstance(x, list): prods = [make_any_types(i) for i in x] result = 0 for d in prods: result += d return Fraction(1) if result > 0 else Fraction(0)
def make_prod_types(x): if isinstance(x, Fraction): digits = str(int(x)) result = 1 for d in digits: result *= int(d) return Fraction(result) elif isinstance(x, str): ords = [int(toOrd(c)) for c in x] result = 1 for d in ords: result *= d return Fraction(result) elif isinstance(x, list): prods = [make_prod_types(i) for i in x] result = 1 for d in prods: result *= d return Fraction(result)
def makeRange1_types(x): if isinstance(x, Fraction): return [Fraction(i) for i in range(1, int(x) + 1)] elif isinstance(x, str): if x.islower(): id_a = toOrd('a') id_x = toOrd(x) return list(codepage[id_a:id_x + 1]) elif x.isupper(): id_A = toOrd('A') id_x = toOrd(x) return list(codepage[id_A:id_x + 1]) elif x.isdigit(): id_0 = toOrd('1') id_x = toOrd(x) return list(codepage[id_0:id_x + 1]) else: return '' # otherwise do nothing elif isinstance(x, list): return [makeRange1_types(i) for i in x]
def apply_and_types(x, y): if isinstance(x, Fraction) and isinstance(y, Fraction): return Fraction(1) if x != 0 and y != 0 else Fraction(0) elif isinstance(x, Fraction) and isinstance(y, str): return [ Fraction(1) if x != 0 and toOrd(c) != 0 else Fraction(0) for c in y ] elif isinstance(x, str) and isinstance(y, Fraction): return [ Fraction(1) if toOrd(c) != 0 and y != 0 else Fraction(0) for c in x ] elif isinstance(x, str) and isinstance(y, str): if len(x) > len(y): return [ Fraction(1) if toOrd(i) != 0 and toOrd(j) != 0 else Fraction(0) for (i, j) in zip(x, cycle(y)) ] else: return [ Fraction(1) if toOrd(i) != 0 and toOrd(j) != 0 else Fraction(0) for (i, j) in zip(cycle(x), y) ] elif isinstance(x, Fraction) and isinstance(y, list): return [apply_and_types(x, i) for i in y] elif isinstance(x, list) and isinstance(y, Fraction): return [apply_and_types(i, y) for i in x] elif isinstance(x, str) and isinstance(y, list): return [[apply_and_types(x, i)] for i in y] elif isinstance(x, list) and isinstance(y, str): return [[apply_and_types(i, y)] for i in x] elif isinstance(x, list) and isinstance(y, list): if len(x) > len(y): return [apply_and_types(i, j) for (i, j) in zip(x, cycle(y))] else: return [apply_and_types(i, j) for (i, j) in zip(cycle(x), y)]