%I #38 Jun 08 2024 15:44:07
%S 2,4,8,17,39,92,275,922,2894,10843,35944
%N The "smallest countdown" numbers are the smallest positive integer that cannot be made using the numbers n through 1, in order, using the operations +, -, *, /, and parentheses.
%C Inspired by a now-lost blog post in which someone discussed a "new year's countdown" equation for 2012, e.g., 10 * (9 + ((8 * (((7 + (6 / (5 * 4))) * 3) + 2)) + 1)) = 2012. This sequence has been "verified" by two independently created programs.
%e for n = 3, a(3) = 8, because 3*2+1=7, and 3*(2+1)=9, but there is no equation with 3,2,and 1 in order that equals 8. Note that if we allow the order to change, we can make 8, because 2*(3+1)=8, but reordering is not allowed.
%o (Python)
%o from fractions import Fraction
%o def genAllTrees(l):
%o if len(l) == 0:
%o return
%o elif len(l) == 1:
%o yield l[0], str(l[0])
%o else:
%o for middle in range(len(l)):
%o for lval, leqn in genAllTrees(l[:middle]):
%o for rval, reqn in genAllTrees(l[middle:]):
%o yield lval+rval, ("(" + leqn + " + " + reqn + ")")
%o yield lval-rval, ("(" + leqn + " - " + reqn + ")")
%o yield lval*rval, ("(" + leqn + " * " + reqn + ")")
%o if rval != Fraction(0):
%o yield lval/rval, ("(" + leqn + " / " + reqn + ")")
%o def findSmallestIntNotPresent(n):
%o vals = {}
%o for val, eqn in genAllTrees([Fraction(i) for i in range(n, 0, -1)]):
%o if val.denominator == 1:
%o val = val.numerator
%o if val not in vals:
%o vals[val] = eqn
%o i = 1
%o while i in vals:
%o i += 1
%o return i
%o for i in range(1, 11):
%o print(i, findSmallestIntNotPresent(i))
%Y Related to A060315, which is the smallest number that cannot be made with the numbers 1 to n, in any order.
%K nonn,hard,more
%O 1,1
%A _Peter Boothe_ and Abraham Asfaw, Feb 08 2012
%E a(10)-a(11) from _Hiroaki Yamanouchi_, Oct 04 2014