# # # Written by Antti Karttunen (his-firstname.his-surname@gmail.com) # at Feb 27 2006. # # import re def A007088(n): '''Converts n to binary form. Or equally: nth decimal number using no other digits than 0 and 1.''' if 0 == n: return(0) else: return((n%2)+10*A007088(n/2)) def A007089(n): '''Converts n to ternary form. Or equally: nth decimal number using no other digits than 0, 1 and 2.''' if 0 == n: return(0) else: return((n%3)+10*A007089(n/3)) def take(n,g): '''Returns a list composed of n next elements returned by generator g. Inspired by Haskell''' z = [] if 0 == n: return(z) for x in g: z.append(x) if n > 1: n = n-1 else: return(z) def gen_A001477(): '''The nonnegative integers.''' i = 0 while i > -1: yield i i = i+1 def A048724(n): return(n^(2*n)) def A065621(n): return(A048724(n-1)-((-1)**n)) # Here the maximum recursion depth is overflown already at take(26,gen_A001477) # # def gen_A001477(): # '''The nonnegative integers.''' # yield 0 # for x in gen_A001477(): yield x+1 def get_binpat_generator(binpat): '''Returns a generator which generates integers whose binary expansion matches binpat (prepended with few zeros).''' binpatre = re.compile("^" + binpat + "$") def foo(): for n in gen_A001477(): if(binpatre.match("0000" + repr(A007088(n)))): yield n return(foo) def get_ternpat_generator(ternpat): '''Returns a generator which generates integers whose ternary expansion matches ternpat (prepended with few zeros).''' ternpatre = re.compile("^" + ternpat + "$") def foo(): for n in gen_A001477(): if(ternpatre.match("0000" + repr(A007089(n)))): yield n return(foo) # def gen_A048719(): # '''Binary expansion matches ((0)*0011)*(0*).''' # for n in gen_A001477(): # if re.compile("^((0)*0011)*(0*)$").match("00" + repr(A007088(n))): yield n gen_A048715 = get_binpat_generator("((0)*001)*(0*)") gen_A048716 = get_binpat_generator("((0)*00(1?)1)*(0*)") gen_A048717 = get_binpat_generator("((0)*00(1*)11)*(0*)") gen_A048718 = get_binpat_generator("((0)*0001)*(0*)") gen_A048719 = get_binpat_generator("((0)*0011)*(0*)") gen_A051382 = get_ternpat_generator("(0|1)*(02)?(0|1)*")