• Some Notable Reversible Logic Gates

    Logical connectives are the building blocks of logic; and logic gates, derived from logical connectives, are the building blocks of computers. Anyone familiar with programming is likely familiar with most of the basic logic gates: AND, OR, and NOT. Maybe they’ve heard of NAND or XOR, or, if they’re more logically-inclined, maybe they’ve heard of IMPLY. They’re well-known quantities; each logic gate with 2 or fewer arguments even has its own wikipedia page. But what aren’t really documented quite as exhaustively are the “reversible” logic gates.

  • Order-Dependent Triangulations

    I’ve spent a lot of time working on procedural asset generation code over the last ten years or so, and procedural mesh generation has been a large focus of that work. I researched and reinvented many algorithms over the course of this time, but one of the most valuable concepts I’ve stumbled into is not an algorithm at all, but rather the realization that the order of the elements in your data structures can matter just as much as what’s actually in them. I think many people are aware that this is true for things like binary searches, but I’ve found that it’s a useful tool in an even wider range of applications. Today, I’ll be talking about the applications of this concept to generating triangulations.

  • Reverse Engineering Tears of the Kingdom's Object Rotation System

    Tears of the Kingdom, the long awaited followup to Breath of the Wild, was lauded at it release for its intuitive and powerful construction system. I played Tears of the Kingdom, and while I did enjoy playing around with the build system, I couldn’t help feeling like something was strange. The problem that was on my mind the whole time was the fact that you could seemingly rotate objects in the build system by 45 degrees around 2 different axes in any order you chose, but you would only ever end up reaching a small number of possible orientations. Mathematically, this actually shouldn’t be possible.

  • Aiming Projectiles

    Shooting is a very common mechanic in video games; however, unless your projectiles are entirely hitscan, meaning that the player instantly hits whatever they are aiming at when pulling the trigger, aiming projectiles is unexpectedly non-trivial from a mathematical perspective. For players, this is part of the fun, and their aim is more driven by physics intuition and muscle memory. But for AI-controlled characters, this is a real problem, and there are a number of factors that can potentially make it even more complicated. In this post, I will be discussing the solutions for the most common category of projectile aiming problems in video games.

  • Corner Place

    The puzzles I’ve posted so far have been easy-to-describe as “like sudoku, but…”. But, as I’ve done more research into the mathematics underlying these types of puzzle systems, I’ve come to realize that the “sudoku-like”ness of these puzzles is captured entirely by the concept of the “Latin square”. And, in doing further research into Latin squares, I found a neat kind of puzzle that seems very underexplored.

  • Puzzle Rankings

    The site currently has a few daily puzzle games running: Pair Place and Triple Place. Today, I’m introducing a ranking server that will let you see how well you performed compared to other players on each daily puzzle.

  • Reversible Programming Primer: Symmetry-Breaking (Part 2)

    In part 1 of the discussion of symmetry-breaking, we discussed what symmetry-breaking was, the motivating problems that necessitated the introduction of symmetry-breaking, and many of the basic primitives that can be used to build symmetry-breaking code. However, we were left with an unwieldy tool that broke all of the patterns that we had previously established. In this sixth post on reversible programming, we will discuss the problems that symmetry-breaking has left us with, a more precise model of how reversible functions can be structured, and a substitute for undo symmetry that can salvage our existing patterns for use in symmetry-breaking code.

  • Reversible Programming Primer: Symmetry-Breaking (Part 1)

    Reversible programming languages can run code “in reverse”, but what does that mean? You might have an intuitive idea that “running code in reverse” should be equivalent to “running the inverse of the code”, and this is a good default assumption. However, when we look at some of the practical concerns of real reversible programs, we discover that it’s not always possible for this to be the case, and that, even when it’s possible, it’s not always desirable. In this fifth post on reversible programming, we will be examining the situations where our intuition regarding reverse execution fails.

  • Triple Place

    A few months ago, I started posting a daily puzzle called Pair Place. Pair Place arose naturally as a math problem during some research, but I naturally started to wonder if there were any basic generalizations of it that could serve as variations on the same puzzle concept. The first such generalization of Pair Place is the subject of today’s post: Triple Place.

  • Reversible Programming Primer: Backtracking Control Flow

    So far in this series, reversible computation has introduced a lot of restrictions on how you can write code. However, reversible programs are also capable of some very unique functionality that is simply impossible without imposing the constraint of reversibility. In this fourth post on reversible programming, we will finally be justifying the name “reversible computing” by exploring how reversible programming languages can allow programmers to “run code in reverse” and all of the unique things this feature allows you to accomplish.

  • •
  • 1
  • 2