Code mods
The highlighted comment was created in this revision.
OK, I've looked over the code. Even on a regular compiler you should be able to get this under 250, just use the gun with the hard-coded distances, then make chancesOfReversing final
, since you aren't changing the contents anywhere.
However, with my tuned compiler/shrinker setup, I have this bot down to 237 bytes.
I'm using Jikes as a compiler, and then I post-process the .jar with ProGuard to shrink another 1 to 4 bytes off.
I modded the first gun to also take distance into account on everything except the match position and added setAdjustGunForRobotTurn(true);
, after compile and shrink it is a healthy 249.
Here it is: [1]
Huge thanks.
Using a hard-coded distance in the pattern reconstruction was the main accuracy issue. Now that that's fixed, I think the 5 bytes required for the setAdjust
would be better spent on Miked0801's char based energy monitoring.
I've decided to make this bot separate from Epeeist; and release it under the package sheldor.jk.nano. Any ideas for the new name?
char based energy monitoring? What advantages does it offer?
For names, how about Cutlass or Yatagan?
Ah, I see, using the unsigned property to wrap negative numbers so you don't need an extra comparison! Smart! Ok, that is in, total codesize 247 =) I just need your input on a name, and we're ready to go! Although, I think the whether-to-reverse decision could be improved by using a bigger divisor and different values in chanceOfReversing.
How's "Sting" for a name? It's small, blue, and extremely painful. :) If that's already taken, the Kukri is another great small sword/large knife. But, if you don't like either of them, go ahead with "Yatagan;" I like the sound of it.
How's this for a description?
<botname> v1.0.0 by Sheldor and Skilgannon. 03/20/2013
<Short description of namesake>
Codesize: 247 Bytes without any colors.
You're probably right that using different reverse probabilities would help against certain bots, but that sounds like a lot of hand-tuning, so let's save that for the next version.
Once you've packaged it, go ahead and add it to the literumble, and then post the source code on the wiki, under <botname>/Source.
Think I'll go with Yatagan, I'll package when I get home. Although I found a bug in the one optimization I did, so I'm going to have to find something else to shrink, it is at 251.
I might've found something to shrink. Here it is:
Change the chancesOfReversing to 30, 15, and 0; and then, change this line from:
direction *= (chancesOfReversing.charAt(deathCount) - (2 * Math.random()));
to:
direction *= (chancesOfReversing.charAt(deathCount) / integer - Math.random());
I didn't compile, so I don't know if it will work.
I made a little breakthrough, and now have 4 more bytes to play with. So, is it worth changing the bullet power to 3 if I can add back setAdjustGunForRobotTurn() ? Or is there something else I should go for? I need bullet velocities to be in integers, so bullet powers of 2, 2.333333, 2.666666 or 3 are the options. I don't have much experience for making these kind of judgement calls in nanoland =)
Uh oh, I'm getting a StringIndexOutOfBounds exception. Did you do something to the PM string?
So is user1.user2.* the "new hotness" naming style for collaborative bots instead of wiki.* ? Or is it a subtle distinction between specific team-ups and totally wide-open bots? I kind of like the wiki package, though I also kind of thing it should be 'robowiki'. (I put RoboRunner in 'robowiki.runner' package.)
I think these kind of team-ups have been around for a while, eg there was usa.nano.Nemo which was in package usa because both creators were from the USA. I think wiki/robowiki package is great for stuff which is specifically released as public domain, like BasicSurfer, as well as test bots like DrussiousGT, and code/utils which is meant for people to use and hoist, but I see no problem with collaborative bots.
Can't remember if we were the first, but I know Chase and I used user1.user2.* for Scarlet. The thinking was a subtle distinction between specific team-ups and totally wide-open bots, but I'm kind of on the fence about "user1.user2.*" vs the wiki package.
On the subject of the wiki package, now that you mention it, I'd say I would prefer "robowiki." over "wiki." for sure.