523 karma · joined October 11, 2012
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.
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.
It’s a super fun game to learn. It looks impossible to start out but then your brain adapts. It’s like seeing through the matrix.
https://www.gdcvault.com/play/1014514/AI-Navigation-It-s-Not
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?
Here's a nice presentation from him explaining it: https://www.youtube.com/watch?v=0bcZb-SsnrA
Even with compression that's a lot of data.
So after checking that x > o there is no way for i (a product and ratio of positive numbers) to become negative.
The only reason this is surprising is that there is an expectation of wrapping on overflow. But this is simply not the behavior of the C virtual machine.
(Maybe today it makes sense to have even C wrap in a two’s-complement way? C is used in many places though, maybe there are still platforms in use that aren’t two’s-complement?)
Perhaps with out of order CPUs relying on something that is undefined could change based on adjacent instructions also?
In an 3x3 neighborhood there are 2^9, not 2^5 states. So we should get 2^512 possible update rules, not 2^32.
I think something similar is described in https://conwaylife.com/wiki/Rule_integer.
I'm not sure that all of those rules are valid. We must have translational invariance. One way to do that is to only update the state of the central cell in each considered neighborhood. In that case 2^9 rules are enough. Are there other ways to define consistent rules for a CA?
(Linked from the article)
[0] https://en.wikipedia.org/wiki/Colin_McRae
[1] https://en.wikipedia.org/wiki/Colin_McRae_Rally_and_Dirt
(edit: formatting)
Not having data races is one of the key benefits of using Rust, “fearless concurrency” and all that. So by throwing away a key guarantee of Rust (no aliasing mutable references), it can become easier for learners to program in. It becomes a bit of an apples and oranges situation at that point.