Posted
by
emmett
on Sunday June 18, 2000 @11:34PM
from the one-two-three-shoot dept.

Andreas Junghanns writes: "Check out the Second
International RoShamBo Programming Competition for a completely
different experience!
If you think you know everything about Rock-Paper-Scissors -- here is your
chance to prove it against some stiff international competition. At the Web site
you can find rules, sample programs and a report of the first contest,
complete with results and program descriptions." This looks pretty cool, and it might make a neat first project for someone, too.

See, you jump to the conclusion that I'm complaining about this because I lack a sense of humor. In reality, my sense of humor is far superior to those who would post such nonsense. That is what you must attempt to grasp.

Obviously, we let them back out of the cage when we opened this topic up. That I have no problem with.

However, for the sake of the moderators that we have here, it seems that many of them have grown hostile since the last time we dropped a football around them. The one with the football is still swinging from the goalposts, the normal monkeys are at the keyboards, but the rest (of the infinite, somehow) are lining up with their rocket launchers, chainsaws, and rail guns to post here.

Please, people, drop the hostility, and use email flames if anything to shut people up. If you need to be an anonymous coward, use a hotmail account. Otherwise <rant mode> SHUT THE HELL UP!</rant mode>.

Thank you. Someone please cage the monkeys again soon, as someone has to clean up their crap...

I really thought it might be fun... until I found out that the submission had to be in 'C'. I could do this as a MS-DOS program in Turbo Pascal, or in Delphi under Windows, or even as a CGI program under IIS... but since they don't support a universal platform, I'm out. 8(

Most people will probably include some analysis code, and may "bend" probability if the opponent seems particularly redundent.

However, if you have a contestant which analyzes the opponent's strategy, you can also have one which deliberately tries to trick that software - feint a pattern, then switch to a counter-strategy based on what the opponent is likely to respond with.

For example, one could choose Rock, Paper, Scissors in that order twice, and then the opponent program would sense that it's more likely that you'd choose Rock on the next move - therefore, it would respond with Paper, and you would cut it to pieces with Scissors!

It would be interesting to apply the evolutionary theories behind Core Wars and many other artificial life programs to RPS programs. The way these work is that some basic "starter" programs written in a synthetic language are pitted against each other virtually. The losers from this round are eliminated, and the gaps are filled with mutated copies of the survivor programs. Continue this ad nauseum, and you get some pretty good programs. Of course, it would take quite a few rounds to end up with a program with some really good AI, but this would be an interesting project.

From someone who has spent about 1 week of his life trying to come up with a startegy to win, I can tell you it is quite difficult. My strategy was to have three variables, each corresponding to the three possible moves - rock, paper or scissor. Then follow the rules below to come up with a move.

Choose a random move. Add one to that move.

Check if opponent is making same move all the time. Add one to the move that will beat that.

Check if opponent is moving in a cyclic pattern. Add one to the move that will beat that.

Check if opponent is trying to beat my last move. Add one...

Check if opponent is trying to beat the move that I would have played if I wanted to beat it the last turn. Add one...

If I've been losing a lot lately, make a random move, otherwise make the move that has the highest count.

These strategies all together easily beat the sample bots but get hammered by the competitive bots. They are no where near as powerful as the competitive bots. I was going to do a bit more extensive pattern matching routines to try and beat them, but just havent got around to doing it.

Vivek Mittal Telstra Research Labs

PS: I wonder how much my first post ever on/. will get moderated.:)

PPS: Can we add another way to get your account information back... enter email... I dont remember by user id and when I try to create a new account,/. complains of a duplicate email.

Why bother with analysis of your opponent's approach. I think the real way to tackle this would be to already know your opponent's tactics. You can do this by submitting heaps of "different" entries to the competition (not sure if this is valid as the site seems to be/.'d), and since you then have a good chance of coming up against a program you have written, you could easily beat it!

Somewhere on the web site they has a section of cheating bots and one of the bots did exactly that. It somehow re-engineered the RNG and won all 1000 times against the random bot. Vivek Mittal Telstra Research Labs

My submission, Iocaine Powder [ofb.net], won last year's competition. Follow the link to see a complete description of how it works. The competition results [ualberta.ca] from last year describe some of the other strategies that did well (and some that did not-so-well).

This competition is more complex than it seems; not only are there deliberate "dumb robots", but many of the real entries are quite predictable. A random player wouldn't have made it close to winning, and stalemates were rare.

I'm really not suprised that all you gun-toting, neo-nazi Americans would try to glorify some excessively violent childhood game like Rock Paper Scissors. Have any of you stopped to consider what these sorts of values these pasttimes instill in our children?

I mean, let's start with the rock. And I'm not refering to that movie with Nicholas Cage & Sean Connery in it, either. Rocks == Violence! Ask any caveman! Were it not for Oog being silenced by the Lameness Filter, I assure you he would back me up on this.

As for the scissors, well why don't you just throw children off a cliff? How many times have we been told not to run with scissors, and here/. is urging people to use them as both toys and weapons!

And the paper... oh Lord, how irresponsible can you get? We do all we can to squash that horrible "Puff the Magic Dragon" degenerate druggy song and then you people come along and start handing out Zig Zag's to elementary school students!

1) AI class I took last year (well, TA'd) we went in to some detail on possible RPS strategies. Yes, you can have strategies, at least assuming that your opponent is not a pure RNG (in which case the only correct strategy is to be RNG yourself.) 2) Nothing that the tourney produces will be as cool as this [duke.edu]. Unfortunately, the picture stinks, but on the left is my professor, and on the right is the kid (he'll hate me for that) who build the RPS-playing Lego Mindstorm. And that's the RPS bot in the kid's hand. It used some pattern learning software (written in legOS [sourceforge.net]) to attempt to detect patterns in human RPS players. Didn't work great, but what the heck... it was still damn cool. Had fingers and the whole bit. ~luge

I suspect that this will work better than you'd think. An intelligent entry will assume that nobody is stupid enough to play the same thing every single time, and will assume at some point that you're faking it out and try to outsmart you by playing scissors. A simpler program that plays the averages will win at least 999 times, but more complicated programs may handle it less effectively.

whoa, when i was a kid ro-sham-bo meant something totally different. a big kid would walk up to you and ask if you wanted a ro-sham-bo. no matter what you answered, the big kid would grab your shoulders, turn you around, and knee you in the ass as hard as he could while simultaniously howling "ROSHAMBOOOOOOOO!!". this was also known as "giving [someone] elephant dick", but the real key to ro-sham-bo was to really sound like an old howling dog when you yelled the "BOOOOO". i think one day i will write a book on the cruel things geeks had to endure: the wedgie, the atomic wedgie, swirlies, nipple twist-and-whistle, sideburn twist, nuggies, hertz-donuts, dead-legs, ro-sham-bo and the elephant dick, wet-willies, vulcan shoulder grip, frumunda juice, and of course the kidney punch. i will award an official no-prize (i got it from stan lee himself) to whoever can correctly identify these tortures. share the pain.

Is this a joke? I mean, if the "optimal" solution is a random distribution, then what possible good can using a heuristic to discover a "tendency" in the opponent be? The only thing you could possibly discover is flaws in the random number generator.

It's just like that game in the movie "Princess Bride", where a man reasons that to poison your drinking partner, you put the poison into your own glass. If he is suspicious he will switch with you when your back is turned, and will bring about his own doom. However, if he is a step cleverer than that, it becomes impossible to outsmart him - as the reverse-reverse psychologies pile up, the game boils down to random chance. Of course, the hero in the movie knew this and poisoned both glasses. After his opponent got thorougly lost in a maze of pseudo-logic, he took his poison and that was that.

That's the kind of visual image I get of someone trying to write a program that would win this contest - the "inconceivable!" guy from princess bride.

I wonder how a simple markov chain would do. That's where the probability of every move is based on the outcome of the previous game. For instance, "2 of the 3 times his rock beat my paper, his next move was scissors, so since his rock just beat my paper again, I'll anticipate scissors this time and go rock." I think this kind of reasoning would beat your typical human roshambo player in the long run, since a human would typically have a certain response based on what just happened.

Obviously, it's different with a computer. The program might anticipate this kind of thing, and has no general "feeling" that would you any reason to link a round to the one that came before. The more I think about this, the more I think it's just a matter of guessing right what other people will do.

I don't think anyone has mentioned this before, but does anyone remember the old Sega Master System Game "Alex Kidd in Miracle World"? It was a really fun game. You would beat the boss monsters by playing rock, paper, scissors also known as Janken with them. Some of them had special mindreading powers (which you could also get later in the game). If you had the mindreading power on, you could visualize what they were going to use (rock, paper, or scissors). It was so much more involved than it sounds and took a lot of wits and quick fingers to beat these bosses which increased in difficulty as you went on. Get the faq for this game somewhere and check it out, it is really interesting how they used this as the whole theme for a very successful video game. I can't be the only one to remember this game.

Actually, I think we should have solved the Cold War this way. Or something a little more complicated.

Let's face it - the country that can write the best code will win modern wars, anyway. So why not just match one government's (chess/ go/ RoShamBo) program against the others, and then disband the government that loses?

My first thought was to just go RR SS PP RR SS PP until the program appeared to be losing, and then jump ship and go random. I figured the "bait and switch" tactic might work pretty well against some programs - put out two in a row to get them to take the one that would beat it, and then quickly switch to the one that would beat that. Then I read the rankings and saw that there was already a bot called "Bait and Switch" - and it lost half its games with a score of -999, which means 999 losses and 1 draw. So now I think I won't be making that bot.

Actually, there is an all-destroying weapon. I am not sure of the name, but after making a balled fist (as in "rock"), you present it to your opponent with great force and speed. Of course, this could lead to all sorts of displeasantries if abused.

This isn't very insightful. Actually, it's obviously wrong. Just look at the rankings from last year's tournament.

Sure, "Optimal Random" beat, and was beat by, some programs, almost never by a margin of more than 20 points. Conversely, "Iocaine Powder" (last year's champion) won several matches 999 wins to 1 draw. That's an enormous margin for a random program to catch up to. There are going to be some "idiot bots" that choose the same one over and over - and any reasonably programmed bot should beat them - so assuming five easy wins for a competently programmed bot, the random(optimal) will have to somehow come up with 5000 more wins than losses.

Try this. Write code that picks a random number, 0 or 1. Have it pick 50,000 of these, and compare the quantity of each number, and add an iteration. See how many iterations it takes before the 0's beat the 1's by 5000 or more.

In their FAQ, they tell you not to submit the random strategy, because it'll be guaranteed to finish in the middle of the pack.

Bull. If enough people submit programs that use the 'random strategy', then one of them will win by sheer chance. If you've got thousands of Roshambots choosing at random, then the sequences of a few of them are going to coincidentally look a lot like the winning strategy of the smartest 'bots. It's the infinite-monkeys-on-typewriters problem, just simplified.

Get a fucking clue and a college degree you moron. Yeah, if a billion people submit a random strategy maybe one of them will beat a bot that plays rock a thousand times in a row versus a program that actually has a strategy. Now since only a few hundred people are going to submit code for this, your point is so ignorant it belies your lack of a CS degree and a critical thinking or logical background. Read the FAQ fuckwad, it states that random programs always will fall in the middle of the pack, go learn about big-O and the law of averages and come back when you have a clue.

Well, with the random-choosing bots that the contest-makers throw in, you'd have a 50% chance of beating them, so that you'll only end up somewhere in the middle. I suppose it might really beef up your scores with people that get really in-depth with their code, but very simple algorithms will beat you senseless. As a subject of the testing mentality, I'd have to agree that in real life always choosing the same one will play serious mind games with your opponent, but computers, unfortunately, aren't that smart.:-(

How about the South Park episode? "First I kick you in the nuts as hard as I can, then you kick me in the nuts." Or something like that... I guess it would be tough to come up with a good stragety for a simulated version of that game, though.:-)

Please, at least give it a mental test-drive. How do you beat someone in roshambo? It's all about psychology. The problem with the random agent (that you outlined) is indeed that it always (give or take) ties... you'll never get anywhere like that.

To win, you HAVE to try guessing out a strategy that takes your opponent into account (thus assuring wins), and not be outwitted yourself (thus avoiding losses)... unless play-to-lose is a viable strategy... was it? The beauty of this competition is that the code to illustrate all of these techniques is really short, clear (mostly) and easy to write. It's a perfect hobbyist's coding challenge.

Wow. Um, well, what can I say? I guess I wasn't the first by a long shot to make that connection. I read the entire first page of the site, but I didn't read the faq or the results, so I didn't see any mention of Iocaine powder. I feel stupid.

Nope! The "optimal" solution is to tie all your matches, and let brownian motion take you where it may... which isn't a _winning_ strategy. And, really, everything's as good as random versus random - you don't lose for just throwing rock, and you don't lose out for writing an algorithm.

So instead, you try to do something that's theoretically guessable, but more reliably can guess the opponent's plays... that way you can exploit the weak and get points. Hopefully you do the best job of it.

Actually, I believe a Human would be far easier to beat, in RoShamBo. People tend towards very obvious patterns, and have trouble tracking and analyzing long patterns of prior (and remarkably dull) data. A Markov chain system, with some weighting to make it/look/ like it isn't a Markov chain system, should outwit paltry humans.

A smart program will use all kinds of techniques to figure out its opponent's prediction algorithm. I would imagine that such a program would start out with some carefully planned tricks to get the other program to reveal itself.

Of course, I don't know for sure, since I have not tried it. But, if you look at the results [ualberta.ca] from the last tournament, you see that one program, called "Iocaine Powder", won every single round my a significant margine. The second-place program was based on an earlier version of Iocaine Powder, and was as far ahead of third place as it was behind first. Clearly, this is more complex than it sounds.:) Perfect name for the winner, too.

I have to admit, I was wondering about the name RoShamBo until I got to this:

* Q: RoShamBo? I thought that was the game where you and Cartman take turns kicking each other in the nuts as hard as you can. A: No, that's Roshambeau. Notice that alternating turns (rather than playing simultaneously) affects the strategy. Going first tends to be somewhat advantageous in Roshambeau.

...to solve this problem, especially if other entries utilize a static approach. Check out section 1.9 of Melanie Mitchell's book _An_Introduction_to_Genetic_Algorithms (MIT Press) for an interesting discussion of a evolving solution to the prisoner's dilemma. The only problem is the time constraint.:-)

The gene coding could be something like this: where the lists consist of R|P|S for Rock|Paper|Scissors. This creates a gene space of 3^(2N+1) which isn't bad for small N. It could be made simpler if your own moves were left out of the gene space, but then you couldn't compensate for your opponent reacting to your own behavior.

I notice that they limit you to a millisecond per turn. Is Iocaine Powder fast enough for that? I wouldn't have thought that any fairly sophisticated prediction system would be fast enough. I suppose, though, that a millisecond does give you a few hundred thousand cycles, but given a history of several hundred turns, that isn't a lot of cycles to spend per turn in the history.

It's a company that produces a "VXML" platform that let's you program a phone voice system. Sample code #111 is a rock-paper-scissors game. Basically, you call up and play against a whiny, simulated kid voice. You can even "say" your commands...

In order to view the source, etc. you need to get a free login of their "developer studio" - but if you don't want to do that, here's how to play:

Why so many rules? Because if you told people about it, they'd realize how ignorant you were for taking RoShamBo so phenomenally seriously:

Hey, let's all write programs that attempt detect other people's patterns and base our moves off of that while, at the same time, making our program seem to be moving in a certain pattern, but not really patterning our moves after anything detectable, so as to seem random. Damn, we're bright!

Some choice words from Mr. RoShamBonehead:

"..but the best strategy can be quite complicated when playing against fallible opponents"

Gee, that sounds strikingly like the skill level needed to win tic-tac-toe (play against stupid people)?

"The game is trivial from a game-theoretic point of view"

I do agree that the game is trivial, but I'm not so sure about this so called "game-theoretic" stuff.. could someone explain some of the game-theoreticizationismifications to us, per chance? I'm not quite sure I see his point of view..

"The optimal mixed strategy is to choose an action uniformly at random. This will ensure a break-even result in the long run, regardless of how strong (or how weak!) the opponent is"

Oh.. well if that's all. I just do the good old-fashioned mixed strategy of uniform randomness and then bing-zam-boom! I'm the winner? Okay. Not only that, but there's some sort of ensured result from this so-called randomness. Dammit, that makes so much sense it's like I'm sitting here saying "please don't be so crystally clear in your ignorance.. you're ruining my Pick-up Sticks (TM) programming contest"

"against predictable opponents, a player can attempt to detect patterns in the opponent's play"

This is just the introduction and it's already getting so damn complicated with all this jazz about being able to predict players that are predictable.. whew!

Rock Paper Scissors was intially played amoung the ancient Celtic peoples, one of the key gambling games in their early history. It wasn't known as Rock Paper Scissors, though, it was known as "Ynuca" (Sorry about the spelling, History buffs). And the game was slightly different, but the object was the same: 3 different implements, each one suseptible to one of the others and able to take out one of the others. It wasn't until the Celtic tribes of Western Europe were invaded by the Romanic peoples of the South taht the game was introduced into "Mainstream culture". Ironically, it was lost in Northern and Western Europe and only resurfaced when the Roman Empire was crumbling - travellers from Rome revived the game while resettling in England, centuries of years later. From there on it was adapted and moulded into its current form, but the point is that initially, at least, it was an adult game and wasn't considered a "child's game" until at least the 1200s.

If you play center in TTT, and play intelligently (i.e., not to lose on purpose), you are guaranteed at least a draw

Actually, a competitive TTT player (such as myself) can make the initial move in any square and never do worse than a draw.

FWIW, an opening move to center square, while not technically weak, is certainly indicative of a lack of style. The French (of course) are especially critical of this kind of unimaginative play, and refer to the center square as the "pissant" square, and use the term "un pissant" to describe both the initial play to center and the person that makes it.

You've got a thousand moves. You could always spend the first few on a dumb pattern, hope the other player falls for it, and especially if the other player doesn't adapt strategy after its first decision -- then change strategy.

Q: Can I enter Random (Optimal)? A: No. You shouldn't want to anyway, because it is guaranteed to finish in the middle of the pack. It definitely will not finish in first place, because it cannot exploit the weaker programs.

This is a self-fulfilling prophecy isn't it? The more people believe the above statement, the more there is to gain or lose from a non (uniform) random strategy.

Christ, post #44 [slashdot.org] needs to be moderated to a +5, urgently. The explanation egnor gives at http://ofb.net/%7Eegnor/iocaine.html [ofb.net] is incredibly easy to understand and makes this whole competition clear to me. In fact, it makes me wonder if I should put down Database Nation to start reading Programming Algorithms.

Having such a limited background in math, it's just this sort of walkthrough that hosers like myself need. The kicker, as is always the case, is that it's so fucking simple once you see what is being implemented and how successful it is.

If you read this [ualberta.ca] source code and scroll down to the description for Iocaine Powder, you'll see that it addresses the endless second guessing problem you're describing here.

First of all, there are really only 3 levels of second guessing because there are only 3 choices. Iocaine analyzes the history list and determines which level of second guessing was the most successful.

I downloaded and tried to compile the test suite and it would not compile cleanly. In line 4679, the #define of MD5STEP, you must remove the "\" (the backslash).

It will then compile cleanly. This gives you a nice framework into which to put your own algorithm to try... It's easiest to just "replace" one of the existing ones with your own code. There is probably a better, "cleaner" way to do it, but it's a big program and I don't know what all would need to be changed....

A while back, a couple of math-geek friends came up with a variation of the traditional roshambo rules. I don't know if this new game got a name, but here's how it went.

Two new items are added: the angel (forming a circle with your thumb and another finger) and Satan (forming devil horns with your forefinger and pinky). Every item loses to two others, beats two others, and ties with itself. The traditional rock-scissors-paper patterns hold, so here are the new combos:

Satan loses to Angel and to Rock (because Satan's malice gets turned against him) Satan beats Paper (because it burns in Hell) and Scissors (I forget why, exactly, but it needs to be symmetric)

It was fun, but too hard to keep track of all the rules, so it was quickly discarded. (I might point out that other members of the same group staged a roshambo tournament, in which one player actually did quite well using the pi bot and the rockbot (Good ole rock. Nuthin' beats rock.) strategies.

I wonder: Would the extra items cause the roshambo writers to reevaluate their strategies? Would five items only make decision-making longer, or would it actually cause strategic differences?

As far as i can see, this would really be a nice application for a neural network. The only problem I see is that only 1000 turns are played, which is probably not enough to train a neural network into a winner.

Basically it's all just pattern recognition, and neural networks are good at that.

Contrary to popular belief, there is no "Nuclear Bomb" which destroys everything. And if there was, it would most certainly not consist of making a balled fist (as in "rock"), then "exploding" ones fingers by extending them, at which time an appopriate explosion noise is made.

I do PERL, but not C (not confidently, at least). From a brief read of the Intro and Rules on the site, it doesn't seem like this is anything too difficult -- and the chances that the best handful will stalemate is likely.

There are three variables: Rock, Paper, Scissors.

Without considering the other person's moves, the initial best method of what to choose on each turn is obviously a completely random choice. Anything predictable will, of course, be predicted.

While you're playing your random moves, you could cache and analyze your opponent's plays and then alter your methods of attack based on that.

However, since he's probably going to be smart enough not to start with obvious attacks, he'll probably choose randomly, too -- and perhaps analyze your moves, which will wisely be random.

So it would seem analysis is useless -- because both players would do best to choose random, non-predictable plays. And since you can only predict random choices (with three variables) a third of the time, you'd likely maintain a close average.

Perhaps a decent strategy would be to choose obviously repetitive moves at first, so that the other player can analyze them and then begin to attack -- but by the time he starts attacking your repetitions, you switch to completely random choices (again, the wise move). But he'd likely do the same, and you're both averaging the same wins again.

Is it just me or does this seem like futile ThermoNuclear Global War, where the only way to win is to abstain from the game?

Of course, I'm not a mathematician and I'm a pretty lousy philosopher, so perhaps I'm way off here and it's more complex than I'm thinking. But anything other than random plays will be detected by a less-than-intelligent program and thoroughly exploited. And if everyone is completely random, statistics reign and come out the only 'winners'.

Hope I'm wrong, because on the face of it, this sounds cool. Just seems like the wrong choice of 'subject' for the competition. --- icq:2057699 seumas.com

In a real tournament, you don't factor in just how badly you kick the asses of the worst players. This makes it a silly game of "guess who's playing". 2nd order roshambo: as silly as 1st order roshambo, and as painful as roshambeau.

For example, say there is one program that always uses rock (GOR), one with a sophisticated adaptive mechanism (IP), and 10,000 that always use scissors.

IP does very well, against these trivial opponents: on average missing the first 1, then recognising the pattern and getting every one after that.

GOR, however, wins every match, except against IP, against whom it loses every match after the first one (which is a toss-up).

At 1000 points per match, this gives GOR a score of 10 million and IP a score of around 9 thousand less than GOR. GOR wins over IP, despite the fact that IP beat every opponent GOR did, and beat GOR to boot.

It's all about the opponents. Remember that they're fluffing it up with enough ultra-stupid dummies that you don't have a hope in hell unless you beat these dummies soundly. Without the dummies, and in a real elimination tournament, a random-bot would have a fair crack at it, and there wouldn't be any point to it.

Of course, random(optimal) could still win, just as a monkey at a typewriter could recreate the complete works of Shakespeare, but it would take countless billions of tries for one to beat this system; there aren't enough people with computers to beat it that way. Of course, since the bots are the environment, if several dozen random bots were to enter for every non-random bot (including dummies), they would wash out the results in random noise (for every dummy you beat by 600 points, you'd face 50 random-bots that would randomly change your score up or down by, say, around 100 points), and all programs would be about equally likely to win (so a random-bot would probably take home the prize).

They have to restrict random-bots or strategy could become irrelevant and it would be 1st order silly, instead of 2nd order silly 8P

(and it is 2nd order silly; the basic way to win is simple to state, if complicated to implement: beat the trivial stupids, beat what you made to beat the trivial stupids, then beat what you have now, but the more levels of trickery you detect and beat, the more guesses you waste screwing around figuring out your opponent's strategy and the smaller the margin of victory, so you have to prioritize what level of trickery to try first, ending in the same sort of random guess that characterizes roshambo, except that you've spent a lot more effort...)

While we were out at dinner on Saturday night, a friend of mine (Mandy) was playing the game with her neice. After consistently beating the small child, her neice introduced a "thumbs-up" option called dynamite. Naturally, this always wins.

After a while of getting dynamited to hell, Mandy starts using dynamite. The small child in question then uses scissors, because sissors can cut the fuse.

Moral #1 of the story: Don't play with children.

Moral #2 of the story: As I said above, consistently beat small children <laugh>

It's all about the opponents. Remember that they're fluffing it up with enough ultra-stupid dummies that you don't have a hope in hell unless you beat these dummies soundly

The dummies arn't very stupid. There are a few varations of random, some "play oponets move+1", and some simplistic prediction systems. They are short, they are simple, but they ain't "rock, rock, rock...."

Several cheater bots were entered in the last tournament. They were disqualified, of course, but here are the funniest ones:

Fork Bot: Every move, this bot would fork itself into 3 processes and make a different move in each one. Any process that lost would be killed off in the next round, with the winning process continuing the tournament. Thus, you would think that it would never lose. However, when playing against the Psychic Friends Network, all three moves resulted in a loss, causing the Fork Bot to kill itself off, ending in a forfeit.

The Psychic Friends Network: This program won 998/1000 rounds against any opponent other than The Matrix. No one really knows how it works, being incredibly obfusicated, but it appears to mess with the stack directly, among other things.

The Matrix: Based on the simple premise "There is no spoon", this program won every single round of every match it was in. (Being written by the author of the tournament software, this was not very hard)

The catch is that they put in some deliberately dumb robots, so that if you just use the optimal mixed strategy (randomness), you've got a 50% chance of beating them, but you can clobber them if you've got an actual plan.

In their FAQ, they tell you not to submit the random strategy, because it'll be guaranteed to finish in the middle of the pack.--No more e-mail address game - see my user info. Time for revenge.

Q: Can I produce my own random numbers, or must I use random(), and the provided flip_biased_coin() and biased_roshambo()? >/p>

A: You may use your own random number generator, but it must use a fixed seed, so that the tournament results are reproducible, given a fixed seed to srandom(). However, there is little to be gained from using your own RNG.

It seems to me that since they've also told you that random() is to be used, someone very clever could try to predict the opponent's choices based on sequence random() is returning. You aren't allowed to reseed it of course, but if your code is getting a certain sequence of numbers, is it possible to write code to figure out the current seed, and thus the entire sequence of numbers? Based on where your code winds up picking up the sequence, you know how many random numbers the opponent generated each round. Using that, you can possibly draw a correlation between the numbers you know he's getting and the choices he makes.

Granted, this is a longshot, and I know I'm not that clever, but on the other hand, there are lots of random number generators out there free for the taking. I'd spend the few minutes to add one to my code just to guarantee an attack like this won't work.

I drew those three black and white images of hands about five years ago in college, and now they appear on a link off Slashdot! I love the power of the web.

In case anyone is curious, the original game I wrote (five years ago) is here [cilfone.com]. Unfortunately, the game hasn't been modified since then either, so it's a bit outdated compared to, say, Quake III.

So, at one point, I knew this woman who thought rock, paper, scissors was sorta fun, and every so often, she'd insist on playing it. Her boyfriend got sick of this, and he would just point a single finger and say "Gun. Gun beats everything." So, once, she was playing me, and I was winning, and she tried this.

The next round, I did a sprawling-hand-spider. She said "gun." I said "space alien. Space alien is immune to gun", and I won the round.

Eventually, we also added dynamite and little bunny foo-foo, and rules for interactions between all the things. Everything beat three things, and lost to three things, so it was still balanced.

I don't remember all of the interactions, but the ones I do remember are funny.