About eight years ago, I created a simple design concept as a gift for family and friends. It consisted of eight 5″×7″ cards of different colors; two were solid and the other six had geometric shapes cut out of them. Stacking the cards in different configurations could generate seemingly countless patterns, making it a small decoration that could be dramatically altered at a moment’s notice to suit the occasion or just provide a little change of scenery (Fig. 1).
Not long after, I was made aware of Kaleidographs, toys based on the same idea, whose system of 12 two-sided square cards boasts over 500 billion possible unique combinations (Fig. 2). That staggering number made me wonder: How many combinations were possible with my simpler design? I wanted not only to know the amount, but, to the extent possible, to see all of the combinations. This seemed like a fairly trivial problem for an algorithm, but my skills in that area were virtually nonexistent. Instead, using Adobe Illustrator, I developed a system through which I could theoretically manually generate the full set of combinations, but the amount of time and labor required proved to be too much and I eventually shelved the project.
Over the next several years, similar works caught my attention, including the self-explanatory poster The 892 Unique Ways to Partition a 3×4 Grid and a clever bit of activism called All the Music, which effectively puts into the public domain every possible melody that hasn’t already been copyrighted. But the one that captivated me most was Incomplete Open Cubes, a 1974 work in which the conceptual artist Sol LeWitt found 122 unique structures utilizing three or more of the edges of an open cube (Fig. 3). As I studied it, I began to realize that many more cube configurations were possible if some of LeWitt’s constraints were removed. Having learned the basics of Python in a workshop led by type designer and programmer Just van Rossum the previous summer, I was able to apply my modest new programming skills to expand LeWitt’s set of cubes from 122 to 4,094. I called the project Incomplete Open Cubes Revisited.
I’m still a poor excuse for a mathematician, but I continue to be fascinated by artistic applications of what I now know to be an area of mathematics called combinatorics. Much of the algorithmic art I’ve experienced has been based on feeding various values to an algorithm and cherry-picking the most interesting results. What appeals to me more about a combinatoric approach is the creation of a system whose many possible results are all interesting, both individually and as a set.
And so I’ve started Plus Equals as a place to document my exploration of the artistic possibilities of combinatorics. The name comes from an assignment operator common to many programming languages: When x += 1, it adds 1 to the value of x. Apart from the certainty that the += operator will be used in my work often, I’m drawn to its succinct implication that combination is an act of creation.
For this first issue of Plus Equals, I think it’s appropriate to revisit the eight-card design concept that started me on this path all those years ago. My math skills still aren’t as sophisticated as I’d like them to be, but building on my experience with Incomplete Open Cubes Revisited, I’ve managed to figure out not only how many ways those eight cards can be stacked, but how many unique combinations are possible for any other number of cards.
It begins with a set of two. Each individual card is counted as one stack, as is each card stacked on top of the other, which yields four possible stacks: A, B, AB, and BA (Fig. 4). Adding a third card to the set introduces an additional level of stacking considerations. Card A now yields not only an AB stack, but also an AC stack. AB yields ABC; AC yields ACB. The three-card set ultimately gives us 15 unique stacks (Fig. 5), a four-card set gives us 64 unique stacks (Fig. 6), and just as it’s starting to get cumbersome to count everything this way, a mathematic pattern emerges. Going back to the two-card set, which yields four unique stacks, if we add 1 to the number of unique stacks (4+1), add 1 to the number of cards (2+1), and multiply the two sums, we get 15, which is exactly how many unique stacks are possible with a three-card set. Apply that same formula to the three-card set, and we’ll see another familiar number: (15+1)×(3+1)=64. And so on: 4 → 15 → 64 → 325 → 1,956 → 13,699 → 109,600. By the time we’ve reached 10 cards, nearly 10 million unique stacks are possible!
So, using this method, we know that when up to eight cards are in play, there are 109,600 different ways they can be combined. But in the case of my original eight-card design concept, the number of possible unique images they can generate is actually far lower than that. First of all, two of the cards—G and H—are completely opaque. Any combination of cards stacked under one of them will be completely hidden from view, meaning any combination of cards with G or H on top is functionally identical (Fig. 7). Secondly, owing to the arrangement of the shapes cut out of cards A through D, any combination of all four of those cards is also opaque. As with cards G and H, whenever cards A through D are all present, nothing beneath them is visible (Fig. 8).
There’s certainly a way to work around these issues, find the true number of possible unique images, and generate them, but that seems like a fairly convoluted start to this enterprise, and one I’m not really interested in pursuing. Instead, I’ve decided to make things more manageable by paring the deck down to just cards A through D, knowing that every possible combination of them will yield a unique image. I’ve also made them square and replaced their colors with black stripes on white (Fig. 9). The latter decision, born partly of printing budget constraints, has the benefit of introducing added visual interplay between the cards.
As we learned earlier, these four cards can be stacked 64 different ways, a manageable amount I could do manually, but instead I wrote a Python script to do it for me. Run through a vector drawing app called DrawBot and utilizing the combinatoric stacking method described earlier, the script draws each card and generates all 64 unique combinations, which are collected here. Modified versions of this script are likely to power future Plus Equals explorations, and I hope you’ll join me for those. Enjoy!