Show HN: Lights Out: my 2D Rubik's Cube-like Game

(raymondtana.github.io)

77 points | by raymondtana 2 days ago

14 comments

  • adamschwartz 1 day ago
    Memorize which cells are white when the board first loads. Tap all of those in order without regard to the way the board changes as you go.

    Edit: above tested for 5x5 rows&cols. For even boards it seems there’s a small end-game to repeat the process — something about parity I assume.

    • rprenger 1 day ago
      And you can do that at any board state, so if it starts with like 16 white squares you can make one or two greedy moves to minimize white squares, then do your memorize trick.
      • adamschwartz 1 day ago
        Yea that can shave a few moves off.

        For fun you can also, for example, invert any board in N moves by tapping every cell straight across any row or column.

    • o-o- 1 day ago
      Interesting, and black magic as far as I'm concerned. How does that algorithm translate onto the Rubik's cube (which I evidently never learned to solve)?
    • patrickdavey 1 day ago
      Why does that work?
      • primitivesuave 1 day ago
        If you think of each button press as a matrix being added to the board state where only the row and column are set to 1, along with the commutative nature of the moves (order doesn't matter), then as long as the total number of "flips" from the cumulative matrices of moves is odd, then it will reset the board.

        Mathematically I might say that the system's precomputed solution vector is readily apparent.

        • furyofantares 1 day ago
          I think this only works with an odd grid size. With an even grid size you might have to do it twice.
        • 0x1ceb00da 1 day ago
          What if there was only one white block on the grid?
          • adamschwartz 1 day ago
            The game is initialized with a guaranteed solvable board:

            https://github.com/RaymondTana/Lights_Out/blob/31fe5e866c45c...

          • bradrn 1 day ago
            I’m pretty sure this case is solvable too. Click the white block, then click all the blocks which turned white after that. This flips each block twice (bringing them back to their original state), except for the original white block which was only flipped once.
  • raymondtana 1 day ago
    Hi everyone, I'm the OP and wanted to share a few comments that might come as spoilers. So read with caution!

    1. The default game has a simple winning strategy: the app begins with a 5x5 board under the "Same Row & Column" variant. Some here have already figured out how to get all reds: [Memorize all the white squares on the board at some fixed moment, and click those cells in any order.] Some of the info below helps see why.

    2. The game is always winnable: the app is set up to secretly begin with all reds and then perform many random clicks to mess it up; it's always reversible.

    3. The order of clicks doesn't matter: the click actions commute.

    4. Every click is self-inverse: clicking a cell twice under any variant leads to the same board as before.

    5. A winning strategy need only list out which cells to click once: Because of the properties of commutativity and self-inverse, any winning strategy could be freely shuffled in order and have any duplicate clicks cancel out, leading to a strategy of cells meant to be clicked just once---the rest ignored.

    6. Suppose "n" is odd and play the "Same Row & Column" variant. Then, the n-by-n board is solvable by the strategy of "click all the cells that were white." But when "n" is even, then this strategy fails on the n-by-n board. However, there indeed is another strategy that solves those systematically.

    7. Very little is known about the other variants, nor about other sizes and dimensions of boards. And it is not true in general that any random pattern of white-and-red can be turned into all-reds. Try to find a good heuristic for separating out winnable vs. unwinnable boards!

    8. I did forget to mention other versions of Lights Out besides the handheld game. Other physical games and video games used the 5x5 "Adjacent" variant, too.

    Bonus Questions:

    1. Can you think of an interesting clicking-rule variant that would not be commutative?

    2. Can you come up with the winning strategy for winning n-by-n boards when n is even under the "Same Row & Column" variant?

    3. Can you figure out any winning strategy for the other variants? I haven't found any good way to proceed without just memorizing the solutions.

    Thanks for the comments!

    • rossant 1 day ago
      Among the 2^n configurations, how many are solvable?
  • throwawayk7h 1 day ago
    There are two significant ways in which this differs from a Rubik's cube.

    1. It's abelian. Moves can be done in any order, to the same result.

    2. there's a simple algo to solve this. Working from top to bottom, left to right: click the first white cell, then click the cell below it. (Then there's a simple endgame at the end once the bottom row is reached.)

  • kevindamm 1 day ago
    Enjoyable, after getting the hang of the "full rows/cols" variant it became like popping packing bubbles.. I kind of wanted to keep playing with the kaleidoscopic shapes you can make with the near-complete positions.

    I'd seen the "adjacent only" variant before but not the other two, I'm glad the default was one I hadn't seen or I might not have noticed there was a choice!

    Have you considered allowing the all-white state as a terminal state too? First time I completed it was with a detour to there (I know the text says make them red but my instincts went with the lights-out being to the color matching the background)

    Thanks for the diversion. On the 5x5 my scores went from ~100 to dozens (sometimes 8-10). On larger boards I'm not as consistent but also not as interested in path length.

  • hoqqanen 1 day ago
    I loved that handheld as a kid! I was discovering how powerful vibecoding was last year and used this exact game to show some friends https://drive.google.com/file/d/1jVLpVfUWDkdgImLo45VDtroB-EZ...

    One other variant that I've made in the past is cells have N states which increment and cycle mod N.

  • hatthew 1 day ago
    A straightforward solution for larger puzzles: if you click on the four corners of a rectangle, you flip those corners while leaving the rest of the rows/columns the way they started. So after you pick the low hanging fruit at the start, find any rectangle with 3 or 4 white corners, and then click on all 4 corners of that rectangle. If this leaves you with a just one white in each row and column, it's easy and doesn't require memorization to click each of those whites to get to the solved state.
  • onedognight 20 hours ago
    Here’s my solution: clicking four boxes that form the corners of a rectangle will flip them leaving the rest of the board unchanged. Using this move you can find sets of rectangle corners with more white than red and just click them. This will converge to a solution. If you can find a symmetric board where all rectangle corners have equal red and white then this method would fail. I haven’t found one yet.

    EDIT: I found some positions where this technique cannot be directly applied.

  • hackernj 1 day ago
    Years ago, I developed a 2D Rubik's Cube game for my son, in order to learn JavaScript: https://www.thelyonsfamily.us/games/FlipYourLid/

    As far as I know, my son is the only person who plays it. :-)

  • taeric 1 day ago
    Fun game, kudos!

    Calling it a 2d rubik's like makes me wonder if I should try to turn the code at the bottom of https://taeric.github.io/cube-permutations-1.html into a game.

  • Carrok 1 day ago
    Not to be confused with the other grid based light flipping game, Lights Out, from 1995.

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

    Math article https://matroidunion.org/?p=2160

    • acomjean 1 day ago
      Or 80s Merlin’s Magic square game.

      https://en.wikipedia.org/wiki/Merlin_(console)

      Which was only 3x3. But red LEDs which were all the rage in handhelds in the 80s.

      When learning JavaScript I made a dupe of the Merlin game in JavaScript. It’s really old but still seems to run. Lacks the depth of this game with its larger grid.

      https://www.aramcomjean.com/magic_squares.html

      • noduerme 1 day ago
        Amazing. I had one of these, and playing your version just took me back to the frustration I had figuring out that game when I was 7 years old.
  • shiandow 1 day ago
    Once you figure out the trick to the row column puzzle it becomes trivial to solve, except that you need a steady hand.
  • owenpalmer 1 day ago
    I'm glad I got to play it for a bit before learning the trick. Quite a simple and clever puzzle!