def containsOnlyDigitsOperator(n, k): if isinstance(k, (mpf, int, float)): k = getMPFIntegerAsString(k) for c in getMPFIntegerAsString(n): if c not in k: return 0 return 1
def containsAnyDigitsOperator(n, k): n = getMPFIntegerAsString(n) if isinstance(k, (mpf, int, float)): k = getMPFIntegerAsString(k) for c in k: if c in n: return 1 return 0
def isDigitalPermutationOperator(n, k): str1 = getMPFIntegerAsString(n) str2 = getMPFIntegerAsString(k) if len(str1) != len(str2): return 0 if sorted(str1) != sorted(str2): return 0 return 1
def countDigitsOperator(n, k): n = getMPFIntegerAsString(n) if isinstance(k, (mpf, int, float)): k = set([char for char in getMPFIntegerAsString(k)]) result = 0 for c in k: result += n.count(c) return result
def sumDigits(n): result = 0 for c in getMPFIntegerAsString(n): result = fadd(result, int(c)) return result
def isDecreasing(n): n = getMPFIntegerAsString(n) for i in range(1, len(n)): if n[i] > n[i - 1]: return 0 return 1
def isPalindrome(n): result = getMPFIntegerAsString(n) length = len(result) for i in range(0, length // 2): if result[i] != result[-(i + 1)]: return 0 return 1
def getDigitList(n, dropZeroes=False): result = [] for c in getMPFIntegerAsString(n): if dropZeroes and c == '0': continue result.append(int(c)) return result
def getCyclicPermutationsOperator(n): result = [n] n = getMPFIntegerAsString(n) for _ in range(len(n) - 1): n = n[1:] + n[:1] result.append(mpmathify(n)) return result
def replaceDigitsOperator(n, source, replace): n = getMPFIntegerAsString(n) if source < 0: raise ValueError('source value must be a positive integer') if replace < 0: raise ValueError('replace value must be a positive integer') return mpmathify(n.replace(str(int(source)), str(int(replace))))
def isStepNumber(n): if n < 10: return 0 n = getMPFIntegerAsString(n) for i in range(1, len(n)): if abs(int(n[i]) - int(n[i - 1])) != 1: return 0 return 1
def rotateDigitsRight(n, k): if k < 0: return rotateDigitsLeft(n, fneg(k)) n = getMPFIntegerAsString(n) if k > len(n): fmod(k, len(n)) rotate = int(k) n = n[-rotate:] + n[:-rotate] return mpmathify(n)
def isPandigital(n): n = getMPFIntegerAsString(n) length = len(n) if length < 10: return 0 digitsToCheck = string.digits for c in digitsToCheck: if c not in n: return 0 return 1
def getDecimalDigitList(n, k): result = [] setAccuracy(k) digits = floor(log10(n)) if digits < 0: for _ in arange(fsub(fabs(digits), 1)): result.append(0) k = fsub(k, fsub(fabs(digits), 1)) value = fmul(n, power(10, fsub(k, fadd(digits, 1)))) for c in getMPFIntegerAsString(floor(value)): result.append(int(c)) return result
def countDifferentDigitsOperator(n): return len(list(set(getMPFIntegerAsString(n))))
def permuteDigitsOperator(n): return RPNGenerator.createPermutations(getMPFIntegerAsString(n))
def reverseDigits(n): return mpmathify(getMPFIntegerAsString(n)[::-1])
def getRightTruncationsGenerator(n): result = getMPFIntegerAsString(n) for i in range(len(result), 0, -1): yield mpmathify(result[0:i])
def splitNumberByDigits(n): n = getMPFIntegerAsString(n) split = len(n) // 2 return mpmathify(n[:split]), mpmathify(n[split:])
def duplicateNumberOperator(n, k): if k == 0: return 0 return mpmathify(getMPFIntegerAsString(n) * int(k))
def getLeftTruncationsGenerator(n): n = getMPFIntegerAsString(n) for i, _ in enumerate(n): yield mpmathify(n[i:])