Pretty neat and a very nice walkthrough of the code.
For localization you might want numbered holes which makes it way more complicated.
You can detect if the backing buffer is too short, but can you detect other errors? Like having different numbers of holes and arguments? I couldn’t find any discussion about this.
Well actually, air molecules (N2, O2) are indistinguishable. This means that they are fundamentally interchangeable with each other and it’s not well defined what ”same” molecules mean. You can’t label the individual molecules.
It’s of course possible to track a single molecule if you really try hard. But this hasn’t been done since Caesar's time and the molecules have mixed. Even if we knew the exact state of the universe right now and could play back time perfectly it would be impossible to say that some particular molecules were part of his last breath.
In my high school physics class we measured the pitch between the tracks of a CD using the same principle. You just need a light source with a known wavelength, like a laser. It was a pretty cool experiment!
Yes I’m thinking in terms of different frames of reference.
Imagine that you’re a tiny ant that lives on the large circle. When you push the small circle around the large circle you will see it make four rotations before you get back to the starting point. This is the local frame of reference.
Now imagine you’re a giant living in the space with the circles. You see the small circle do five full rotations. Four are the same that the ant sees but you also see the ant itself do one rotation simultaneously as it walks along the large circle making five in total.
It would be more accurate to say that you have 4 local rotations and that the local frame rotates one full turn in the global frame.
Does this make sense to someone with a high-school level of geometry knowledge? Not as I wrote it I initially (but there was no such goal). The analogy with the giant and the ant together with some nice illustrations maybe?
In your analogy I think the listener should be the junior programmer. Music by Beethoven can be appreciated by many more than just the people who can compose on that level.
In the same way you can write code so that also junior developers can appreciate it. The challenge lies in clearly expressing solutions to complex problems.
You can see it is R/r local revolutions of the small circle. Then you need to add one global revolution from going around the large circle. So R/r + 1.
This is of course what the article is saying pretty much.
Are there other situations that require a similar reasoning?
The OTCA metapixel has 2048x2048 cells and a period of 35328. That's a total of 18.5 GB. And that's not counting the different states depending on neighbors and on-off-transitioning state.