cp's OEIS Frontend

This is a front-end for the Online Encyclopedia of Integer Sequences, made by Christian Perfect. The idea is to provide OEIS entries in non-ancient HTML, and then to think about how they're presented visually. The source code is on GitHub.

User: Rod McFarland

Rod McFarland's wiki page.

Rod McFarland has authored 1 sequences.

A357272 a(n) is the number of ways n can be calculated with expressions of the form "d1 o1 d2 o2 d3 o3 d4" where d1-d4 are decimal digits (0-9) and o1-o3 are chosen from the four basic arithmetic operators (+, -, *, /).

Original entry on oeis.org

29235, 12654, 12450, 12425, 12427, 11915, 12419, 11792, 12062, 11725, 8748, 7686, 8180, 6632, 6549, 6077, 5758, 4532, 4915, 3503, 3649, 3451, 2684, 2468, 3253, 2288, 1957, 2347, 2197, 1627, 2028, 1444, 1899, 1439, 1281, 1531, 2080, 1195, 1126, 1147, 1513
Offset: 0

Author

Rod McFarland, Sep 22 2022

Keywords

Comments

This sequence is an extension of the "four fours" puzzle.
Expressions follow operator precedence (*/) then (+-), and left to right within the same level of precedence: "5/6/7/8" is ((5/6)/7)/8, "3-4+5*8" is 3-4+(5*8) = (3-4)+40 = -1+40 = 39.
Expressions are treated as ordered, so that 1+2+3+4 is distinct from 1+3+2+4 (but has the same value).
If negative n is allowed, the first nonzero a(n) is n = -729 (0-9*9*9). The last nonzero a(n) is n = 6561 (9*9*9*9).
There are 671 nonzero terms. - Michael S. Branicky, Sep 24 2022

Examples

			a(235) = 9 because 235 may be expressed in nine ways: "3*9*9-8", "5*6*8-5", "5*8*6-5", "6*5*8-5", "6*8*5-5", "8*5*6-5", "8*6*5-5", "9*3*9-8", and "9*9*3-8".
		

Programs

  • Python
    from itertools import product
    from fractions import Fraction
    from collections import Counter
    def afull(): # all further terms are 0
        a = Counter()
        for digs in product("0123456789", repeat=4):
            for ops in product("+-*/", repeat=3):
                e = digs[0] + "".join(ops[i] + digs[i+1] for i in range(3))
                if "/0" in e: continue
                if "/" in e:
                    for d in set(digs): e = e.replace(d, f"Fraction({d}, 1)")
                t = eval(e)
                if t >= 0 and t.denominator == 1: a[t] += 1
        return [a[n] for n in range(max(a)+1)]
    print(afull()[:100]) # Michael S. Branicky, Sep 24 2022