Robocode
robocode.sourceforge.io
robocode.sourceforge.io
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.
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)
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
https://en.wikipedia.org/wiki/Crobots
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.
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?
Thanks!
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.
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.
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?