frontpage.
newsnewestaskshowjobs

Made with ♥ by @iamnishanth

Open Source @Github

fp.

Open in hackernews

Show HN: Unflip – a puzzle game about XOR patterns of squares

https://unflipgame.com/
184•bogdanoff_2•2mo ago

Comments

BoppreH•2mo ago
Very nice and satisfying, but I would suggest ramping up the difficulty a little faster. I got until lvl 15 by just flipping the obvious areas, taking no more than 2 seconds. It's otherwise very cool and minimalist.

Edit: limiting it to square flips was a great idea. There are just enough moves to make the answer non-obvious (after lvl 15), but not so many possible moves that you get overwhelmed.

---

Edit 2: I just remembered I made a similar "game"[1], where you select columns to XOR with other columns and try to reach the target pattern. Use the scroll wheel and shift+wheel to change the pattern and size.

That was actually part of a real research project in optimizing circuits for computing binary finite fields, where the "game" was a sandbox to try different algorithms. The best algorithm was actually found by someone playing in this sandbox and coming up with an efficient strategy.

[1] https://boppreh.com/source/playreduce/

bogdanoff_2•2mo ago
Thanks! And yeah, I've gotten the suggestion to ramp up difficulty faster from a few people.

Although interestingly some other people in the comments here say they liked how the progression goes.

And that's an interesting little game you made.

And I spent quite some time creating an algorithm and solver to find the par for Unflip. I'm planning to release a blog post about it soon

riffraff•2mo ago
I think if you make the par visible in the "result screen" and add a "try again" option to "next" this could make it more interesting without the need to ramp up difficulty. I think I solved a few cases with a bunch of random shifts, for example, and may have switched to thinking mode if I was faced with that.
stephenlf•2mo ago
Love it. The “par” value is a huge hint. You might consider hiding it
bogdanoff_2•2mo ago
That makes sense. I think what I'm gonna try is hiding it until the level is solved at least once.
martin_balsam•2mo ago
I agree the ramp up is a bit slow, but I love the concept, and the interface. I am stuck at level 26

edit: found a way to solve it in 6, but not in 4

stephenlf•2mo ago
Level 24. I took a natural approach (pull each corner to the center) and got a rather unfortunate picture

—-

Edit: and the right answer was so obvious, too

snowfield•2mo ago
Played until 27. All the levels were pretty easy, 15-30 seconds per level. Mainly because of the "par" feature
jy14898•2mo ago
Stopped at 74 but managed to par all before that somehow. Didn't really do any problem solving/deep thinking about it, just clicking what felt right
lovegrenoble•2mo ago
Neumorphic knot, a puzzle about Knot patterns: https://brainteaser.top/knot/index.html
intalentive•2mo ago
I like it. Played a bunch of levels. I could feel my brain learning new patterns (like the card game Set). There are a handful of really useful primitives.
wilsonnb3•2mo ago
Had a lot of fun with this, great job on the concept and presentation!
bogdanoff_2•2mo ago
Thanks! I'm glad you enjoyed it!
james_marks•2mo ago
Really nice concept and super clean execution. Wish I’d had 1/2 this restraint on adding complexity when I made my own tile-based puzzle game[0]

[0] https://www.hidden-mirrors.com

bogdanoff_2•2mo ago
I like your puzzle game. Yeah, it did take me a bit to understand initially. I wonder, do you generate the daily levels automatically?
james_marks•2mo ago
Glad you enjoyed it. Yeah, the daily levels are algorithmic with an RNG seeded with the date.

Took ages to find an algorithm that produces mostly interesting puzzles in the goldilocks difficulty zone.

zem•2mo ago
I really love how the first few levels teach you about various solving elements and patterns. very well done.
bogdanoff_2•2mo ago
Yeah, that was the idea.
goodmachine•2mo ago
Well, you nailed it there. Nice work
atum47•2mo ago
Android gestures need to be prevented in order for the game to work on mobile (drag finger from right to left go back). Nice game thought.
bogdanoff_2•2mo ago
Interesting. I don't get that on my android phone. What model and browser are you using?
mkl•2mo ago
Worked fine for me on Firefox on Galaxy Note 20. I've never run into single finger back gestures that can start anywhere - seems like that would break almost everything that involves dragging.
vunderba•2mo ago
Nice job. I'm reminded of the "Lights Out" game [1].

https://en.wikipedia.org/wiki/Lights_Out_(game)

kinduff•2mo ago
Did I just get flipped in level 13? I really like it, the level progression feels good. Very nice execution.
Retr0id•2mo ago
Level 60 is a fun one
anigbrowl•2mo ago
Yes I got stuck there for a while. I did a few more after that but my interest waned. I did spend a lot fo time feeling ike a pixel in Conway's game of Life.
bogdanoff_2•2mo ago
Ah, yes, the single-pixel level.
senfiaj•2mo ago
yeah, eventually figured out how to do in 5 moves
mikewarot•2mo ago
Wow... 120 levels... that was hard. I kept getting down to 1 square, and that always stumps me.
bogdanoff_2•2mo ago
wait, did you actually do the whole 120 levels in one sitting? Wow. How long did it take you?
mikewarot•2mo ago
A few hours
mmis1000•2mo ago
It actually have a dedicated answer to solve just 1 square though. But it's not the most optimized way to do the puzzle.
bogdanoff_2•2mo ago
If anyone wants an extra challenge: think, how would you write a solver for this?
NatKarmios•2mo ago
Tangentially related, have you heard of Bombe? It's a hexagonal minesweeper where you write rules to solve every possible scenario. It even checks your rules' satisfiability via SMT.
bogdanoff_2•2mo ago
That's pretty cool. It reminds me of writing peep-hole patterns for an optimizing compiler.
penwielder•2mo ago
(If I'm trying not to spoil anything, do I even post? Maybe I can encourage someone else to have fun giving it more thought.) At least one elegant and efficient answer is within reach for many. The person who first pointed it out to me didn't need to know the relevant branch of mathematics to do so; he intuited the shape of it without the formal terminology.

I'll be particularly curious to hear the pattern(s) in how many solutions there are, and/or the probability of a random board being solvable.

The haptic feedback on mobile is really on point in this implementation.

bogdanoff_2•2mo ago
So what is your solution, I'm curious.

Regarding the number of solvable boards. It is actually possible to calculate the exact number. The solvable boards correspond to the image of the matrix of moves. It will be a vector (sub)space over Z/2Z, so it will always be a power of 2, and its size will be determined by the rank of the matrix. For example for 5x5, there are 2^22 valid boards.

And regarding the number of solutions to a given board, (assuming you ignore the order of moves, because it doesn't matter) it will always be the exact same number, and in the case of 5x5 it will be 2^8. 8 is the nullity of the matrix of moves.

Note that 22+8=30, which is 44+33+22+11, which is the number of possible moves.

penwielder•2mo ago
We might be in pretty similar spots with respect to a solver, then. For one with no conscious linear algebra or deep programming background, as long as XOR or modular addition is familiar (which I suppose narrows it), I think a possible sequence of realizations is:

1. The flippable regions need be flipped at most once, in any order. So, one could think of a solution as a collection of boolean variables, one for each region, indicating whether to flip it (true/1 if so, false/0 otherwise, feels natural).

2. A tile needs to be flipped an even number of times if it starts in the desired state, and an odd number of times otherwise. So: Give each tile an equation by forming the XOR (or addition modulo 2) of the variables for all the regions it inhabits, and then setting that expression equal to 0 if the tile starts out in the desired state, otherwise 1.

3. Observe that such equations are always easy to rearrange so as to solve for any desired variable.

4. Observe that we can therefore run through a familiar substitution process, and good things will happen.

What I find elegant here is that the resulting algorithm is known to many from early algebra and has a much more clearly bounded runtime than the backtracking searches that suit other logic puzzles. Of course, as you've evinced, the fuller representation with linear algebra opens many doors to both implementing this well and exploring its other properties.

Finding par, on the other hand, I'll have to consider further. I suspect that, after representing the solution space succinctly, you could get a fair way with a backtracking search therein (where to make a forward step is to concretely assign a value to a variable), with the search tree trimmed via the best par observed so far. If you have something drastically better than that, I'm sure that would be interesting!

Looking forward to seeing what you do next, also perhaps the potential blog post you mentioned elsewhere in this thread, etc.

fsckboy•2mo ago
i have a strong quibble about calling this XOR. XOR takes two arguments and one of the arguments here is implicit. The game inverts the square colors, which XORing with "1" will do, but it's not defined whether white or black is 1, it just inverts white and black.
bogdanoff_2•2mo ago
The way I thought of it was 0=white 1=black. I used the term XOR when posting on hacker news because I thought people here might have an intuition about the kind of patterns it could form in 2D
fsckboy•2mo ago
I have the intuition, I understood what you meant. but I still think it's an error.
Hackbraten•2mo ago
If you're into retrocomputing, the C64 game Quadromania (1987) has similar gameplay:

https://archive.org/details/Quadromania_1987_CP_Verlag_de-en...

bogdanoff_2•2mo ago
Interesting. It is very similar.

It took me a while to get past the instruction screen (I needed to press space, then "E" for english, then press escape) Now I can't seem to figure out the controls for the actual game.

sd9•2mo ago
This was incredibly easy and then it suddenly got incredibly hard
berkaycit•2mo ago
It’s amazing. It inspired some new ideas.
slig•2mo ago
Great game, thanks for sharing. Would love to have a daily level.
bogdanoff_2•2mo ago
Yeah, it's my plan to implement daily levels, as well as weekly levels.

I was thinking of making weekly levels be very big (like 12x12) where I don't know what the par is myself, and have it be a challenge to see who in the community can figure out a way to get the lowest number of moves.

And daily levels would probably be more similar to the regular levels.

slig•2mo ago
Thanks for replying. Since you're considering bigger levels, maybe three daily levels: easy / medium / hard.

On my games I usually go with five levels [1], in different tabs that can be solved concurrently, from very easy to very hard. People seem to enjoy the progression.

[1]: https://www.zebrapuzzles.com

bogdanoff_2•2mo ago
Hi. I haven't added a daily level to Unflip yet, but I created a Weekly level.
bogdanoff_2•2mo ago
Ok, there's a daily now as well
mmis1000•2mo ago
The game is quite fun. But it seems the difficulty ramp quite late? It's not very difficult to get the answer with least step by solve the side first until about last 20 levels.

Also, the game does give you a hint about how to bruteforce the level if you only have one square left. Good job.

bogdanoff_2•2mo ago
Good point. I definitely need to work on the progression.
stevenalowe•2mo ago
ASMR FTW

Well done!

bogdanoff_2•2mo ago
All the sound is purely from the vibration of your phone!
stevenalowe•2mo ago
What sounds?
bogdanoff_2•2mo ago
You said ASMR, I thought you meant the auditory phenomenon.

Show HN: MCP App to play backgammon with your LLM

https://github.com/sam-mfb/backgammon-mcp
2•sam256•24m ago•0 comments

Show HN: Look Ma, No Linux: Shell, App Installer, Vi, Cc on ESP32-S3 / BreezyBox

https://github.com/valdanylchuk/breezydemo
241•isitcontent•16h ago•26 comments

Show HN: I spent 4 years building a UI design tool with only the features I use

https://vecti.com
343•vecti•18h ago•153 comments

Show HN: If you lose your memory, how to regain access to your computer?

https://eljojo.github.io/rememory/
307•eljojo•19h ago•190 comments

Show HN: I'm 75, building an OSS Virtual Protest Protocol for digital activism

https://github.com/voice-of-japan/Virtual-Protest-Protocol/blob/main/README.md
5•sakanakana00•1h ago•1 comments

Show HN: I built Divvy to split restaurant bills from a photo

https://divvyai.app/
3•pieterdy•1h ago•0 comments

Show HN: R3forth, a ColorForth-inspired language with a tiny VM

https://github.com/phreda4/r3
77•phreda4•15h ago•14 comments

Show HN: Smooth CLI – Token-efficient browser for AI agents

https://docs.smooth.sh/cli/overview
93•antves•1d ago•69 comments

Show HN: ARM64 Android Dev Kit

https://github.com/denuoweb/ARM64-ADK
17•denuoweb•2d ago•2 comments

Show HN: BioTradingArena – Benchmark for LLMs to predict biotech stock movements

https://www.biotradingarena.com/hn
26•dchu17•20h ago•12 comments

Show HN: I Hacked My Family's Meal Planning with an App

https://mealjar.app
2•melvinzammit•3h ago•0 comments

Show HN: Artifact Keeper – Open-Source Artifactory/Nexus Alternative in Rust

https://github.com/artifact-keeper
152•bsgeraci•1d ago•64 comments

Show HN: Slack CLI for Agents

https://github.com/stablyai/agent-slack
48•nwparker•1d ago•11 comments

Show HN: I built a free UCP checker – see if AI agents can find your store

https://ucphub.ai/ucp-store-check/
2•vladeta•4h ago•2 comments

Show HN: Gigacode – Use OpenCode's UI with Claude Code/Codex/Amp

https://github.com/rivet-dev/sandbox-agent/tree/main/gigacode
18•NathanFlurry•1d ago•9 comments

Show HN: Compile-Time Vibe Coding

https://github.com/Michael-JB/vibecode
10•michaelchicory•5h ago•1 comments

Show HN: Slop News – HN front page now, but it's all slop

https://dosaygo-studio.github.io/hn-front-page-2035/slop-news
15•keepamovin•6h ago•5 comments

Show HN: Daily-updated database of malicious browser extensions

https://github.com/toborrm9/malicious_extension_sentry
14•toborrm9•21h ago•7 comments

Show HN: Horizons – OSS agent execution engine

https://github.com/synth-laboratories/Horizons
23•JoshPurtell•1d ago•5 comments

Show HN: Micropolis/SimCity Clone in Emacs Lisp

https://github.com/vkazanov/elcity
172•vkazanov•2d ago•49 comments

Show HN: Falcon's Eye (isometric NetHack) running in the browser via WebAssembly

https://rahuljaguste.github.io/Nethack_Falcons_Eye/
5•rahuljaguste•15h ago•1 comments

Show HN: Fitspire – a simple 5-minute workout app for busy people (iOS)

https://apps.apple.com/us/app/fitspire-5-minute-workout/id6758784938
2•devavinoth12•9h ago•0 comments

Show HN: I built a RAG engine to search Singaporean laws

https://github.com/adityaprasad-sudo/Explore-Singapore
4•ambitious_potat•9h ago•4 comments

Show HN: Local task classifier and dispatcher on RTX 3080

https://github.com/resilientworkflowsentinel/resilient-workflow-sentinel
25•Shubham_Amb•1d ago•2 comments

Show HN: Sem – Semantic diffs and patches for Git

https://ataraxy-labs.github.io/sem/
2•rs545837•10h ago•1 comments

Show HN: A password system with no database, no sync, and nothing to breach

https://bastion-enclave.vercel.app
12•KevinChasse•21h ago•16 comments

Show HN: FastLog: 1.4 GB/s text file analyzer with AVX2 SIMD

https://github.com/AGDNoob/FastLog
5•AGDNoob•12h ago•1 comments

Show HN: GitClaw – An AI assistant that runs in GitHub Actions

https://github.com/SawyerHood/gitclaw
9•sawyerjhood•21h ago•0 comments

Show HN: Gohpts tproxy with arp spoofing and sniffing got a new update

https://github.com/shadowy-pycoder/go-http-proxy-to-socks
2•shadowy-pycoder•13h ago•0 comments

Show HN: I built a directory of $1M+ in free credits for startups

https://startupperks.directory
4•osmansiddique•13h ago•0 comments