Really interesting, but I think anyone interested in this would do well to check out [0]. It takes the article's second algorithm somewhat further, considering all the output tiles to start out as uncollapsed wave functions, and then going through and trying to collapse them in such a way as to obey local constraints (matching at their borders) and large-scale constraints (having each tile occur in the output at a frequency similar to some frequency defined by the inputs).
Also on the notational side, [0]'s approach of using a plain graphic as an input, and inferring the desired tiles and tile frequencies from it, is maybe more approachable than that of TFA. (Though in either case, if you hack on it I suspect you'll eventually wind up doing something ad-hoc..)
The other fun thing with WFC is that you can wrap the constraints on the edges (ex. matching the right edge of the rightmost tiles to the left edge of the leftmost tiles), which allows you to easily make tiling patterns.
You can also start matching tiles and edges for more than just colours... for example, you can have 3-dimensional tiles, or you can even match edges of tiles using time as a dimension, like I did here: https://twitter.com/MattRix/status/979020989181890560
I second that. Nice presentation of the material, but I think that https://twitter.com/ExUtumno "WaveFunctionCollapse" is most likely a direct predecessor and big influence on this work. So, must be referenced much earlier, and not reduced to a footnote in the end, otherwise it feels we are cheated here.
Also on the notational side, [0]'s approach of using a plain graphic as an input, and inferring the desired tiles and tile frequencies from it, is maybe more approachable than that of TFA. (Though in either case, if you hack on it I suspect you'll eventually wind up doing something ad-hoc..)
https://github.com/mxgmn/WaveFunctionCollapse