enclose.horse
1179 points
2 days ago
| 63 comments
| enclose.horse
| HN
gorgoiler
2 days ago
[-]
Great game, I love it! I hope the author is collecting juicy analytics. They would be useful if they ever want to bundle 100 levels in order of difficulty and release this as a Steam game (which I would absolutely buy!)

I don’t think the gates should animate up into the air. It breaks the visual logic of 2D for no benefit. It’s subconsciously confusing to see a gate I place in one cell move to occupy pixels in the cell “above” it.

I look forward to future days introducing new mechanics as well. Can I suggest a few, based on dynamics?

- Food! The horse moves on every turn towards an attractor. Have a hay bale / giant sugar cube in one corner fall off the back of a truck / helicopter :) Horses start out dumb and move directly towards the goal before backtracking. Smarter horses path find the shortest route to the goal.

- Goals! Now that the horse is moving, get the horse into a static horse box / cattle pen cell by strategically placing fences so that the path it takes towards the food involves walking onto the goal square.

- Floods! Water encroaches from the edges on a turn by turn basis. Not only do you have to contain the horse, you also have to hold back the flood.

reply
anticorporate
2 days ago
[-]
> I hope the author is collecting juicy analytics.

I hope they're not. Can't we have a few things in this world that are just fun without going and sticking surveillance on them?

reply
helle253
2 days ago
[-]
'analytics' and 'surveillance' are not the same thing

trying to understand player behavior in the context of a board or video game (though there is some overlap!) is not the same as trying to understand user behavior in the context of social media or purchasing behavior - the data of both of which derive their value from being sold to THIRD PARTIES as a commodity.

being able to tune a fun little video game is not the same thing at all

reply
badtuple
1 day ago
[-]
Does your opinion change if they use it to train a commercial program to do a similar task?
reply
lblume
1 day ago
[-]
For me at least, no. Making money by training a model from user data on such a game seems like a perfectly fine thing to do.
reply
BloodyIron
2 days ago
[-]
Collecting analytics like this is effectively the same as play-testing physical board games in-development. People play a game, information is gathered, and the game is tuned in response to that. If zero information were ever gathered, games could not be balanced or tuned for other things like unforeseen problems.

Please, show me a piece of software, or game, that is perfect the first time it is made.

reply
wat10000
2 days ago
[-]
It's effectively the same, except people volunteer or are paid to play test.

This whole industry really needs a lesson on consent.

reply
adventured
2 days ago
[-]
So long as personal information is not collected, consent is not morally necessary.

If I collect information on how often a coin-op Street Fighter II game is played in an arcade, while collecting no personal information, consent is not needed.

reply
wat10000
2 days ago
[-]
Because using someone else's hardware in a public space is clearly equivalent to using your own hardware in the privacy of your own home.
reply
Zetaphor
2 days ago
[-]
You are not entitled to play the game, which is hosted on their server which requires bandwidth and other resources. In the same way that you are free to make demands about how software runs on your machine, the author is free to make demands about the use of their software.
reply
crazygringo
2 days ago
[-]
This is software coming from a server, not hardware. It doesn't matter which device it's run on, or whether it's in your home or not.
reply
Sardtok
1 day ago
[-]
If the data gathered is only on gameplay, and not something that can be used as PII like IP addresses or device information, then it should be fine. Gathering things like the score and time spent completing the level, isn't a problem. This could be used to rank the levels, without gathering any user information.
reply
wat10000
1 day ago
[-]
If gathering the data should be fine, then asking for permission should also be fine.
reply
jelder
1 day ago
[-]
Indie games don’t have a budget for playtesting, but they can probably swing a GA account.
reply
BloodyIron
2 days ago
[-]
There are games that let you opt-out, hell even ones that ask you when you first open the game. There are bad apples, but there are plenty of good ones too.
reply
jader201
1 day ago
[-]
I think the argument is that they shouldn't be opt-out, but opt-in.

If I want to play a game and provide my feedback, the default should be that that doesn't happen unless I explicitly say it should.

Opt-out means that, by default, you're collecting metrics from my plays, until I find the means to opt-out.

reply
llmslave2
1 day ago
[-]
If the game asks you when you first open it, does it matter if the question is to "opt out" or "opt in"?
reply
wat10000
1 day ago
[-]
If it asks you then it's neither opt-in nor opt-out. Then it depends on how it asks you. If it's a simple yes/no, it's fine. If it's typical tech bullshit where your options are a big "I want to make the world a better place and save the whales by sending my data" or a tiny button in the corner labeled "maybe later" that takes you to another screen saying "please confirm you want to opt out of data collection and kill a bunch of kittens" then not so good.
reply
snackdex
2 days ago
[-]
if the analytics lead to an actual game on steam im down
reply
butlike
2 days ago
[-]
You could just package an arbitrary 100 levels, let the player play them in any order, then give rewards for 10, 20, 30, 40, etc. levels completed/mastered.
reply
Feathercrown
2 days ago
[-]
This would still benefit from a difficulty rating system or order
reply
Forgeties79
2 days ago
[-]
Or go full on kaizo Mario and make it a random room out of the 100
reply
snackdex
2 days ago
[-]
naw im looking to have fun, not cry
reply
snackdex
2 days ago
[-]
something in me loves progressively harder levels
reply
alpha-male-swe
1 day ago
[-]
yeah man what a horrible world we live in man. thats so profound of you to say, truly. well said man
reply
emregucerr
2 days ago
[-]
> I don’t think the gates should animate up into the air.

I agree! It feels off compared to the overall aesthetic of the game.

Awesome game though! Loved it.

reply
tgtweak
1 day ago
[-]
There is definitely a turn-based minigame here - get the most "distance" travelled by the horse, every turn the horse moves one block towards it's closest escape and you can drop walls to cause it to find a new path - in this one you actually lose when the horse can't get out but the goal is to get the horse to move as many blocks as possible using your limited number of walls (or apples which can attract it).
reply
dllu
1 day ago
[-]
That reminds me of Paquerette Down the Bunburrows [1] which is a very fun pathfinding game where the bunnies will pathfind to try to run away from you. It's not exactly what you described, but it is very fun and surprisingly deep and challenging.

[1] https://store.steampowered.com/app/1628610/Paquerette_Down_t...

reply
mbreese
1 day ago
[-]
I was initially expecting the horse to move after each turn. As it is, this is a logic game, similar to what I'd expect to see in the NYT Games app. Quite entertaining, but something that you could look at and reason about to solve.

But, you absolutely could make this a turn based game where the horse is trying to escape and you (playing as the farmer), work to fence it in as it meanders towards a gate.

reply
plastic3169
7 hours ago
[-]
Great game, I returned back to play next day.

> I don’t think the gates should animate up into the air. It breaks the visual logic of 2D for no benefit.

I also feel it would make more sense either for everything to be 2.5D or pure top down. Having appear / disappear animation is nice feedback to user though.

Other thing is that maybe the hitbox should change when the wall comes up. Now to remove it you need to press the grid, essentially the root of the wall. Unintuitive to me.

Thanks for the game, looking forward to when there is multiple horses or sheep to enclose.

reply
xg15
2 days ago
[-]
> I don’t think the gates should animate up into the air. It breaks the visual logic of 2D for no benefit. It’s subconsciously confusing to see a gate I place in one cell move to occupy pixels in the cell “above” it.

I interpreted it as standard "top-down" RPG graphics, where the Y axis always doubles as the Z axis. As such, I didn't find it visually confusing - but it did made playing on mobile annoying, because you often end up targeting the wrong field.

reply
cubefox
2 days ago
[-]
> I don’t think the gates should animate up into the air.

I think it should go up, otherwise it doesn't look like a wall. It would look like something the horse can step on and run over. For the water it makes sense to be flat flat and that the horse doesn't want to touch it: it is water-shy.

reply
stevage
2 days ago
[-]
To me the current design doesn't look like anything at all. I don't see a gate or a wall, just two rectangles.
reply
snewman
2 days ago
[-]
+1 to this. It's also visually confusing, the gate looks like it's covering two cells.

Great game! Feature request: add a button that shows my submitted solution. I'd like to be able to compare it with the optimal solution (so it'd be nice if a single tap could toggle between my submission and the optimal).

reply
ianstormtaylor
2 days ago
[-]
It would be nice if the “optimal” view visualized both my solution and the optimal one at the same time, like a Venn diagram.
reply
the_shivers
1 day ago
[-]
Just added this, check out "Optimal as overlay" in the settings.
reply
layer8
2 days ago
[-]
It also conceals the cherries when it’s on the field below them.
reply
gwbas1c
2 days ago
[-]
Sometimes simple things are best. I really like the game as-is.

This is a rather simple game to program. IMO, if you can program, take a few weekends to make your own game based on your ideas. If you can't program, your ideas will lead you to a wonderful learning project.

reply
banannaise
1 day ago
[-]
The turn-based version sounds interesting, but I think it falls on its face in practice. The game then becomes:

1. lure the horse to an optimal point on the map.

2. trap it in a small circle of fences.

3. build part of your final wall with the remaining fences.

4. one by one, move the fences trapping the horse in place into position.

reply
oliwary
2 days ago
[-]
Another thing to try could be to rank people in realtime instead of the one-off submission approach. I do this in https://spaceword.org (create tight crosswords using 21 letters), and I think it's quite motivating to see how you compare to others as you improve your solution. On the other hand, its a bit more taxing on the server, and then you also could not show the optimal solution.
reply
layer8
2 days ago
[-]
I would prefer not being distracted by that, and not having information on possible solutions before submitting. Trying to find the best solution with added hints like that is a different game. So it should be opt-in.
reply
michaelmior
2 days ago
[-]
Cool game! One minor feature request. It would be helpful to have some way to move the entire block of placed tiles around at once to give myself more room in a particular direction.
reply
oliwary
2 days ago
[-]
Thank you! :) If you click the three dots on the left top side of the letters area, you can shift all tiles in a direction.
reply
doctordoctor2
2 days ago
[-]
IMO, the game is great to keep simple, but I’d like to play more levels than just daily, so could see people paying for the ability to play more, like NYT games, and could be part of a suite of game if curated daily by expert vs social curation. The blocks are small though for a small phone with big fingers.

I also wonder if making it GPL and submitting to various *NIX distros would be best. Then it may need to be standalone with random maps created by ML or similar.

reply
maartin0
2 days ago
[-]
It has a very pleasant editor to make + share custom maps, e.g. https://enclose.horse/play/a3OGcW
reply
47282847
1 day ago
[-]
You can play the previous days and hundreds of user contributed maps! Check out the menu. Enjoy :)
reply
webstrand
1 day ago
[-]
Ah I did not see the menu at all
reply
xg15
2 days ago
[-]
And of course: Buy additional walls using in-game purchases!

(jk)

reply
lionkor
2 days ago
[-]
I found the optimal solution for day 8 by hand, that was fun!

My algorithm, by hand, was as such:

1. Start with the smallest possible valid solution (1)

2. Expand slowly, and each "step" (like, moving a wall or two around to "obvious" spaces) must be a valid solution (this brings you to 40-60 score, depending on your choices, on day 8). Continue to step 3 once you can't see anything obvious.

3. Look at possible places where you could expand, but need 1 more block. You'll find one eventually.

4. See if you can spare any walls anywhere, using diagonals for example. If so, place the solution from 3 and go to 3 (repeat). If not, go to 5.

5. Count or estimate the squares gained by doing your improvement from 3. See if you can reduce your score by less than that, pessimizing your solution, to gain 1 wall. Once you've found one, go to 3.

That got me to the optimal score within 15 mins or so.

reply
sambuccid
1 day ago
[-]
This feels strangely similar to TDD with the Tranformation Priority Premise
reply
ChrisbyMe
2 days ago
[-]
I found the same algorithm! The top down solution didn't really work.

Very fun game

reply
adonovan
2 days ago
[-]
I think you should change the cherries to a battery and call the game Correct Horse Battery Stable.
reply
gwern
2 days ago
[-]
Or the cherries could be a delicious pastry or PBJ-like treat: _Collect Horse Buttery Stable_...
reply
layer8
2 days ago
[-]
Use staples instead of walls as barriers.
reply
tetris11
1 day ago
[-]
Or turn the cherries into sugar lumps, and call the game My Lovely Horse
reply
MildlySerious
2 days ago
[-]
That is just delightful.

Reference[1] for anyone wondering.

[1] https://xkcd.com/936/

reply
scrumper
2 days ago
[-]
This is nice, I enjoyed it. Was a couple points off the optimal score for day 8 but when I clicked "Show optimal" I couldn't then go back to see mine to compare. Either way, stretched the brain a bit.

Only nit: fix the walls. They take up one and a half spaces so are confusing, and they're sci-fi steel with flashing red lights. Turn them into one-square-only fences. You use fences to enclose horses, not raptor walls from Jurassic Park.

reply
xp84
1 day ago
[-]
This is my feedback too. Turn “show optimal” into a toggle that persists on the page and toggles between yours and the optimal.

And same about the walls. Especially on mobile it’s hard enough to tap the right square, and having a wall poking up from the square below just makes things worse.

But overall I love the game!

reply
Groxx
2 days ago
[-]
Yeah, it needs to add a toggle button to let you switch between yours and optimal quickly.

I did figure out that you can get back to yours by going through the past-days menu though.

reply
xg15
2 days ago
[-]
I mean, the horse does sometimes talk about the demon god if you click on it, so who knows...
reply
rhymemini
2 days ago
[-]
Score init should say N/EIGH instead of N/A, otherwise great.
reply
ronbenton
2 days ago
[-]
Reminds me of a comic I saw a couple years back about a horse parliament where the horses only voted “neigh”
reply
_1
2 days ago
[-]
That's from the Far Side. My mom has had this on her fridge for at least 30 years.
reply
inanutshellus
2 days ago
[-]
reply
snackdex
2 days ago
[-]
dead. how in the world does a thought like that come into your mind. i feel like i got 0 in creativity
reply
kanemcgrath
2 days ago
[-]
I am curious on how you would algorithmically find the optimal solution for this kind of problem for much bigger grids. I wanted to do some seed finding in Factorio for the same exact problem using the generated map images, but never found a good solution that was fast enough.
reply
Scaevolus
2 days ago
[-]
The site uses Answer Set Programming with the Clingo engine to compute the optimal solutions for smaller grids. Maximizing grids like this is probably NP-hard.

Note that traditional SAT and SMT solvers are quite inefficient at computing flood-fills.

The ASP specifications it uses to compute optimal solutions are surprisingly short and readable, and look like:

  #const budget=11.
  horse(4,4).
  cell(0,0).
  boundary(0,0).
  cell(0,1).
  boundary(0,1).
  % ...truncated for brevity...
  cell(3,1).
  water(3,1).
  % ...
  
  % Adjacent cells (4-way connectivity)
  adj(R,C, R+1,C) :- cell(R,C), cell(R+1,C).
  adj(R,C, R-1,C) :- cell(R,C), cell(R-1,C).
  adj(R,C, R,C+1) :- cell(R,C), cell(R,C+1).
  adj(R,C, R,C-1) :- cell(R,C), cell(R,C-1).
  
  % Walkable = not water
  walkable(R,C) :- cell(R,C), not water(R,C).
  
  % Choice: place wall on any walkable cell except horse and cherries
  { wall(R,C) } :- walkable(R,C), not horse(R,C), not cherry(R,C).
  
  % Budget constraint (native counting - no bit-blasting!)
  :- #count { R,C : wall(R,C) } > budget.
  
  % Reachability from horse (z = enclosed/reachable cells)
  z(R,C) :- horse(R,C).
  z(R2,C2) :- z(R1,C1), adj(R1,C1, R2,C2), walkable(R2,C2), not wall(  R2,C2).
  
  % Horse cannot reach boundary (would escape)
  :- z(R,C), boundary(R,C).
  
  % Maximize enclosed area (cherries worth +3 bonus = 4 total)
  #maximize { 4,R,C : z(R,C), cherry(R,C) ; 1,R,C : z(R,C), not cherry(  R,C) }.
  
  % Only output wall positions
  #show wall/2.
reply
freakynit
2 days ago
[-]
Im over 35 years of age. I have 15+ years of programming experience. And I generally consider myself as someone who has good breadth of tech in general. Yet, this is the first time in my life I've heard of ASP. And gosh. I was completely blown away by this as I read more about it and went through some examples (https://github.com/domoritz/clingo-wasm/blob/main/examples/e...)

Therefore, like a good little llm bitch that I have become recently, I straight away went to chatgpt/sonnet/gemini and asked them to compile me a list of more such "whatever this is known as". And holy cow!! This is a whole new world.

My ask to HN community: any good book recommendations related to "such stuff"? Not those research kinds as I don't have enough brain cells for it. But, a little easier and practical ones?

Thanks..

reply
tgamblin
1 day ago
[-]
The more recent Lifschitz book is the easiest to learn from IMO:

- https://www.cs.utexas.edu/~vl/teaching/378/ASP.pdf

It starts with basics of using ASP and gives examples in clingo, not math.

The Potassco book is more comprehensive and will help you understand better what is going on:

- https://potassco.org/book/

Things I don't like include that it's more dense, doesn't use clingo examples (mostly math-style examples so you kind of have to translate them in your head), and while the proofs of how grounding works are interesting, the explanations are kind of short and don't always have the intuition I want.

I still think this is the authoritative reference.

The "how to build your own ASP system" paper is a good breakdown of how to integrate ASP into other projects:

- https://arxiv.org/abs/2008.06692

The Potassco folks are doing amazing work maintaining these tools. I also wish more people knew about them.

EDIT: I forgot to mention that specifically for games stuff like enclose.horse, look at Adam Smith's Applied ASP Course from UCSC:

- https://canvas.ucsc.edu/courses/1338

Forgot to mention that one... we use clingo in Spack for dependency solving and other applications frequently slip my mind.

reply
freakynit
1 day ago
[-]
Thank you.. Have noted these down.
reply
Scaevolus
2 days ago
[-]
The pre-machine-learning formulations of AI focused on symbolic reasoning through the dual problems of search and logic. Many problems can be reduced to enumerating legal steps, and SAT/SMT/ASP and related systems can churn through those in a highly optimized and genetic manner.
reply
freakynit
1 day ago
[-]
Thanks... noted a few keywords to expand on further:

1. Symbolic reasoning

2. SAT/SMT/ASP

3. pre-machine-learning formulations of AI

reply
sfink
1 day ago
[-]
"Logic programming"[0] is what I've always heard this stuff called. I was introduced to it with Prolog.

"Declarative programming"[1] is kind of a superset of logic programming, which may or may not be the aspect that piques your interest.

"Constraint programming"[2] and "Constraint logic programming"[3] are also a perspective on it.

[0] https://en.wikipedia.org/wiki/Logic_programming

[1] https://en.wikipedia.org/wiki/Declarative_programming

[2] https://en.wikipedia.org/wiki/Constraint_programming

[3] https://en.wikipedia.org/wiki/Constraint_logic_programming

reply
freakynit
1 day ago
[-]
Thanks a lot. These are what I was hoping to know.
reply
ctxc
2 days ago
[-]
Has to be my favourite comment, haha!
reply
freakynit
1 day ago
[-]
:)
reply
stabbles
2 days ago
[-]
Nice, you don't see clingo mentioned often. We use it in the Spack package manager for resolving dependencies [1]

[1] https://github.com/spack/spack/blob/develop/lib/spack/spack/...

reply
Zobody
2 days ago
[-]
Constraint programming seems to be a fitting approach. Input would be number of walls, and the location of lakes. The decision variables would be the positions of walls. In order to encode the horse being enclosed, additional variables for whether horse can reach a given square can be given. Finally, constraints for reachability and that edges cannot be reached should ensure correctness.
reply
Macuyiko
2 days ago
[-]
Yes. CP SAT crunches through it in no time, but of course larger grids would quickly make it take much longer.

See

https://gist.github.com/Macuyiko/86299dc120478fdff529cab386f...

reply
ooopdddddd
2 days ago
[-]
I don't believe this works in general. If you have a set of tiles that connect to neither the horse nor to an exit, they can still keep each other reachable in this formulation.
reply
Scaevolus
2 days ago
[-]
Yes, this is the major challenge with solving them with SAT. You can make your solver check and reject these horseless pockets (incrementally rejecting solutions with new clauses), which might be the easiest method, since you might need iteration for maximizing anyways (bare SAT doesn't do "maximize"). To correctly track the flood-fill flow from the horse, you generally need a constraint like reachable(x,y,t) = reachable(nx,ny,t-1) ^ walkable(x,y), and reachable(x,y,0)=is_horse_cell, which adds N^2 additional variables to each cell.

You can more precisely track flows and do maximization with ILP, but that often loses conflict-driven clause learning advantages.

reply
Macuyiko
1 day ago
[-]
Good point. I don't think the puzzles do this and if they would, I would run a pre-solve pass over the puzzle first to flood fill such horseless pockets up with water, no?
reply
ooopdddddd
1 day ago
[-]
It's not quite that easy. For the simplest example, look at https://enclose.horse/play/dlctud, where the naive solution will waste two walls to fence in the large area. Obviously, you can construct puzzles that have lots of these "bait" areas.

Like the other comment suggested, running a loop where you keep adding constraints that eliminate invalid solutions will probably work for any puzzle that a human would want to solve.

reply
Macuyiko
1 day ago
[-]
Oh I see what you mean now, indeed:

    Score: 7
    ~~~~~~
    ~····~
    ~·~~·~
    .#..#.
    ......
    ..#...
    .#H#..
    ..#...
However, I think that you do not need 'time' based variables in the form of

    reachable(x,y,t) = reachable(nx,ny,t-1)
Enforcing connectivity through single-commodity flows is IMO better to enforce flood fill (also introduces additional variables but is typically easier to solve with CP heuristics):

    Score: 2
    ~~~~~~
    ~....~
    ~.~~.~
    ......
    ......
    ..##..
    .#H·#.
    ..##..
Cool puzzle!
reply
sunrunner
2 days ago
[-]
> algorithmically find the optimal solution for this kind of problem for much bigger grids.

Great, now I've been double nerd-sniped - once for the thing itself and another for 'What would an optimiser for this look like? Graph cuts? SAT/SMT? [AC]SP?'

reply
qsort
2 days ago
[-]
I'd bet it's NP-hard. The standard reduction to a flow problem only tells you if a cut exists (by min-cut max-flow duality), but here we want the cut of size at most N that maximizes enclosed area.

The Leetcode version of this is "find articulation points", which is just a DFS, but it's less general than what is presented here.

reply
johanvts
2 days ago
[-]
I think it's NP hard, maybe from Sparsest Cut. But you could probably find the min-cut and then iterate by adding capacity on edges in the min cut until you find a cut of the right size. (if the desired cut-size is close to the min cut size at least).
reply
emil-lp
2 days ago
[-]
It's NP-hard from Minimum s–t Cut with at least k Vertices. That's the edge version, but since the grid graph is 4-regular(-ish), the problem is trivially convertible to the vertex version.

Edit: apex-4-regular

reply
sltkr
19 hours ago
[-]
Also I don't think the equivalence between edge/vertex versions is trivial at all (though maybe we just have different standards of triviality).

For example, in a grid like this:

    ..####
    .....#
    #.#..#
    #...H#
    ######
A single wall placed (i.e. vertex removed) can block two edges, and it's not obvious what graph transformation can turn that into a single edge.
reply
emil-lp
6 hours ago
[-]
You transform it into the directed case and then you turn each vertex into an arc.

There is a standard construction for going between vertex and edge cuts.

reply
sltkr
19 hours ago
[-]
That conclusion may be too hasty. If min cut with k vertices is NP-hard on arbitrary graphs, that doesn't automatically mean that that applies to a 2D grid too.

Is NP hardness proven for just planar graphs? Those are closer to the 2D grid, but still slightly more general. All I could find was a reduction to densest k subgraphs, but Wikipedia tells me that whether that problem is NP hard for planar graphs is an open question.

To be clear, I would be very surprised if the problem turns out to be _not_ NP hard, but there is no trivial equivalence to min cut in general graphs to show that it is.

reply
emil-lp
6 hours ago
[-]
I agree, that is a good point. Although it is (induced) subgraphs of 2D grids, which gets you a bit closer to the planar case (albeit with bounded degree).

It might be polytime on planar graphs, but that would be surprising.

reply
emil-lp
1 day ago
[-]
Someone asked about this very problem here:

https://cs.stackexchange.com/questions/176005/how-to-remove-...

reply
emil-lp
2 days ago
[-]
There's probably an FPT algorithm using important separators (4^k).
reply
qwertyforce
2 days ago
[-]
I think there should be some graph algorithm for this, to find a bottleneck in a graph
reply
savolai
2 days ago
[-]
I would like to be able to compare/switch optimal with my solution with single click.
reply
zimpenfish
2 days ago
[-]
Side by side or a diff view would be great.
reply
zimpenfish
7 hours ago
[-]
Happy to see there's now a toggle between "your solution" and "optimal" once you've submitted. Makes it much easier to see what you missed.
reply
rob001
2 days ago
[-]
I agree. Also, knowing the max score in advance would be better, so you know when to stop/whether to keep going.
reply
naedish
2 days ago
[-]
I'm happy not knowing myself but the answer can be found easily in DevTools. All the max scores are there (for current and previous days only).
reply
ahahahahah
1 day ago
[-]
that gives away too much information, instead i'd go with something that tells you that you've found the best solution. you'll still be able to know whether or not to keep going, but you get no information that makes finding the ideal solution easier.
reply
the_shivers
1 day ago
[-]
This is now implemented on daily levels! Click the link below your score after submission.
reply
savolai
5 hours ago
[-]
Thanks for the pleasant experience of providing a feedback loop for my suggestion, felt rewarding and the implementation works nicely.
reply
merelysounds
1 day ago
[-]
Same.

I took a screenshot of my solution and the optimal one - and then I could compare like this.

reply
langarus
2 days ago
[-]
lovely, I've created a solution finder for it.

1. Do a screenshot of the grid (try to include walls as well)

2. Open https://enclosure-horse-solution.onrender.com/

3. Make sure the number of walls are correct in the input (bottom left)

4. Press "Solve"

PS: It might crash as it's on the free version of render. I've added a caching layer.

Here's the github so you can run it locally:

https://github.com/langarus/enclosure.horse-solution

clone it and run

make init // make web

reply
g4zj
2 days ago
[-]
There is a level editor with the ability to show the optimal result for a custom level. In theory, one could recreate any official level and reveal the best solution that way. However, I haven't tried this to verify any intentional roadblocks by the developer.
reply
ronbenton
2 days ago
[-]
You caching in memory or disk? Redis or db might survive the crashes and reduce future ones
reply
langarus
2 days ago
[-]
on disk, so basically I'm trying to save the image of a solution and reuse it if the same quiz is required. So instead of recomputing the result just return the same image.
reply
ronbenton
2 days ago
[-]
Got it. Is that cache surviving the crashes?
reply
langarus
2 days ago
[-]
I'd have to host it somewhere (s3?). Right now I only commit the solution png to github. OFC it's not a good option but it's free and fast.
reply
ronbenton
2 days ago
[-]
I think Cloudflare r2 has a generous free tier. You can also technically store images in redis I think. anyways, thank you for making this, really cool!
reply
slashyellow
2 days ago
[-]
curious question from a non-programmer - are you checking against the exact same image (i.e. hashed), or is there an easy way of trying to match an image to a very similar one you've seen before?
reply
flexagoon
2 days ago
[-]
Not OP, so I don't know what their website does, but there is a technique called "locality-sensitive hashing" that gives the same hash for similar items instead of exactly the same ones

https://en.wikipedia.org/wiki/Locality-sensitive_hashing

reply
langarus
2 days ago
[-]
I see some of you are already crashing the server. :melting: try to run it locally if you can't get the result via render
reply
Arubis
2 days ago
[-]
Each time I see a `horse` domain, particularly for entertainment, I remember to `traceroute bad.horse` and smile again.
reply
ZeWaka
1 day ago
[-]
lmao, this is beautiful
reply
roskelld
2 days ago
[-]
I did Day 8 - I don't know if Perfect means I got the most optimal score, I do show up at the top of the graph.

https://enclose.horse Day 8 PERFECT! 100%

reply
zimpenfish
2 days ago
[-]
If you click on "View Optimal", it shows you the optimal solution which should be identical[0] to yours for "Perfect".

[0] I'm assuming, possibly quite wrongly, that there's only one optimal solution per day.

reply
grodriguez100
2 days ago
[-]
I don’t see any View Optimal button. Is it present in Mobile ?
reply
culi
2 days ago
[-]
I don't see this button either (desktop) but searching the HTML gives a <script> that says

  window.__LEVEL__ = null; window.__DAILY_MODE__ = true; window.__DAILY_LEVELS__ = [{"id":"FswXDo","date":"2026-01-06","dayNumber":8,"optimalScore":86},{"id":"6UV4Yw","date":"2026-01-05","dayNumber":7,"optimalScore":95},{"id":"VfWi_1","date":"2026-01-04","dayNumber":6,"optimalScore":77},{"id":"CNtGPI","date":"2026-01-03","dayNumber":5,"optimalScore":116},{"id":"tnLvlG","date":"2026-01-02","dayNumber":4,"optimalScore":51},{"id":"Qn9vLs","date":"2026-01-01","dayNumber":3,"optimalScore":74},{"id":"Kj7mXp","date":"2025-12-31","dayNumber":2,"optimalScore":90},{"id":"E03KkY","date":"2025-12-30","dayNumber":1,"optimalScore":68}];
EDIT: the view optimal button appears after submission
reply
toxik
2 days ago
[-]
Results, then scroll down a tiny bit.
reply
keepamovin
2 days ago
[-]
I imagine you went searching for domain names and came up with this? I resisted clicking on this top story all day because I thought "how good could that be? "enclose horse" what is that?" Yet, the experience was genuine-slow-forming-smile-of-understanding. This is really good.
reply
lukebechtel
2 days ago
[-]
Which came first -- the game or the domain name?
reply
hk__2
2 days ago
[-]
Generally the idea of the game, then the domain name, then the game.
reply
sneak
2 days ago
[-]
i have soooo many domains i’ve paid for for years that will now get sites because of the fact i can code at 10x+ now.
reply
cdelsolar
2 days ago
[-]
i like how this was mildly downvoted for some reason
reply
ryandrake
2 days ago
[-]
Cool game, but I don't like how you get only one chance. Even returning to the page, you can't try again to beat your previous score. No replayability value at all.
reply
hombre_fatal
2 days ago
[-]
The one shot per day provides a reason to sink your teeth into one board.

I love Wordle but I found it unplayable when I used that Wordle archive site to play infinite games since there was no reason to think deeply about the 10th+ round I was playing in one sitting.

reply
anigbrowl
2 days ago
[-]
It shows you what the exit routes are, what your score will be, and you can move the gates around as long as you want, so the means of finding the maximum area are entirely within your grasp.
reply
sceptic123
2 days ago
[-]
But you have no idea what the optimal solution is, are you 1,10,50 away from it. Would be nice to have some indicator of how close you are before you submit, though I guess that's intentional.
reply
ryanjshaw
2 days ago
[-]
I believe that’s the point. I had the optimal solution for some time but was convinced there was something better. Eventually I submitted, and seeing the perfect score was more thrilling after convincing myself I was an idiot.
reply
butlike
2 days ago
[-]
If it told you how close you were then you could just brute force your way to a perfect score every board by trying each square.
reply
sceptic123
1 day ago
[-]
But if you remember the best score isn't that approach still possible?
reply
MrGilbert
2 days ago
[-]
I disagree about the replayability aspect. It‘s a daily challenge, so come back tomorrow. I quite like it.
reply
bgbntty2
2 days ago
[-]
I seriously don't get the idea behind daily challenges unless you want to keep users hooked to extract some value from them, but that doesn't seem to be the case here, as there are no ads.

Just show all the different levels at once.

reply
MrGilbert
2 days ago
[-]
That's fine. So these kind of games aren't for you, then. Remember crosswords in newspapers? Yeah, think of it like that. You don't get hooked until you cannot let go, you get a limited chunk served each day. Same with Wordle.
reply
bgbntty2
2 days ago
[-]
I remember buying a magazine full of crosswords and similar puzzles when I was in the mood.

And when there were sites with unlimited Wordle, I played a few in a row.

On the internet, unlike with newspapers, you're not limited to how many levels/games you can make per day. Making it once per day doesn't make any sense whatsoever. It's condescending to the users and feels like a power trip.

reply
sunrunner
2 days ago
[-]
> It's condescending to the users and feels like a power trip.

condescending (adjective): having or showing an attitude of patronizing superiority.

I don't really see how a once-a-day puzzle is condescending, unless it's a "You can't be trusted to regulate yourself so I'll do it for you" type thing. Adding a dictionary definition like above, however, probably is condescending :)

But I like the one-a-day format because, as other comments have said, you can spend an entire day with just one puzzle feeling important (relative to things that are important).

reply
anonymous908213
2 days ago
[-]
You can freely make levels and browse other people's levels. The complaining about power trips seems as uncharitable a perspective as you could possibly conceive of, not to mention a bit theatric.
reply
rtgfhyuj
2 days ago
[-]
so don’t? others have said they like it, you don’t, move on
reply
sfink
1 day ago
[-]
> you want to keep users hooked to extract some value from them

Ironically, that's what I initially liked about the daily puzzles like Wordle: they forcibly prevented you from sinking too much time into them. It was sort of like, "hey here's something cool, and I'm going to make sure it's a positive addition to your life by preventing you from succumbing to your own addictive impulses". You could call that condescending or infantilizing, but to me it's just part of the look and feel of a thing. Especially if the author isn't charging money, they get to use whatever tools are at their disposal to craft the users' experience of it. Wordle Over And Over Again is a different game than Wordle Once Daily. (And WOAOA done properly would probably have a progression of difficulties, or themes, or something, whereas WOD makes more sense with pure randomness.)

reply
Skeime
2 days ago
[-]
I assume that "all the different levels" might not exist yet. The author is probably creating them a bit in advance, and will keep going as long as they're motivated. Having a regular schedule for new releases helps, and doing it daily seems as sensible as any other schedule.
reply
rbits
2 days ago
[-]
If you click the menu button in the top right you can play all the past puzzles
reply
gs17
1 day ago
[-]
IMO they should have a (second) pop-up that warns you that you only get one submit. Not sure if it should let you know if you've made an optimal solution or not, but since it's not timed there's no cost in slowing people down. I've seen similar daily puzzles where you get to see the leaderboard and then can go back and optimize further. Yes, it says it at the beginning, but it's still easy to forget.
reply
geoffschmidt
2 days ago
[-]
Click the sandwich icon in the top right, then either Past Puzzles or Browse, and you can play more puzzles. (Or even create and submit your own.)
reply
matsemann
2 days ago
[-]
You can just remove/change walls after having placed all. You see your current score, but can keep iterating.
reply
hn8726
2 days ago
[-]
Yes but it would be nice to see the targets, so you know how far off from an optimal solution you are. I know I'd spend more time looking for better solves if I knew the current one can be improved
reply
QuantumNomad_
2 days ago
[-]
You get one submit but you can press reset and find better solutions even though you can’t submit it to the leaderboard
reply
zwnow
2 days ago
[-]
You can just test without submitting though?
reply
goodmatt
2 days ago
[-]
Clear cookies?
reply
klohto
2 days ago
[-]
bruh it’s like Wordle, come back tomorrow
reply
n4r9
2 days ago
[-]
Nice game! Out of curiosity, are the daily levels built by hand or algorithmically? Is there some way to measure their difficulty computationally, other than just trying to do it yourself or seeing how many people get a perfect score? I'm also working on a grid-based browser game and both those questions have come up for me, I'm keen to see how other people tackle it.
reply
the_shivers
1 day ago
[-]
All the daily levels are built by hand. I struggled to come up with a good random level generator. You can see my feeble attempts in the Edit page (via the hamburger menu) by giving the dice button a few sad clicks.

I did originally try to measure the difficulty computationally by running the solver and timing it, but it didn't really line up with what humans would find difficult. Now I'm just eyeballing it.

reply
pests
1 day ago
[-]
There is a built in map editor, click the hamburger menu.
reply
zem
2 days ago
[-]
lots of fun! the fact that the walls spill over the square boundaries is very annoying though, i would love to have an option to just make a wall a filled in square without the 3d effect.
reply
rob001
2 days ago
[-]
This is a very cool and enjoyable game. I'd be really interested in knowing what framework/library was used to make it. I inspected the source and can see the game is done on canvas, but can't work out more than that.
reply
Retr0id
2 days ago
[-]
I wouldn't be surprised if they're just rawdogging the canvas API
reply
daneel_w
2 days ago
[-]
The canvas API itself is pretty basic. It's not complicated at all to slap graphical tiles onto the screen.
reply
the_shivers
1 day ago
[-]
Just vanilla canvas + Typescript.
reply
tasuki
20 hours ago
[-]
Thank you for an interesting game! Is the code also available in a nicer-to-read way?
reply
xg15
2 days ago
[-]
Looks like some people have discovered the first "accidental" game mechanic: The horse can walk over cherry fields, but the player cannot place walls on them - so if a level designer places cherries strategically, they can create unblockable paths.

Right now, this is only used for troll levels, but I wonder if you could also use it for some actual puzzles.

reply
Majromax
1 day ago
[-]
It's not just troll levels, see https://enclose.horse/play/n9YDZm
reply
omgmajk
2 hours ago
[-]
Very enjoyable work pastime!

Great stuff :)

reply
arthurjj
2 days ago
[-]
My 10 year old loves this game. He started playing it Wednesday or Thursday of last week and basically all of his screen time. Both trying to optimize and the level design scratch an itch that few games do
reply
zachallaun
1 day ago
[-]
Ton of fun! Was interesting to see how my strategy evolved as well. I started out trying to make a large pen, but quickly realized that wouldn't work, so I made a small pen and then started moving it out. This allowed me to see individual optimizations and try alternatives. Even at the end, about to hit submit, I wasn't sure my solution was optimal, but ended up with the optimal sizse-86 solution for today's challenge. Will try again tomorrow!
reply
nickponline
2 days ago
[-]
I think this problem is called the maximum-weight closure and can be solved as max flow. You want to find a cut between source (horse) so they were no out-going edges not in the cut (escape routes).
reply
emil-lp
2 days ago
[-]
It's not the same problem. First, it's not directed, second it's a vertex separation problem.
reply
nickponline
2 days ago
[-]
Ah yes quite right.
reply
komodo99
1 day ago
[-]
Usability, i'd like either a 'save/restore state' button, or a 'restore current best'. Right now, experimenting after finding a solution seems like a punishment if I can't recall exactly what I did to hit my rolling 'best'. Good game though!
reply
abetusk
1 day ago
[-]
There is a button that restores your best, it's right under the current score.
reply
dyigitpolat
1 day ago
[-]
just vibe-coded an optimizer for this game that takes in the screenshot of the grid and the number of walls as input, and spits out the optimal wall configuration (supports cherries too!)

algorithm:

1. infer grid dimensions

2. color histogram analysis to designate grasses, water, cherries and horse

3. apply mixed-integer linear programming to determine optimized wall placements

4. profit!

try: https://dyigitpolat.github.io/enclose-horse-solver

source: https://github.com/dyigitpolat/enclose-horse-solver

reply
dvh
2 days ago
[-]
> Horses can't move diagonally or over water.

Ah the famous spherical horse in vacuum

reply
DonThomasitos
2 days ago
[-]
I love it! I miss a way to see the reference solution, would be nice in order to learn. Or maybe get a hint.
reply
niemandhier
2 days ago
[-]
This is surprisingly similar to a subset of the ARC II puzzles.

The collected answered could probably be used to teach an AI to approach this type of problem thereby gaining some of the cognitive biases that humans have, which is exactly what you want in some cases: An AI that generates human like solutions to hard problems .

reply
xg15
2 days ago
[-]
I'm pretty sure the author got the domain first and then designed an (awesome) game around it.
reply
grugdev42
2 days ago
[-]
Love this! I feel like this would get a lot of traction as a mobile app. It's a perfect "I've got five minutes free" game.

Doesn't feel outrageously difficult to put inside a webview?

reply
DuncanCoffee
1 day ago
[-]
Nice game, I'm going to sink some time on these! Got 86 points today

https://enclose.horse Day 8 PERFECT! 100%

reply
naedish
2 days ago
[-]
A very fun game - it took quite a bit of fiddling to get an optimal solution using an LLM. Interesting as I haven't tried using them for 'unique' algo problems much. And then the day 9 puzzle broke my original solver (I had bounded areas that were unreachable to the horse so didn't actually score). Will be interesting to see whether the solver works on day 10.

It would be interesting to be able to change the wall budget for each puzzle to add some variation (with a max limit).

reply
hotsalad
1 day ago
[-]
Does each day's challenge come out at a certain time in your local timezone? I have a friend who is seeing day 9 when I can only see day 8. I'd request having new daily maps come out at a consistent global time for the purpose of competing with friends who live in different timezones.
reply
the_shivers
1 day ago
[-]
I tried to match what Wordle does, so it should come out midnight in your local timezone.
reply
genekwame
1 day ago
[-]
Raaarhh. Perfect solution yesterday, perfect solution today! I'm really on a roll. Love love the game
reply
roskelld
2 days ago
[-]
Enjoyed that.

Removing a block was a bit fiddly on FireFox (Floorp) due to the right click menu appearing when I tried to click on a tile.

Looking forward to tomorrows!

reply
porphyra
2 days ago
[-]
I thought so too at first but you can just left click to remove the wall actually.
reply
fwipsy
2 days ago
[-]
I expected the horse to move one tile for each block you placed. I had an elaborate plan to lure it towards one exit and then close it at the last minute... Nope!
reply
Biganon
2 days ago
[-]
John Conway studied similar problems

https://en.wikipedia.org/wiki/Angel_problem

reply
zimpenfish
2 days ago
[-]
I did see a game recently which did that (you place a tile, the animal moves a tile, etc.) - possibly on itch.io. I'll see if I can dig it out.
reply
OscarCunningham
2 days ago
[-]
There's an old Flash game called 'Chat Noir' where you have to trap a cat on a hexagonal grid. Here's a copy of it: https://www.hoodamath.com/games/chatnoir.html
reply
zimpenfish
2 days ago
[-]
Ah, yes, the one I played recently was basically that (except it was a horse, I think.)
reply
matsemann
2 days ago
[-]
I remember a game I played on my phone ~15 years ago called "Greedy Spiders". The spiders would move greedily towards something every move, but you could cut strings in their web so they would have to start a new route. So you would kinda have to lure them into going one direction while slowly chipping away at the web, until you could completely cut them off or force them to have to take a longer detour giving you more time to cut more of the web. Quite challenging after a while.
reply
netsharc
2 days ago
[-]
A Windows 3.1 game called Rodent's Revenge: https://classicreload.com/win3x-rodents-revenge.html

Video: https://www.youtube.com/watch?v=-r6CnPzTXKE

Damn, the good old days when games didn't have loot boxes, ads, etc...

reply
divbzero
2 days ago
[-]
The game dynamic feels a bit like Wordle: One puzzle per day and different solutions that you can compare with others.
reply
eithed
19 hours ago
[-]
A nice easter egg - click on a horse, when enclosed, on mobile
reply
Aardwolf
1 day ago
[-]
Nice puzzle! But I'd like a button to go back to your most optimal solution so far: it's tedious to try other options but then have to convert it back to your better solution again...
reply
xp84
1 day ago
[-]
There is one! Or maybe dev is just that fast. Tap where it says “Best: 67” and it reverts to previous best.
reply
elestor
20 hours ago
[-]
Say that again
reply
athrowaway3z
1 day ago
[-]
Great little game. For the community levels, I'd suggest adding filters based on size & walls.

I'd even go so far as to deny any submission with more than sqrt(size) walls.

reply
SteveJS
1 day ago
[-]
Wife’s comment: “Cherries? It needs to be an apple.”
reply
alexjplant
2 days ago
[-]
Fantastic fun! My humble level contribution is here [1].

[1] https://enclose.horse/play/44wCCO

reply
croemer
1 day ago
[-]
I didn't realize level 1 gave me 11 (eleven) walls at first. I thought it stood for II = roman 2. Maybe use a font that makes the difference between 1 and I clearer.
reply
DougN7
1 day ago
[-]
Wow, that’s a lot more challenging than it looks. I agree with another commenter that the 3d blocks look confusing - they appear to cover two spaces.
reply
atticus_
1 day ago
[-]
https://enclose.horse Day 8 PERFECT! 100%
reply
sandyarmstrong
2 days ago
[-]
Is there guaranteed to be a solution that encloses the cherry? Is Day 8 the first day to have a cherry?
reply
the_shivers
1 day ago
[-]
So far, I haven't had the heart to deceive people with red cherrings. All levels with cherries use at least some of them in the solution.
reply
nirolo
2 days ago
[-]
Very cool game. Immediately reminded me of pathery, which I can also recommend to everyone who enjoys this.
reply
MagicMoonlight
1 day ago
[-]
This is a really fun game. And I just realised you can make your own levels!
reply
29athrowaway
2 days ago
[-]
A good game. Possibly the 2048 of 2026.
reply
abhi555shek
2 days ago
[-]
Nice game! I could only play one game but wish I could play previous days' games as well
reply
wseqyrku
2 days ago
[-]
You can. Checkout the Past Puzzles in the menu (top-right).
reply
wirtzdan
1 day ago
[-]
So fun!

I wonder how the wiggle animation is implemented in for the buttons and modal.

reply
g0ran
2 days ago
[-]
Seeing tile animations immediately reminded me of Godzilla 2: War of the Monsters on NES.
reply
Lammy
1 day ago
[-]
It's like ChuChu Rocket! + JezzBall; two of my favorite games!
reply
godisdad
1 day ago
[-]
Looking forward to the AI enabled subscription version
reply
sambuccid
1 day ago
[-]
I want a tool that visualizes code paths in this way
reply
theo1996
1 day ago
[-]
I dont understand what is the goal of this game
reply
pests
1 day ago
[-]
Enclose the horse. Horse likes most space.
reply
valleyer
2 days ago
[-]
Nice. Reminds me of Rodent's Revenge.
reply
posed
2 days ago
[-]
I enjoyed it, thanks for making it!
reply
Narushia
1 day ago
[-]
Happy Year of the Horse!
reply
falloutx
1 day ago
[-]
Great game
reply
menzoic
2 days ago
[-]
Leetcode problem
reply
sublinear
1 day ago
[-]
Fun game, but the animation style is too distracting for me. Maybe there should be an option to disable it or have it stop automatically.

I didn't initially expect it would be a problem, but the constant squiggly movement gets very annoying.

reply
jerbearito
2 days ago
[-]
Very fun
reply
genekwame
1 day ago
[-]
Raaarrrhh. Perfect solution yesterday, perfect solution today! I'm really on a roll lmao. Love it
reply
zwaps
2 days ago
[-]
Which AI am I training here?
reply