Eternal Struggle
138 comments
·August 31, 2025francisduvivier
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
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
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.
francisduvivier
I think it's just a tunneling bug that happens when the point that make up the wall get messed up a enough. Almost never happens anymore in the v2[1] that I added. This one also allows you to see these points.
[1] https://francisduvivier.github.io/eternal-struggle-with-spee...
temp0826
A little matter-antimatter asymmetry never hurt anyone
Cthulhu_
Here we have it, an internet toy demonstrating how this asymmetry occurred. I expect physics papers soon.
raspasov
The opposite can also happen (where the whole thing goes white).
nialv7
black-white here doesn't mean bad-good. they just mean opposites, different aspects of things. I think wikipedia does a pretty good job explaining it: https://en.wikipedia.org/wiki/Yin_and_yang
kragen
https://en.wiktionary.org/wiki/%E9%99%B0#Traditional_Chinese (陰) lists the following definitions:
1. cloudy; overcast; gloomy
2. hidden; secret
3. negative [of electrical charge]
4. the Moon
5. shade; shadow
6. north of a mountain or south of a river
7. back side
8. of the nether world; of ghosts
9. (philosophy) "female" principle; yin in yin-yang
10. in intaglio
11. treacherous; deceitful; cheating
12. (dialectal) to deceive; to trick; to trap
13. (Chinese phonetics, of a syllable) open; not having a consonant coda
14. (Cantonese) bangs; fringe
15. genitalia (of humans)
16. a surname
The one (American) person I know who has 陰 as a surname reports that Chinese people are often shocked at her surname upon meeting her. I think it might be a bit like having the surname Death in English (https://www.ancestry.com/last-name-meaning/death?geo-lang=en...).
That is to say, black kind of does mean "bad" here, in the popular conception anyway. Taoism and Buddhism promote a worldview that sees birth and death, creation and destruction, as neither good nor bad, simply inseparable parts of a larger whole. But most everyday people try to avoid darkness, death, destruction, cloudiness, gloominess, shadows, ghosts, treachery, traps, and so on, most of the time. It's more that Taoism teaches that this attempt is foolish.
Not all the senses are unpopular; plenty of people like human genitalia, the Moon, and intaglio, and the shady side of a river can be nicer when it's hot out.
bilbo-b-baggins
Metaphor for American politics.
low_tech_punk
maxwell's demon peeking from the dark side
d4rkn0d3z
Tunneling.
camillomiller
Had the same experience and derived an absolutely unexpected bout of deep existential anxiety from it. Going to touch grass now.
Hendrikto
> 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.
francisduvivier
Yes true :D, I kind of just want to blame gpt-5 mini for it and that's one of the bad things about the bad coding, I immediately loose part of the sense of ownership and responsibility. I don't feel like I made it, I just managed it.
Now to be honest I saw this bug, but I decided to just release it anyways because I also already had the v2 in the works which incidentally already had this issue fixed.
rhubarbtree
Interesting data point on the vibe coding front, as this is very buggy. Doesn’t bode well for releasing an agent on a non-trivial problem!
kelnos
Feature request: show a "scoreboard", that is, with every collision, show the percent of the circle that's white, and percent that's black.
rnotaro
This vibed coded implementation is buggy.
If you go to 64.00×, it can't slow back anymore.
francisduvivier
Well that's fixed in the V2 with even more vibe coding:
https://francisduvivier.github.io/eternal-struggle-with-spee...
ks2048
Watching it at 100x is cool - you can just watch the border wiggle around (at this speed you may as well not even draw the balls).
patates
I think next level would be custom shapes, custom starting areas, more colors, ability to change physics (add gravity?), and user interacting (being able to help a fellow struggling entity -a ball in this case-, when it gets worse).
Someone put this into an AI super duper thinking max edition, sprinkle some MCP on top and see what happens lol
rottc0dd
Nice work.
Still buggy. If you increase the ball size and increase the speed, the whole thing goes black/white in 10 seconds.
null
ks2048
Yes, going to 32x also won't let you back down to 1x. (16x and lower - yes).
narrator
It looks like it converges to a normal distribution curve with white being the area under the curve.
loandbehold
Why not other way around?
pmontra
Of course we want to make a ball faster than the other one and let it win the struggle.
null
MrJohz
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.
amelius
It seems there is a parallel with physics: two pressurized chambers with equal pressure and a membrane separating them. The odd thing here is that there is only one molecule in each of them.
SonOfLilit
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
Yes, because it's not actually area that balances out but mean time between bounce against the black/white boundary.
aoeusnth1
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
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.)
Animats
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.
poopsmithe
Yeah, definitely run it in the foreground. Mine became completely black in about 3 hours.
Animats
Me too. Does black always win? If so, why?
amelius
But you can say the same thing about a circle with a straight line as separator.
teamworketernal
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.
panarchy
I think it misinterpreted what kind of tunneling you were cheering on.
volemo
The darkness has come upon the world!
cocoto
Had the exact same bug! Not so rare I think.
camtarn
Hah! I was wondering if that was possible.
fuckaj
[dead]
alyxya
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
It went to the dark side.
SarahC_
The coming of Satan is foretold!
SkipperCat
An excellent piece of artwork! Really captures the meaning of Yin Yang, at least to me.
sabellito
Got a horseshoe shape running at 50x for 60 seconds:
andoando
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.
lacoolj
Raava and Vaatu made into a game of dual-solitary pong
And yeah there's a bug where one will introduce itself into the other's domain and join that side instead. Very life-like :)
joebig
Similar to Pong wars: https://pong-wars.koenvangilst.nl/
kingforaday
You can press 'p' to show the points on the curves.
function keyPressed() {
if (key === 'p') SHOW_POINTS = !SHOW_POINTS;
}
Insanity
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
chunkles
If you tap on the ying-yang it starts.
clocker
reminded me of this one that ends at some point
https://github.com/yoavg/yoavg.github.io/tree/main/eternal