class queue: def __init__(self, size): self.origsize = size self.clear() def clear(self): self.size = self.origsize self.array = [ None ] * self.size self.num = 0 self.begin = 0 self.end = 0 def is_empty(self): return self.num == 0 def enqueue(self, item): if self.num >= self.size: self.grow() self.array[self.end] = item self.num += 1 self.end += 1 if self.end >= self.size: self.end = 0 def dequeue(self): if self.num == 0: return None value = self.array[self.begin] self.num -= 1 self.begin += 1 if self.begin >= self.size: self.begin = 0 return value def grow(self): newsize = self.size * 2 newarray = [ None ] * newsize i = self.begin j = 0 n = self.num while n > 0: item = self.array[i] i += 1 if i >= self.size: i = 0 newarray[j] = item j += 1 n -= 1 self.size = newsize self.array = newarray self.begin = 0 self.end = j import math def check(claim, target): curr = 4 print(curr, end = ' ') for op in claim: if op == "sqrt": curr = math.sqrt(curr) elif op == "floor": curr = math.floor(curr) elif op == "fact": curr = math.factorial(curr) print(curr, end = ' ') print() return curr == target def solve(target): if target == 4: print([ ]) return q = queue(64) q.enqueue((4, [])) while not q.is_empty(): (curr, path) = q.dequeue() if curr == 1: continue if curr < 1e100: newval = math.sqrt(curr) newpath = path + [ "sqrt" ] if newval == target: break q.enqueue((newval, newpath)) if type(curr) == float: newval = math.floor(curr) newpath = path + [ "floor" ] if newval == target: break q.enqueue((newval, newpath)) if type(curr) == int and curr < 1000: newval = math.factorial(curr) newpath = path + [ "fact" ] if newval == target: break q.enqueue((newval, newpath)) print(newpath) if check(newpath, target): print("Solution verified") else: print("Solution is not correct")