Code mods

Jump to navigation Jump to search
Revision as of 20 March 2013 at 19:03.
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]

    Skilgannon21:27, 19 March 2013

    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?

      Sheldor22:39, 19 March 2013

      char based energy monitoring? What advantages does it offer?

      For names, how about Cutlass or Yatagan?

        Skilgannon08:01, 20 March 2013

        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.

          Skilgannon08:41, 20 March 2013
           

          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.

            Sheldor13:25, 20 March 2013

            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.

              Skilgannon13:33, 20 March 2013

              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.

                Sheldor13:53, 20 March 2013
                 

                That will be integer division, so won't give fractional results. I'll find something though.

                  Skilgannon14:13, 20 March 2013
                   

                  One byte down, one to go!

                    Skilgannon16:27, 20 March 2013
                     

                    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 =)

                      Skilgannon20:03, 20 March 2013
                       
                       
                       
                       

                      Uh oh, I'm getting a StringIndexOutOfBounds exception. Did you do something to the PM string?

                        Sheldor00:15, 20 March 2013

                        Ah, forgot to increase the minimum look-ahead distance for the PM, now that it isn't limited to 14 ticks of history. Fixed.

                          Skilgannon07:11, 20 March 2013
                           

                          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.)

                            Voidious19:43, 20 March 2013

                            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.

                              Skilgannon20:01, 20 March 2013
                               

                              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.

                                Rednaxela20:03, 20 March 2013