Eternal Struggle

(yoavg.github.io)

405 points | by yurivish 11 hours ago ago

94 comments

  • francisduvivier 8 hours ago

    Some people here were asking for it so I quickly vibe forked a speed control slider for farming some karma here on Hacker News:

    https://francisduvivier.github.io/eternal-struggle-with-spee...

    Code: https://github.com/francisduvivier/eternal-struggle-with-spe...

    • wvbdmp 7 hours ago

      Not to alarm anyone, but when I ran this, the black ball eventually joined the dark side and the whole thing ended up black. I’m sure this doesn’t mean anything for the greater universe.

      • soneca 7 hours ago

        This happened to me in the original site. I think it happens when the white and black balls collide at the exact same spot of the border.

      • temp0826 6 hours ago

        A little matter-antimatter asymmetry never hurt anyone

      • raspasov 4 hours ago

        The opposite can also happen (where the whole thing goes white).

      • bilbo-b-baggins 7 hours ago

        Metaphor for American politics.

      • gedy 6 hours ago

        "I am.. Tetsuo."

    • Hendrikto 27 minutes ago

      > vibe forked a speed control slider

      Very on brand, it does not work correctly. I can turn the speed up but not back down again.

    • rnotaro 7 hours ago

      This vibed coded implementation is buggy.

      If you go to 64.00×, it can't slow back anymore.

    • narrator 3 hours ago

      It looks like it converges to a normal distribution curve with white being the area under the curve.

    • brcmthrowaway 3 hours ago

      At fast speed I see a trail of the circles. What gives?

    • maxlin 4 hours ago

      Thanks :D I did really want to know what kind of shape it would tend towards over time.

      Running 100x for some moments, the white part got pincer maneuvered by the black and I ended up with the whole circle becoming black. Don't know what to think of that lol

  • MrJohz 9 hours ago

    The cool thing about this is that it's self-balancing - if either side gets larger than the other due to random chance, the ball in that side will have more space to bounce in, and therefore bounce less often, slowing its growth. Meanwhile, the ball in the smaller side will bounce more often in its smaller space, making up the ground.

    • SonOfLilit 9 hours ago

      There are stableish equilibria that are not 50-50, e.g. one color having a donut around the other color that has a donut hole.

      • istjohn 9 hours ago

        Yes, because it's not actually area that balances out but mean time between bounce against the black/white boundary.

      • aoeusnth1 3 hours ago

        That's not a stable equilibrium if the hits have a large enough effect with respect to the movement of the balls. The internal circle will create disturbances against both sides of the inner circle, but the outer ball will have to travel a longer distance to move from one side to the other to counter them.

      • n2d4 9 hours ago

        Now the question remains, are there stableish equilibria that are 50/50? Splitting it into two half-circles sounds like an equilibrium at first glance, but I'm not convinced it is, as only a tiny bit of random luck seems to make it become a "horseshoe" pattern instead.

        (That assumes that the simulation is randomized of course, which doesn't seem to be the case for the one in the link posted here.)

      • 9 hours ago
        [deleted]
    • Animats 8 hours ago

      It's amazing how stable it is. It's been running in a background tab for a hour now, and it still has the yin/yang look.

      • Liron 8 hours ago

        I think the balls stop when the tab isn't focused

        • dotancohen 6 hours ago

          That's in another two months.

      • poopsmithe 3 hours ago

        Yeah, definitely run it in the foreground. Mine became completely black in about 3 hours.

  • teamworketernal 9 hours ago

    I was cheering on the black circle's tunneling project when they both got caught in a rapid-fire spiral and the black one glitched through to the other side.

    https://imgur.com/a/dhCSNmi

    • panarchy 8 hours ago

      I think it misinterpreted what kind of tunneling you were cheering on.

    • volemo 9 hours ago

      The darkness has come upon the world!

    • cocoto 9 hours ago

      Had the exact same bug! Not so rare I think.

    • camtarn 9 hours ago

      Hah! I was wondering if that was possible.

  • alyxya 9 hours ago

    I watched it for an hour, and at some point the black ball crossed the boundary onto the black side, so eventually the whole circle became black.

    • drob518 8 hours ago

      It went to the dark side.

  • hk__2 10 hours ago
    • dang 5 hours ago

      We'll put that link in the top text as well. Thanks!

  • SkipperCat 10 hours ago

    An excellent piece of artwork! Really captures the meaning of Yin Yang, at least to me.

  • sabellito 9 hours ago

    Got a horseshoe shape running at 50x for 60 seconds:

    https://imgur.com/a/b6b2IDx

    • andoando 7 hours ago

      Same, if one of them punches through in one place, that hole shapes the angle of the bounces and reinforces itself and the other side fills in around the hole.

  • clocker 7 hours ago

    reminded me of this one that ends at some point

    https://ask5.github.io/gold-wars/

  • mikedelfino 5 hours ago

    Shouldn't each circle be pulling in its own color instead of pushing the other one out? Right now it looks like they're expanding the opposing color, when you'd think they'd be rooting for themselves.

  • Insanity 10 hours ago

    I guess it’s supposed to start on mouse move (based on skimming the source code).

    On a phone it doesn’t seem to trigger unless I changed the background so I spent a minute just staring at the symbol without anything happening lol :D

  • Lerc 8 hours ago

    I made a game on this principle many years ago. Two players with turn left,turn right, thrust and fire. You can only exist in your own space, shooting at the walls dug holes of your colour.

    You had a bunch of critters scattered around the map trying to get home and you had to make paths for them while stopping your opponent from getting their critters home.

  • PlunderBunny 6 hours ago

    Sometimes I see the 'border' move slightly where a ball hasn't hit it. I wonder if there's a fixed number of points in the border, and it's recalculating the border to eliminate points?

  • federico-peconi 9 hours ago

    so simple yet so deep!

    anyone willing to provide a math-proof like argument on why the shape seem to stick to the YY curve indefinitely as the "eternal" name suggests?

    Should it always be this way or is there at least one bad initial bouncing configuration for which chaos can take place and we loose the YY curve?

    Does not seem that obvious to me.

    • thejohnconway 5 hours ago

      People are responding to you saying that it doesn't retain the yin-yang shape, but I've been watching for a while on 64x speed, and the yin-yang shape is one it repeatedly returns to.

      I'm not even a dimwitted individual with an advanced degree in hyperbolic topology, but I can see what's happening intuitively. When one of the balls makes an indent large enough, that indent focusses the bounce from the circular edge which reinforces the indent further. This leads to a semi-stable shape where one of the balls is bouncing around a horseshoe and the other in a tunnel. However, if one side of the horseshoe becomes pinched small enough that ball is less likely to enter, that side of get eliminated, and you have a yin-yang.

      More simply, the round edge seems to encourage tunnelling, and any asymmetry in the tunnelling is yin-yang-ish.

    • crazygringo 8 hours ago

      It doesn't. It quickly just becomes a random curve after a few minutes at normal speed if you leave it open.

      For obvious reasons it tends to stay half white half black (if one half gets smaller its ball will bounce faster) but the shape and its orientation varies randomly.

      • adtac 6 hours ago

        wow not even yin-yang can escape entropy or the heat death of the universe

    • stephenlf 9 hours ago

      I think it’s just random chance. I haven’t run any simulations or anything, but I suspect the YY curve is no more stable than any simple 50-50 split. I bet over large timespans the YY curve straightens out just from entropy.

    • geor9e 9 hours ago

      It doesn't. Seems to be like a lava lamp until one ball breaks thru. See the other comment with the console command to edit the speed.

  • kingforaday 3 hours ago

    You can press 'p' to show the points on the curves.

      function keyPressed() {
        if (key === 'p') SHOW_POINTS = !SHOW_POINTS;
      }
  • panarchy 10 hours ago

    $10 on black

  • darkstarsys 9 hours ago

    Cool! It would benefit from better physics though, maybe supersampling the position in time especially when moving fast. Each ball can't push to its edge fully, for instance.

  • waltbosz 5 hours ago

    I want to see a real world version that uses one of those magnetic sand sculpture tables. https://sisyphus-industries.com/

  • jama211 10 hours ago

    I’m really keen to see what this looks like after significant time but I’m not going to leave it open on my phone for ages just to find out haha. Clever idea!

    • personalcompute 10 hours ago
      • navigate8310 6 hours ago

        I'm curious about using an S3 endpoint and that too in public. Aren't you worried if someone hammers your URL and drain credits?

      • fxwin 9 hours ago

        https://i.imgur.com/cf1wOwL.png after a few minutes of running it at 240 frames per second :D

      • cmertayak 9 hours ago

        I desperately needed that :D

    • xav_authentique 9 hours ago

      You can execute this in the devtools console:

      data.whiteBall.v.x = 5; data.whiteBall.v.y = 5;

      data.blackBall.v.y = 5; data.blackBall.v.x = 5;

      • cdrini 9 hours ago

        Wow! Careful Icarus, going too fast makes it go kind of wild and started freezing the site :P

        data.whiteBall.v.x = data.whiteBall.v.y = data.blackBall.v.y = data.blackBall.v.x = 10;

      • obventio56 9 hours ago

        Also frameRate() with 120 or higher will make it go a bit faster. But it seems like there is a limit. I'm not familiar with p5.

  • otherayden 5 hours ago

    To speed it up, run

    ['whiteBall', 'blackBall'].forEach(color => { data[color].v.x *= 5; data[color].v.y *= 5 });

    In dev console :)

  • axblount 9 hours ago

    Does some interesting things if you up the ball speed to 20. The boundary breaks down.

      data.blackBall.v = data.whiteBall.v = createVector(0, 20);
    • cocoto 9 hours ago

      Mine broke even without speeding up things, the black ball is now working together with the white ball.

  • amelius 9 hours ago

    What would a 3d version of this look like?

    • lgas 5 hours ago

      More spherical.

  • mensetmanusman 9 hours ago

    What happens at the limit of infinity!

  • smusamashah 9 hours ago

    Something similar was shared before, but it wasn't this shape, just plain old rectangle style.

  • joshdavham 9 hours ago

    Is there any interesting mathematics associated with this system?

  • MarcelOlsz 10 hours ago

    Cool now I'm not going to get anything done. Thanks OP. PLEASE add a speed control so I can speed it up to it's logical conclusion and move on with my day.

    • alwa 9 hours ago

      I too am impatient to learn the logical conclusion of “eternal struggle.”

    • romaaeterna 9 hours ago

      An edge point's probability of being hit should be proportional to the length of every path leading to that edge point. An area closer to many short black paths and many long white paths will show black expansion (and vice-versa). So I suspect that any variation of the central line from a straight bisection of the circle should get hammered out over time.

    • fxwin 9 hours ago

      you can run frameRate(x) in your browser's console to speed it up a bit - might be limited by your monitor's refresh rate though

    • riku_iki 10 hours ago

      you can keep tab open and check in few weeks.

      • cmertayak 9 hours ago

        Please let us know what happens.

        • riku_iki 7 hours ago

          Its interesting that my is converging into straight line dividing circle half/half, unlike other examples in the comments.

  • hlava 9 hours ago

    Are there any initial conditions that converge to a line?

    • dvh 9 hours ago

      I see that you haven't seen alphaPhoenix' video about reverse game of life. I highly recommend it.

  • makepanic 9 hours ago

    You can press P to toggle the edge point visibility.

  • cluckindan 9 hours ago

    Now that we have the simulation, what is the closed form solution?

  • swayvil 9 hours ago

    It's cool.

    It would be better if there was only 1 kind of edge instead of 2.

    I refer to the broken edge and the circle edge.

  • AlexCoventry 8 hours ago

    Manicheanimation

  • throwaway314155 6 hours ago

    The most self evident piece of work/art I have ever seen and yet there's so many comments explaining why it works and how it's interesting...

    • ycombinete 26 minutes ago

      To me it's working backwards though. i.e. the black ball is creating more whitespace and visa versa. It's not immediately evident to me why that would be the case.

  • jomarry 9 hours ago

    I cant perfectly cause i dont know how to control. . I dont have any loptop for use to creat it. I use my phone

  • barbazoo 10 hours ago

    I laughed really hard at this :)