« first day (8 days earlier)      last day (35 days later) » 

12:13 AM
I would like an easier way to follow a specific bot, maybe hovering it in the list would highlight it on the grid and/or temporarily change its paint colour
 
12:56 AM
@Neil I did come up with a similar mechanism for the Gold Collectors challenge. You click a checkbox and it would put a red line around the bot
 
 
2 hours later…
2:48 AM
0
A: Art Attack KoTH

kenorbSmart Ant V5 function ([mc, mx, my], grid, bots, [rcurr, rmax]) { let dest = { left: "left", right: "right", up: "up", down: "down" }; let deltas = { x: { left: -1, right: +1, up: 0, down: 0, wait: 0 }, y: { left: 0, right: 0, up: -1, down: +1, wait: 0 } }; let [[gmin, gm...

 
 
4 hours later…
6:54 AM
@dzaima and @Alion, you two seemed to really dig deep into this challenge, and talked with experience so I looked you up, and saw the Formic Functions Ants challenge. That seemed epic! Just want to throw my kudos out there. Well done.
 
@HeinWessels yeah, Formic Functions is the reason of this message :p
 
Yeah, it makes me quite curious what @Alion is going to come up with. It better be epic. (No pressure) :P
 
7:43 AM
How often does KoTH challenges come out usually?
 
oh wow every extra millisecond that a bot takes per round adds 5.55 hours onto how long will BetaDecay have to run the tournament for
 
 
1 hour later…
8:53 AM
Well, I'm gonna cost BetaDecay a couple of days probably then...
 
@Alion oh no another slow entry D:
 
This time caching won't save us :P
I'm gonna try to keep it sane, though. I've put a soft goal of 10ms on myself.
 
My goal is O(width^2 + botAmount^2). If anything's over that, it must be cached & recalculated rarely
@Alion but you can make your own caching (that is, if your entry has anything really cacheable)
 
The worst issue I'm facing right now is that my pre-processing code is already costing Beta about 7 hours :P
 
@Alion what does pre-processing do?
 
9:08 AM
Puts data into a reasonable format and calculates a scoreboard.
The second function can be removed for many types of entries, and also improved if I find some spare time.
Do keep in mind that "a reasonable format" for me is pretty comfy and very bad for performance, as it was the case in FF.
 
10:06 AM
\o/ I successfully killed eliminated TrollBot with Jim & new bot working together once :D
 
That sounds scary.
I am concerned.
 
@dzaima oh christ
 
Oh. You just erased him out of existence, I take it?
 
@Alion eliminated him by making him have only 1 cell with his color
 
Yep, that's what I meant. I wonder what are some other interesting uses for the explicitly allowed teamwork.
 
10:11 AM
I am surprised that no one has used that yet
 
@BetaDecay DFSBot alone takes 50ms for me, so good luck to you. Doesn't help that localStorage makes parallel games impossible (unless you bother making a custom localStorage)
@BetaDecay I had wanted to make Jim a partner for a long time, just never got around to it
 
Local storage preserves data across games, correct? Or is it cleaned up?
 
@Alion it's cleaned up
 
If I rewrote the controller in pure js, would it be faster if I ran it in node?
@dzaima So are you suggesting that I make a variable localStorage = {}?
 
@BetaDecay something like that. It'd also involve making window.localStorage, localStorage.set/getItem, and, if any entries use the feature, immediate stringifying of the contents (this I didn't bother to do for my controller)
 
11:12 AM
beautiful. Game with Borderline, Jim, Annoying little brother, Trollbot and the entry I'm making and both little brother & troll eliminated
 
It sounds like Jim's getting a magnificent ally.
 
@Alion well, that ally's gonna help anyone in need, if they're willing to cooperate (aka do nothing okay it's way more complicated than that)
 
By the way, I think I've finally got a lead on something insane. Stay tuned!
 
oh no
 
It's gonna take a while though, so don't stay tuned too hard just yet.
 
11:15 AM
I wonder how much of your idea is implemented in Jim already :p
 
@dzaima So does your ally bot look for someone that's being trolled, and then it follows the troller? And then hope that your Ally bot kill the trollers quick, so that your bot can focus only on painting? Regardless if the troller was following you or someone else?
 
@HeinWessels first it clears all colors made by that troller, while Jim's patiently staying in one place so the troll doesn't create more colors. Then, following a complex procedure from all three parties, clears the remaining colors
I'll probably set up some handshake with Jim to make sure the person I'm helping will follow their part of the procedure.
thinking time 100ms o.O
(don't worry, that's not supposed to happen)
 
11:32 AM
That's a comfy 23 more days to the tournament running time added.
 
11:55 AM
@BetaDecay not sure, but it would easily enable running games in parallel if you're willing to write a very simple tournament script
 
12:17 PM
D: my bot mistakenly assumed that Jim was the troll and helped the troll kill Jim
 
@dzaima that will be useful then ;)
 
Great. My bot is complaining about some magical a being not defined and I don't even have an a in any active part of my code.
Ah, nevermind, I've abstracted away so much of everything already that I didn't properly follow all function call chains.
@dzaima By the way, would it be possible for your controller to include the original stack trace of the exception that it caught?
Oh, wait, this time it did...?
Hm.
 
12:37 PM
@Alion I did that 21 hours ago..
 
Ah, well that makes sense. I didn't refresh the page all day yesterday so I wouldn't know.
It still doesn't include line and column numbers, but alright. Thanks!
 
@Alion you can also enable pausing on caught exceptions in chrome in the Sources tab to get thrown in the debugger on the faulty line and be able to check variable values, ect
 
0
A: Art Attack KoTH

12Me21Nice Bot function([i,x,y],grid){ return localStorage.nice&&c(...localStorage.nice.split`,`,0)|| c(0,1,"down",0)||c(1,0,"right",0)||c(0,-1,"up",0)||c(-1,0,"left",0)|| localStorage.nice&&c(...localStorage.nice.split`,`,i)|| c(0,1,"down",i)||c(1,0,"right",i)||c(...

 
@Alion at Object._botFn (blob:null/whatever: 2 )
or you could click on that and it'll take you to the line (at least in chrome)
 
Ah, perfect. Sorry for being blind :P
 
1:19 PM
@dzaima In the reference controller, the bots start on a painted square, but in yours they don't.
 
@Alion That's not by design
 
What do you mean?
 
AFAIK I programmed it so the bots should start on an empty square
Well that's the way I thought the code would work
 
Well, they don't. They even have score 1 before the game starts.
 
I see. I like it more this way anyway
 
1:23 PM
 
Exposed.
 
@Alion pushed (plus making sure that no 2 entries start on the same place)
 
 
1 hour later…
2:42 PM
@dzaima Damn, my memory is whacked
 
0
A: Art Attack KoTH

12Me21Eraser Goals: Erase Overwrite other colors Paint empty spaces Move Putting a code block directly after a list breaks the formatting. function([i,x,y],grid) { var THIS=this; return b(erase)||b(overwrite)||b(paint)||b(move); function erase(vx,vy,name){ var cc=get(vx,vy) ...

 
2:57 PM
Whoops, I guess my bot will gobble up 1 GB of memory by the end of a 2000 move game until I figure out something better.
 
@Alion half a megabyte of info per round?
 
Yeah, basically.
 
what the hell are you storing?
 
The entire state and some more.
 
@Alion I'm sure you don't need the entire state of everything, you won't be going trough the whole gigabyte by the end (i hope ._.)
 
3:00 PM
O(n) with n being time, have ya heard about it?
There's probably a way to do what I'm doing way more efficiently, but for now I don't feel like thinking
Don't worry though, I'm probably not posting anything nearly as bad as this in terms of performance. I'm just lazy during dev for now, will clean up when I have time to spare.
Actually, crap, there isn't much time until the deadline.
I thought I still had a week!
 
@Alion I tried to make an array of 125M zeroes to see how slow that'd be and it resulted in Linux freezing ._.
 
Oh...
 
My team works pretty well on a small board, but with more than 30 players, I'm not having much luck.
 
I had a couple of gigs free RAM though. Guess I should've counted in that JS probably stores more data than just the double for each number
 
@dzaima I made a javascript program which ended up trying to create a n dimensional array of side length n for a fastest code problem
 
3:13 PM
@Mnemonic Is it something you're working on behind the scenes, or do you mean the two bots that you have posted?
 
The two I've posted
I want a third bot for the team, but I'm not sure what will work with so many opponents
 
Interesting approach! Shame it doesn't work too well in real games, though.
 
I'm tempted to make something to defend against trolls, but I feel that might be too explicitly targeting a specific opponent
 
5 hours ago, by dzaima
\o/ I successfully killed eliminated TrollBot with Jim & new bot working together once :D
 
@Mnemonic there are like like 4 troll bots though
 
3:18 PM
you're not the first one ;)
 
@tomsmeding I had that idea a while ago
> You may, however, target the tactics of a general class of bots.
 
I suppose
I guess I'm building a troll killer
 
@Mnemonic heh, both of your bots are a part of Jim (though that's not a surprise as like half of the answers are more refined parts of Jim :p)
@Mnemonic warning: it's not easy. It takes at least 2 bots working together and horrifying scoring functions.
 
I don't actually need to kill the trolls
Just get them away from the important players
 
I didn't even bother to try to understand what Jim does.
 
3:24 PM
@Alion it does literally everything.
 
Mostly because I can't read JavaScript at all, and the strategy description... isn't very descriptive.
@dzaima Well it doesn't draw Mona Lisa.
 
@Alion there's a reason why it isn't descriptive - it's complicated.
@Alion you sure?
 
I haven't seen him do it...
 
@Alion many things Jim does only happen rarely
 
On second thought, I wouldn't even be surprised.
 
3:25 PM
I feel like the sheer complexity of Jim may be a weakness
I just haven't figured out how to exploit it yet
 
Small arena is definitely one of its weaknesses.
But irrelevant for the tournament.
 
@Alion this revision explains a part of its strategy but some things of that have changed and there are more things wrapped around everything
 
Good grief, yeah that's bonkers.
 
@Mnemonic well exploiting Jims weaknesses would be against the rules anyway
 
True, but Jim falls into every class of bots, so I can target one of those
 
3:29 PM
@Mnemonic Jim switches tactics often though
 
Or all of them
 
@Mnemonic targeting all tactics of Jim feels a lot like targeting Jim :p
 
I think at that point, it's just a general purpose bot
 
@Mnemonic yeah, that was my intention with it
 
Since it fights every tactic that everyone is using
 
3:32 PM
@dzaima notably if Jim doesn't know what to do, he makes a heatmap of places with score potentials and goes to it, but the path is taken according to the rules mentioned there.
 
Okay, so one of my ideas is basically current Jim.
 
4 hours ago, by dzaima
I wonder how much of your idea is implemented in Jim already :p
 
One of my other ideas is probably a part of Jim. But the one I'll be going with... is also probably a good part of Jim, but hopefully revolutionary in practice.
 
Dragon bot performs surprisingly well considering it doesnt really use any sort of strategy and even goes back over its own tracks
 
Frankly, there is an entire assortment of retarded bots, so being in the upper half doesn't mean much.
Unless we've been getting wildly different results, which is probable considering the sample size is small if it's not in the thousands for this game.
 
3:39 PM
There is JS error when adding a bot at beta-decay.github.io/art_attack/fast
> > Uncaught ReferenceError: stopGame is not defined
 
@BetaDecay ^
bad copy pasting ಠ_ಠ
 
4:13 PM
ok running tournament (without MC & DFS). If Jim stays in top 2, there'll be a new bot
jim what the hell are you doing in 7th place, you're better than that ಠ_ಠ
 
@dzaima why can't you choose which bots after starting a game? ideally I'd like to be able to start a game, then see which bots are slow and disable them.
 
@Neil because that'd be complicated and I didn't actually write the entry handling (it was in the koth framework)
I just start a game for ±200 moves and disable the slow bots & remember them (the slowest are DFS & MC)
@Neil also because shrinking the board of an active game makes no sense at all
(though I've wanted to make customizable board sizes for a while; currently I just modify the constant in the code)
 
so I've got to open two tabs, one to see which bots are slow, and a second with the controller at the bot choosing stage?
 
@Neil you can go out of the started game
 
???
 
4:21 PM
@Neil the top bar has an item "Art Attack" which goes back to entry enabling/disabling
 
oh well that's not obvious at all
 
@Neil yeah, I have no idea how I figured out myself :p
 
also, I just saw borderline die, I had no idea that was possible
 
@Neil a troll will do that easily
 
@kenorb Should be fixed now
 
4:32 PM
oh wow 50 games later, FarSightedGreed is first with score 453.5 and Jim's second with... 453.4.
 
interesting standings
 
5:13 PM
hm, imma try the strategy of not preferring to overwrite other bots colors. It'd mean losing out on making enemies' scores worse, but loops of fighting should be less likely
really I should just make jim notice that its color is being deleted as fast as being made by a single bot, but that'd take effort ¯\_(ツ)_/¯
 
Meanwhile I've screwing around with a bug for the past 2 hours.
(and still am...)
 
@Alion you're lucky to know there's a bug, it's much harder to know why a bot is failing if it just fails for no reason :p
 
I'm at a point where I'm testing specific features, so obviously I'd know if there was a bug since it's so isolated.
 
@Alion you're lucky enough to be able to isolate features (Jim is a big blob of stuff, I can't just take one part of it and look at it) :p
@dzaima oh hey, 1st place :D Score 562 (K-S of 73%), 2nd place GiveMeSpace with 476
17/50 wins (with 2nd place GiveMeSpace with 8)
that was much more better than I expected
 
5:43 PM
I am rapidly losing sanity. And time.
 
I'm kind of interested in what bug in an isolated feature would take 2 hours to not find :p
 
Well, it's a 500 LoC isolated system.
 
5:59 PM
I'd just add debugger; at the start and F11 trough it
 
0
A: Art Attack KoTH

dzaimaJohn John is Jims big brother. As Jim often gets in trouble, he is always on lookout for him and will help when there is the need. John might be a bit clumsy, but when the need arrives, he will do whatever is needed to protect him. function ([mc, mx, my], grid, bots, [round, maxRound]) { va...

 
6:21 PM
right, I think it's finally time to add shortcuts to my controller
 
6:41 PM
@dzaima YoU cAn Do ThAt?!?
Whoops.
 
@dzaima huh, I had no idea its algorithm was so effective
 
@Neil eh, another tournament ended in 404, 400 & 358 for GiveMeSpace, Jim (yes, not 1st o.O), and FarSightedGreed correspondingly. Jim still wins with the win count
4th is numerologist, which just got deleted o.O
@Neil but yeah, the idea is pretty good. Jim tries to do one better though, targeting the best 5x5 area
 
6:56 PM
Holy shit.
I spent 4 hours on a logic error that I specifically tried to avoid WHICH I DISCOVERED IN 5 MINUTES USING THE GODDAMN DEBUGGER I FORGOT ABOUT.
killme
Alright, back to normal damn bot dev.
It would be nice if I wasn't completely stupid but whatever I'll manage somehow.
At least nothing I'll screw up will be as bad as this, so I'll always have the "it could've been worse" card.
 
@Alion thinking positively :p
 
I even remember resolving naming conflicts related to the argument I was supposed to introduce. Why did I not put any TODO?!
And of course, providing one too many arguments to a function and JavaScript is "sure why not ¯\_(ツ)_/¯"
Now watch me actually test the "fix" and it's not it.
Oh yes. I didn't jinx it. That was actually it. Phew.
Now to throw it into an arena full of bots and see if it still works properly (I've been testing only a special case for now...).
And it works there too. Next on the agenda: a) write some more code, b) take over the world.
b) will probably have to wait for tomorrow, or perhaps even the day after, since I'm so goddamn tired after chasing that bug for hours on end.
 
7:31 PM
Hopefully nobody will make what I have planned in the meantime...
 
pushed shortcuts and more noticeable pointer to hovered entry in the leaderboard
 
8:20 PM
@dzaima I accidentally started editing entries before starting a game, and now I can't start a game
 
@Neil huh, you should be able to start a game after editing
you sure you didn't make an entry error?
(aka check console for compilation error)
 
where's the UI?
 
@Neil for what
I mean console as JS console (aka F12)
 
for starting a game if you start editing before starting a game
 
ohh
yeah
zoom out the window
the buttons are known to go under the title thing because html
 
8:24 PM
ugh
 
@Neil k pushed removing screensaver & useless pause on error & replacing "random" with "a" so much higher zooms should work fine
 
8:49 PM
@dzaima Does John clean up after follow-type bots with the most optimal path?
 
@Alion that'd require doing travelling salesman, so no :p
 
Oh. Right.
Huh. I didn't even realize TSP found its way into this challenge.
 
it just searches for the nearest one in increasingly sized squares (I know it should be rhombi but ¯\_(ツ)_/¯)
 
Phew. 1.13e+80 for just 250 cells. Yeah, no.
 
that's a large number
what does it indicate
 
9:00 PM
How many iterations it would take for an O((n^2)*(2^n)) algorithm to run for n = 250
 
9:11 PM
I wonder if my bot has enough time per game to shine. It's meant to be really late game, so ¯\_(ツ)_/¯
 
@Alion getting 500 cells in "the really late game" feels.. hard
ok, 600 is probably more accurate
 
Perhaps. The conclusion of a game does seem quite random.
 
9:42 PM
@dzaima What does poor Johnny do when he's got the wrong color to help Jim out? Ignore, perhaps?
 
@Alion yep, and I'm refining the logic for that so in that case it doesn't accidentally start targetting Jim
 
Oof, yeah, you don't want Johnny to help out a troll :P
 
I found a massive scoring system error in the process which existed just because I wanted to be nice and not use sort for getting only the top 2 entries
if 2 bots are over each other, John counts up the badness of both, but only registers one bad if the difference is >5 (which would happen if there was a chase before the stopping). Previously it wouldn't count up the score of unbeatable bots though, resulting in bad targeting
a handshake on Johns part would allow me to make Jim realize noones gonna help him, but I want to do most I can before resorting to that
 
Well, I'm done for today. Aside from the Bug Of The Year, a productive day overall. I'm hoping I can pick up the pace tomorrow and already have something to show, like leaderboard placement and stuff.
 
0
A: Art Attack KoTH

SamYonnouHeatBot function(myself, grid, bots, gameInfo) { let myC = myself[0]; let myX = myself[1]; let myY = myself[2]; let scores = Array(bots.length + 2).fill(0); for (let i = 0; i < grid.length; i++) { for (let j = 0; j < grid.length; j++) { scores[grid[i][j]]...

 
9:52 PM
@Alion well good luck on beating Jim :D
 
10:22 PM
0
A: Art Attack KoTH

SamYonnouBig Game Hunter function(myself, grid, bots, gameInfo) { let myC = myself[0]; let myX = myself[1]; let myY = myself[2]; let scores = Array(bots.length + 2).fill(0); for (let i = 0; i < grid.length; i++) { for (let j = 0; j < grid.length; j++) { scores[gri...

 
both new answers are somewhat a part of Jim :p
Jim doesn't target the top bot though, just prefers to eat its colors
 
10:38 PM
@BetaDecay Does waiting paint the cell below you if it's not painted yet? According to the spec it shouldn't if I'm reading it correctly, but I'd like to make sure just in case.
 
@Alion it does
and I read it the other way around too :p
 
Mmm. "Where wait means you do not move."
Oh. Broader context sorta explains it.
 
yeah @BetaDecay "Whenever you move to a square, you paint it" should be changed
 
Based on the way it is phrased, you can clear squares which you shouldn't be able to clear if you land on them at the same time as another bot
 
@fəˈnɛtɪk yeah that does indeed happen, though I wouldn't call that bad
 
10:42 PM
I'm guessing that's intended. Hopefully.
 
I think it is an interesting interaction
 
I agree.
 
:o if I made a 2nd John I'd be able to beat all trolls all the time
 
DragonBot is the most easily recognizable bot due to it not working with a strategy and just trying to draw a pattern
 
I want to see a triple bot submission that tries to keep a 3-color picture on the board.
Being the tryhard I am, though, I'm not gonna be the one doing it :P
 
10:45 PM
The problem is that it is far to easy to break a picture
 
Depends on the size
 
@Alion if keeping counts as just constantly redrawing it, it wouldn't even be that hard
 
It would be like trying to do it on the reddit 2017 april fools thing with something like 50 people
 
11:04 PM
heh, Jim & Dragonbot alone on an 80x80 board make interesting patterns
 
11:20 PM
heh John won a game.. That's Jims job D:
 
I had john beat jim when i ran it with all the bots
by about 100 squares at 2000 rounds too
 
I should probably cap John at ~200 score :p
@fəˈnɛtɪk the published John has some major flaws though. But in that game John beat Jim by ~200 score so idk :p
 
Maybe it is jim who idolizes john and therefore props him up?
 
@fəˈnɛtɪk who knows
anyway, imma start running a tournament with all bots overnight. Had enough of jim for today :p
 
11:49 PM
@dzaima Changed it
@fəˈnɛtɪk r/place was what inspired me to make this challenge
 

« first day (8 days earlier)      last day (35 days later) »