I once ran a regional meetup with this as the activity. Walked through how to build the bots, how it all ran, and let people have a go at building their own.
After an hour or two, we ran a series of rounds to see whose bot would win. The grand winner? A guy who had no idea to code, so we asked him how he did it. It turned out he just took one of the standard bots and changed a string to rename it.
I remember using this back in 2004-ish. The web was much different back then. Finding a robots game that allowed you to program your own tank was awesome. This is what got me into building my own sumo robots.
Looking through past winners, it's fascinating how the strategies have evolved over time. I wonder if computation constraints were removed, you could do some sort of self-play RL to "evolve" some godlike strategy that dominates everything else
Most likely you'd get stuck on a local maximum. Or rather, you couldn't prove you weren't stuck on a local maximum. It's still very cool, though. Lisp is a preferred language for this because of the whole code-as-data thing.
Wow, HN is so great. Thanks for creating crobots! It was briefly very popular at my school in Sydney, Australia in the mid 1990s. Some of the then high school student programmers went on to do OS research (SEL4) and at least one joined a kernel team at Apple. I myself recently (10 years ago) veered from software to robotics, possibly subconsciously emboldened by crobots.
It's neat how teens & amateurs will reinvent classic techniques — e.g. there was a technique in the community known as "dynamic clustering" which was really just K-nearest neighbor, but presumably whoever named it dynamic clustering had reinvented it from first principles and wasn't aware
Looks like the robowiki includes this tidbit now:
> Dynamic clustering is a technique to find entries in your log similar to the current situation. Essentially, it is a K-nearest neighbor algorithm, and not actually clustering at all. Despite this misnomer, the term "Dynamic Clustering" has stuck with the Robocode community.
> known as "dynamic clustering" which was really just K-nearest neighbor
I'm a self taught programmer. Recently had a technical interview - final interview before getting hired, everything had been going smoothly so far. Guy asked me to describe "dependency injection", and I had heard this phrase, but didn't know the definition off hand. I failed the interview because of this, and they told me so later when I tried to follow up.
So I looked up what dependency injection is, and realized it's something that to me is just basic programming common sense that I had already been using 30 years ago.
Yeah some names make a concept more confusing. Dependency injection is definitely one of those. I understand where the name comes from but it's just a really bad name. Sounds way more complex than it is.
Still, not as bad as "dynamic programming". Sounds complicated right? It's just recursion with caching. There the name was almost deliberately bad. "dynamic" is just a generic fancy sounding adjective (yeah really), and "programming" is not a reference to coding; it's a reference to scheduling. Because that's not at all confusing... "Cached recursion" doesn't sound like you've really invented anything though I guess.
Please can we all call it "cached recursion" from now on?
While 'recursion with caching' is an easy way how to start explaining 'dynamic programming', there is a slight difference - recursion works top-down, while dynamic programming algorithms generally works bottom-up.
Sorry to hear dude. I've interviewed tons of people and I've had the brightest guys mess these things up. As an interviewer try to see if you can describe the problem instead of asking for definitions. As an interviewee, say what does come to mind and kindly ask for a hint. Even if you technically mess up the question you can often make up for it at least partially in social skills.
Seriously, that happens on the job too and then you ask your local ai model about it..
Unless of course there was another candidate that just aced everything... In any case, don't get upset over it and keep a positive attitude. You'll get your job!
I enjoyed this a lot while consulting in Chicago in the winter of 2002. Good clean fun alone in a hotel room while the snow raged, though I don't remember winning much. I'm tempted to dive back in but don't really fancy dealing with Java again.
I once ran a regional meetup with this as the activity. Walked through how to build the bots, how it all ran, and let people have a go at building their own.
After an hour or two, we ran a series of rounds to see whose bot would win. The grand winner? A guy who had no idea to code, so we asked him how he did it. It turned out he just took one of the standard bots and changed a string to rename it.
Related. Others?
Robocode Tank Royale - https://news.ycombinator.com/item?id=31632801 - June 2022 (52 comments)
Robocode: A Java Programming game (2001) - https://news.ycombinator.com/item?id=25011515 - Nov 2020 (1 comment)
I remember using this back in 2004-ish. The web was much different back then. Finding a robots game that allowed you to program your own tank was awesome. This is what got me into building my own sumo robots.
This seems to be the current champ: https://robowiki.net/wiki/BeepBoop
Looking through past winners, it's fascinating how the strategies have evolved over time. I wonder if computation constraints were removed, you could do some sort of self-play RL to "evolve" some godlike strategy that dominates everything else
Most likely you'd get stuck on a local maximum. Or rather, you couldn't prove you weren't stuck on a local maximum. It's still very cool, though. Lisp is a preferred language for this because of the whole code-as-data thing.
Back in the 80's there was CROBOTS.
https://en.wikipedia.org/wiki/Crobots
https://github.com/troglobit/crobots
https://tpoindex.github.io/crobots/
And in the 70's, RobotWar: https://en.wikipedia.org/wiki/RobotWar
I created CRobots as a loosely based clone with a C based language, lovingly inspired by RobotWar. I believe there were predecessors even to RobotWar.
Wow, HN is so great. Thanks for creating crobots! It was briefly very popular at my school in Sydney, Australia in the mid 1990s. Some of the then high school student programmers went on to do OS research (SEL4) and at least one joined a kernel team at Apple. I myself recently (10 years ago) veered from software to robotics, possibly subconsciously emboldened by crobots.
If you are up to it can I suggest recording an audio interview with the Oral History team at https://computerhistory.org/contact-us/ about your life?
I didn't know there was anything that predated Core War (1984). Cool, thanks.
That’s seriously cool. I was a huge fan of RobotWar but had not heard of CRobots!
Wow, just a few days ago I used ChatGPT and Claude to create bots to battle in CRobots!
Thanks!
Played this back in the day
It's neat how teens & amateurs will reinvent classic techniques — e.g. there was a technique in the community known as "dynamic clustering" which was really just K-nearest neighbor, but presumably whoever named it dynamic clustering had reinvented it from first principles and wasn't aware
Looks like the robowiki includes this tidbit now:
> Dynamic clustering is a technique to find entries in your log similar to the current situation. Essentially, it is a K-nearest neighbor algorithm, and not actually clustering at all. Despite this misnomer, the term "Dynamic Clustering" has stuck with the Robocode community.
https://robowiki.net/wiki/Dynamic_Clustering
> known as "dynamic clustering" which was really just K-nearest neighbor
I'm a self taught programmer. Recently had a technical interview - final interview before getting hired, everything had been going smoothly so far. Guy asked me to describe "dependency injection", and I had heard this phrase, but didn't know the definition off hand. I failed the interview because of this, and they told me so later when I tried to follow up.
So I looked up what dependency injection is, and realized it's something that to me is just basic programming common sense that I had already been using 30 years ago.
Yeah some names make a concept more confusing. Dependency injection is definitely one of those. I understand where the name comes from but it's just a really bad name. Sounds way more complex than it is.
Still, not as bad as "dynamic programming". Sounds complicated right? It's just recursion with caching. There the name was almost deliberately bad. "dynamic" is just a generic fancy sounding adjective (yeah really), and "programming" is not a reference to coding; it's a reference to scheduling. Because that's not at all confusing... "Cached recursion" doesn't sound like you've really invented anything though I guess.
Please can we all call it "cached recursion" from now on?
The historical context behind the naming of dynamic programming was discussed on HN before: https://news.ycombinator.com/item?id=17806913
While 'recursion with caching' is an easy way how to start explaining 'dynamic programming', there is a slight difference - recursion works top-down, while dynamic programming algorithms generally works bottom-up.
Memoization? ;)
Ha also a terrible name (why not "caching"?) At least it sounds like memorization so it's easy to remember what it means.
Sorry to hear dude. I've interviewed tons of people and I've had the brightest guys mess these things up. As an interviewer try to see if you can describe the problem instead of asking for definitions. As an interviewee, say what does come to mind and kindly ask for a hint. Even if you technically mess up the question you can often make up for it at least partially in social skills. Seriously, that happens on the job too and then you ask your local ai model about it.. Unless of course there was another candidate that just aced everything... In any case, don't get upset over it and keep a positive attitude. You'll get your job!
I enjoyed this a lot while consulting in Chicago in the winter of 2002. Good clean fun alone in a hotel room while the snow raged, though I don't remember winning much. I'm tempted to dive back in but don't really fancy dealing with Java again.
I am glad to see this is still alive. Can anyone speak to the state of the community in 2025?
I have wanted something like this for a long time but… in something besides java. Does anyone know of anything like that?
Like… this?
https://github.com/turkishviking/Python-Robocode
‘…in Java’ lost me on the subtitle
https://news.ycombinator.com/item?id=43099444
Really difficult to get these right
It is a good way to learn Java basics.
[flagged]
Spam account, flag & kill.