One of them used constraint solving with Z3, which was indeed reasonably fast. However, by far the fastest was a simple backtracking solver written in Rust which used bit twiddling to quickly test for intersections. For polyomino's in particular, this represents between 10x and 100x constant speed boost, depending on the size of board. There's no way to get that back with a smarter solver.
dmoy 3 hours ago [-]
While similarly playing brio with a two year old, I thought about a different dimension not mentioned here - super loose tolerances make the search space really weird.
In true 2-year-old fashion, my kid would bend the rules as much as possible by literally forcing pieces to the edge of their tolerance to make things fit that shouldn't fit. 8 piece circle yea, cool, but with a sufficiently old brio set handed down for 40 years or whatever, you can totally make a 7 piece "circle" thing.
So I decided some day I'll craft an interview question out of that, to see if people can figure out a good way to map a set of pieces laid out with given tolerance ranges for piece, see if it can connect, etc. Haven't thought about it enough to really polish it for an interview, but some day.
akoboldfrying 2 hours ago [-]
I immediately got nerd-sniped by this...
A heuristic could try all kinds of fun force-directed placement stuff. For an exact solver, I think your best bet would (unfortunately) be to finely quantise the possible positions and orientations of each piece, describe each piece by 2 sets of positioned unit vectors (the vectors in one set start at the centre positions of each "hole" and are directed towards the centre of the piece, the other set is similar but holds the "plug" positions and orientations), and say that a partial solution is feasible iff every "plug" position is sufficiently far from all other plugs, and either sufficiently far from all other holes or within some small tolerances (in terms of both distance and angle) of some other hole. Actually, you would probably also need to treat the piece body as a "nothing else can occupy these positions" constraint. I say "unfortunate" because the position and orientation grids would need to be very fine relative to the size of the pieces, leading to a large state space thus long running times.
I think it would be fun to look for solutions that maximise the "badness" (e.g., sum of distances between matched holes and plugs) :)
efavdb 1 hours ago [-]
My three year old taught me something he saw on a YouTube video: you can search through a maze and find your way out just by keeping your right hand on the wall at all times and continuing till exit. Does a DFS.
LeoPanthera 56 minutes ago [-]
This only works for two dimensional mazes where both the entrance and exit are on an edge and there are no loops in the maze.
If you introduce a bridge, or a tunnel, or put the goal in the middle, you can get stuck in a loop.
CGamesPlay 55 minutes ago [-]
Throw a loop/island in the maze and see how your kid reacts.
mohamedkoubaa 47 minutes ago [-]
I vaguely recall a windows screensaver that did this
polivier 2 hours ago [-]
> When this solver backjumps, it forgets the failure as soon as it lands, so if the same dead end comes up in a different part of the search it gets rediscovered from scratch.
Modern solvers such as CP-SAT combine some SAT features with a CP solver, based of the work of Peter Stuckey I think.
zahlman 3 hours ago [-]
The kid doesn't seem to be doing any actual teaching here. Cool that a two-year-old can say "exponential", though, I guess.
> “Dada! Degree three. No Euler circuit.”
…Oh. Okay, fine, weird rhetorical device but you do you.
onaclov2000 2 hours ago [-]
I'll be honest, while it's possible the article is genuine,at some point I felt/realized it seemed like an ad for the book, and made the story feel like it was not genuine and more like a contrived example of why the book is so useful and not real (again, not claiming real vs not real,just the vibe I felt) so I stopped reading.
Jtsummers 2 hours ago [-]
> I'll be honest, while it's possible the article is genuine
No, there's not really much chance of that:
>> “Dada, real planners use SAT and its relatives for timetabling, chip layout, and routing for the same reason.”
comrade1234 4 hours ago [-]
Yon should publish this on LinkedIn.
akoboldfrying 3 hours ago [-]
Given my feelings about the quality of the... discourse... on LinkedIn, I can't tell if this is a genuine compliment or a fiercely backhanded one.
hyperhello 4 hours ago [-]
Sometimes you have to prove you’re #1 Dad.
mcphage 3 hours ago [-]
What year was your son born? Nobody has said “Silly Billy” in 30 years, unless under the auspices of a duly appointed official.
This attempt at humble bragging about how smart your two year old is was not necessary for this article. There does not need to be a constant game of trying to 1 up other parents by bragging about how much farther ahead your kid is compared to others.
Rendered at 02:23:00 GMT+0000 (Coordinated Universal Time) with Vercel.
http://strangelyconsistent.org/blog/train-tracks
https://www.oranlooney.com/demos/soma-forest/
One of them used constraint solving with Z3, which was indeed reasonably fast. However, by far the fastest was a simple backtracking solver written in Rust which used bit twiddling to quickly test for intersections. For polyomino's in particular, this represents between 10x and 100x constant speed boost, depending on the size of board. There's no way to get that back with a smarter solver.
In true 2-year-old fashion, my kid would bend the rules as much as possible by literally forcing pieces to the edge of their tolerance to make things fit that shouldn't fit. 8 piece circle yea, cool, but with a sufficiently old brio set handed down for 40 years or whatever, you can totally make a 7 piece "circle" thing.
So I decided some day I'll craft an interview question out of that, to see if people can figure out a good way to map a set of pieces laid out with given tolerance ranges for piece, see if it can connect, etc. Haven't thought about it enough to really polish it for an interview, but some day.
A heuristic could try all kinds of fun force-directed placement stuff. For an exact solver, I think your best bet would (unfortunately) be to finely quantise the possible positions and orientations of each piece, describe each piece by 2 sets of positioned unit vectors (the vectors in one set start at the centre positions of each "hole" and are directed towards the centre of the piece, the other set is similar but holds the "plug" positions and orientations), and say that a partial solution is feasible iff every "plug" position is sufficiently far from all other plugs, and either sufficiently far from all other holes or within some small tolerances (in terms of both distance and angle) of some other hole. Actually, you would probably also need to treat the piece body as a "nothing else can occupy these positions" constraint. I say "unfortunate" because the position and orientation grids would need to be very fine relative to the size of the pieces, leading to a large state space thus long running times.
I think it would be fun to look for solutions that maximise the "badness" (e.g., sum of distances between matched holes and plugs) :)
If you introduce a bridge, or a tunnel, or put the goal in the middle, you can get stuck in a loop.
Modern solvers such as CP-SAT combine some SAT features with a CP solver, based of the work of Peter Stuckey I think.
> “Dada! Degree three. No Euler circuit.”
…Oh. Okay, fine, weird rhetorical device but you do you.
No, there's not really much chance of that:
>> “Dada, real planners use SAT and its relatives for timetabling, chip layout, and routing for the same reason.”
https://youtu.be/9FUik3QotBQ?si=27AcY47wLNov0Vzw