« first day (7 days earlier)      last day (36 days later) » 

1:26 AM
2
A: Art Attack KoTH

Hello WorldBob function(myself, grid, bots, gameInfo) { var [mc, mx, my] = myself; var output; var allowRetracing = false; var size = 3; var scoreboard = grid.map(column=>column.map(c=>c==mc? 0 : overMap(c, 2, 1, 0))); for (let [bc, bx, by] of bots) if (bc != mc) {log([bc,bx,by],[mc,mx,my]);...

 
 
1 hour later…
2:39 AM
Dagnabbit, I wanted to make something similar
A KoTH based on painting over other areas
 
2:52 AM
Where should I start..
 
 
3 hours later…
6:05 AM
@dzaima If you run your simulation is running again, can you just confirm that LittleBrother is not breaking anymore? Just dying (I see he can't survive too long)
 
6:59 AM
@Feeds ...that's literally a copy of Jim
 
7:39 AM
I haven't got time to update TBTPTBCBINAP, not even enough time to fix its moving bugs, but it still looks like a good competitor. I'm so proud of it!
@BetaDecay when is the deadline for editing bots?
 
@Night2 same as submitting - 27/8 I'd expect.
@Night2 It's somewhere between 2nd and 3rd place, though if there are known bugs, it could maybe beat Jim once fixed
 
8:27 AM
oh wow all this time Jim had an error where rescoring detection wouldn't actually happen ಠ_ಠ
 
8:42 AM
0
A: Art Attack KoTH

logicBVTerritorial function (myself, grid, bots, gameInfo) { const w = 6, h = 6; let my_c = myself[0], my_x = myself[1], my_y = myself[2], size = grid.length, roundnum = gameInfo[0]; let getDistance = function (x1, y1, x2, y2) { return (Math.abs(x1 - x2) + Math.abs(...

 
9:08 AM
heh I made a bot that tries to cheat its way to victory by setting its coordinates to good squares, but Jim is still 2x good as him :D
 
 
1 hour later…
10:22 AM
@HeinWessels you re-added round === 2 :p
 
Wow >.< LittleBrother is really annoying!
That better?
 
yep :p
 
Thanks dzaima! Can you just give me a sanity check? The color of the grid tile directly corresponds to some bot's ID. This means that the bot ID's start at 1, and there is no bot with ID of zero?
 
@HeinWessels yep
 
For sure there's no bot with id 0
but the rest is only true in the current controller implementations
But I guess you can rely on that
Note that there may be gaps due to disqualified bots
 
10:34 AM
note that the spec doesn't say the ids are consecutive. They could be in the billions while there are 20 players
 
Hopping onto the Art Attack train. I've got some (hopefully nasty) things in the works...
 
@Alion oh god you arrived
 
I've noticed that there's some hype around Jim and I just couldn't pass up the opportunity after I saw his creator... ;)
Pretty tight deadline though - I hope I can make it.
 
@Alion (obligatory plug) have you seen my controller?
 
Nope, but I wished it was faster. Is it?
Okay, yeah, noticeably faster. Thanks!
 
10:43 AM
@Alion there are 3 main entries - DFSBot, MC & Euclid - which together take ~90% of a rounds time which I disable while testing
 
Good grief, some of those bots are slow. I wish luck to the creator, who has to run a lot of games...
 
4th place on slowness is TrollBot, but I've suggested something like a 100x speedup for it
 
Although MC seems like a quality bot, so I hope I won't be skewing my results too much by disabling them.
 
@Alion it does seem pretty good, but I don't think disabling it will change much in other bots scores. Every now and then I do run a tournament with all bots to see them competing, but not while testing new ideas
 
Nitpick: The scoring method shouldn't be average score - it should be win count.
(although I can see why average score may matter more for development)
 
10:51 AM
@Alion I know, and you answered your own question why
 
What are opinions on a webassembly bot?
not yet sure how much faster that will actually be
 
@tomsmeding I have no idea how one does webassembly but if you can get it to work with the current function submission style (or bug betadecay enough to get support for it), sure, I'd love to have some of the slowest entries be sped up :p
 
Yep, most probably it will just be a javascript function; just one that's using somewhat more browser API's than the rest :p
 
11:09 AM
There really should be a limit to a function's response time. It would dissuade me from considering an n^5 algorithm with n being arena side length.
3
 
@Alion yeah, I've said that before, though changing it now to a reasonable time would disqualify entries :/
 
11:39 AM
Is modifying the objects passed to the function allowed? I don't see anything explicit in the spec so I assume yes, but I want to make sure just in case.
 
@Alion pretty sure, it was implied somewhere in the spec
oh yeah my controller doesn't refresh the arguments for every bot. Probably should make it do that >.<
@Alion the controller does copy the values before every bot, but I can't find where betadecay said it does that
@tomsmeding was looking at the performance of Euclid and noticed the biggest time hog was stringifying of arrays in scorePos by some reason. Changed all == in the function to === and != to !== and the bot got 3x faster :D
oh it seems to be the grid[x][y] == largestBotId part that benefits from that
@tomsmeding ooh your largestBotId variable actually returns an array not its ID, so the comparison's garbage & does nothing useful
 
12:16 PM
sadly no such findings for MC & DFSBot. Both just do a lot of complicated things that take time
 
@dzaima what in the world
I thought === was just for kicks
thx tho
 
@tomsmeding that's because largestBotId is actually an array not the ID it's named as
 
it shouldn't be
did you spot the [0]?
 
@tomsmeding that takes the 1st element of the sorted array
you'd need [0][0]
 
OH
fail
so that's why that didn't seem to be working
 
12:19 PM
:p
 
By the way, my estimates put the time required to run a tournament (10k games, 2k turns per game) at a whopping 11 days.
And it's only going to get worse from here...
 
condolences for beta's computer
 
@Alion eh, better than Formic Functions :p
 
did that take longer?
 
in Formic Functions, yesterday, by trichoplax
Sorry for the hiatus. I'm working on getting a new leaderboard again now.
 
12:22 PM
I'm not exactly up to date on that challenge :p
 
There were times when tournaments took weeks to complete.
There were, however, some major optimizations to the controller(s) which have shortened that time to days at worst.
 
@tomsmeding trichoplax is still running tournaments a year from the challenges start
 
@dzaima Adding a [0] is something like an 8x improvement in speed in your controller
WHAT
okay that bests this indeed
 
@tomsmeding yeah, array == string is horribly slow
 
12:24 PM
though it doesn't seem to exactly have made Euclid better
That [0] fix is published
 
0
A: Art Attack KoTH

NoOorZ24Fuzzy Guy function(myself, grid, bots, gameInfo) { var i,j,x,y = 0; this.answerToLifeTheUniverseAndEverything = 42; this.round = gameInfo[0]; this.coloringStruggle = []; this.myColor = myself[0]; this.botCount = bots.length; this.sizeOfGrid = grid.length; this.sto...

 
we have a problem with webassembly
the instantiation (compilation) functions seem to all be asynchronous
let's see how long it takes, doing random moves the first few turns shouldn't be that bad
 
running another tournament, but with DFSBots search depth set to 8. 4 games in DFSBot is 1st and Jim is 4th :/
(to clarify, that's running a new unreleased version of Jim)
 
12:43 PM
0
A: Art Attack KoTH

RenzeeeJack Starting of with NearSightedGrid's logic (I wanted to created such a bot), I have come up with the following strategy: Will move from the right bottom to the left top (i.e. first the bottom row by going left, then one above by going right, etc.). Thus, starting somewhere right bottom give...

 
@dzaima Do you not retain properties of the function object between calls to the bots?
 
@tomsmeding I should be
oor maybe i'm not ಠ_ಠ
I am retaining localStorage & this but not the functions properties. why couldn't there just have been one good way for storing info D:
 
I dunno, but I've seen plenty of talk storing stuff on the function object
and I'm doing that :p
though using this seems nicer, but also more volatile
why are you replacing the function object at all? Seems less performant, but maybe I'm misunderstanding the workings of your controller
 
@tomsmeding the controller wasn't even meant to have the submissions have a function wrapper, so the code in it gets executed every time. I just made it call the returned function
 
parsing the code each time around should even slow the controller down a bit
so here's an optimisation opportinity!
 
12:53 PM
@tomsmeding entries with function definitions have them be parsed every time too
this is approximately what happens with entry evaluation
 
@dzaima This is an example of a bug posted by @snail_ some time ago: i.stack.imgur.com/59rah.gif This is a bug in my scoring function which allows my bot getting stuck like this.
 
@dzaima that explains a lot
I see why that could happen with a framework like this, but that's a few indirections too many :p
 
@tomsmeding also to note is that that fn definition is made trough a string version of the code, imported as a blob URL thing and that I skipped over many boring details :p
 
@dzaima It written that 27/8 the time to run bots, the deadline is not mentioned. @BetaDecay might need some time to collect latest botData and check all bots for issues/errors/cheats. Someone could use this. to manipulate botData or other things similar to that, also localStorage conflicts must be checked. So I believe he would actually need some time!
 
@Night2 I'd expect betadecay to start doing that on 27/8, not before it. The 10000 games aren't going to be finished any time soon either way
 
1:05 PM
The fastest way to run the game so far is using original controller and something like this:
function fastTurn(){
turnNumber++;
runBots();
}

for(var xyzusnasd = 0; xyzusnasd < 500; xyzusnasd++) fastTurn();
drawGrid();
colourGrid();
drawBots();
updateBoard();
document.getElementById("roundNum").innerHTML = turnNumber;
That will run it for 500 turns
But there are lots of heavy/slow bots added, so even that method is still quite slow
 
oh ignore me
 
Just updated beta-decay.github.com so you can remove slow bots. Also, I've improved the colours and updated botData.js
 
@dzaima That is happening at the end
The loop is just running fastTurn()
 
Why draw the grid?
 
I took it from your doStuff function
 
1:08 PM
I see
 
But that only happens at the end, so you can see the board/table after 500 turns
 
@BetaDecay bad link, I don't see changes here either
 
@dzaima's controller is very nice, but too slow and the table constantly changes, so I can't really keep track of any bot's score in the table
 
@Night2 is it really that much slower than the reference?
 
1:10 PM
the changes took some time to propagate to the live vesion on github.io
it's live now @BetaDecay
 
@dzaima It is slower than running the game with a loop on original controller
 
@Night2 but it's the bots that are very slow. My controller could easily do 1k rounds/second before bots that took >1ms, so the controller speed is pretty much nothing in contrast of the 50ms bots
 
a preliminary webassembly version of MC takes between 1 and 2 ms to do the same as the JS version
which takes ~23ms here
 
@tomsmeding o.O
 
it seems to be a lot weaker though, so there's probably some bugs still :p
was previously using webassembly.studio but I'm now compiling my own custom clang with wasm support
which supposedly takes a couple of hours
 
1:18 PM
@BetaDecay: a suggestion, you could create a variable for size of each spot on map, something like var spotSize = 20; and then replace all 20s with spotSize and 18 and 16 with spotSize - 2 and spotSize - 4, so as bots count grows, we can change spotSize from 20 to smaller sizes like 8
@dzaima I know bots are slowing it down, but on my PC on Google Chrome I'm getting better results if I run the original controller the way I mentioned on top with a loop
 
[2269/3538] Building CXX object projects/compiler-rt/lib/fuzzer/CMakeFiles/RTfuzzer.x86_64.dir/FuzzerMutate.cpp.‌​o
I seem to be compiling a fuzzer
not sure what llvm is doing
 
1:41 PM
@Night2 No worries about the comment. Happened to me as well. Several times.
 
Yeah, I was thinking some bots are buggy, but then I noticed any bot that is storing some data based on round number is buggy
And then I found out games are starting from round 2 :D
 
I'm so rusty with JS. I wasn't ever proficient even, so being rusty means a lot worse things. Like forgetting a return.
Thrice.
 
I seem to have built llvm and clang for webassembly in under an hour
 
2:33 PM
I've made a stripped down controller with a tournament mode:
 
and already quite a number of games run, if that screen is accurate
 
I think would be good to pass the current score of each bot for 'bots' var as the 4th param, as this value still can be reverse engineered by grid analysis, so it could save some time.
 
^ I'm figuring out how to reverse engineer it without scanning the whole grid right now, so I would definitely be grateful.
 
You should be able to determine that, since all changes should be local around all the bots
But that's going to be a finicky business :p
 
I feel like this challenge was just a slight bit rushed. Did it go through the sandbox?
 
2:40 PM
@Alion just go trough the whole grid, it's not that slow. This is what Jim does
 
The whole challenge reminds me the Google AI Challenge (ants.aichallenge.org), but different rules.
 
Woah, Google did something like that and I missed it?!
Ah, 2011. That makes sense.
 
@Alion it did, though I didn't bother to look at it there sadly.
 
What makes you think it was rushed?
 
That's why I called mine Ant, but should have choose the better name.
 
2:44 PM
Mainly:
1. No max function think time.
2. No access to bots' score.
As I said, slight bit. Overall I really like it!
 
@BetaDecay rounds starting with 2, bots array being one integer array, 3 different storage methods, bots array starting to skip eliminated entries at one point for no reason
 
Maybe we can reuse their visuals.
 
@dzaima Meh, that's just my inability to program most of the time
 
Nice, Ant rules, but it's still average comparing to others.
 
2:45 PM
@BetaDecay there should've been at least some test bots
 
@BetaDecay What's up with your encoding? The shruggie looks somewhat weird :p
 
also, bot ID range not being specified
 
Besides, skipping eliminated entries was on request from someone else.
 
And also I can throw in the fact that the object format is... questionable. Why not simple objects with named properties?
 
object format, as in the elements of the bots array?
 
2:46 PM
@BetaDecay but you were the one to accept the change
 
@tomsmeding "Why is a bot an array with 3 elements and not and object with properties id, x, y?"
 
yeah sure @Alion
 
@Alion really it should've be a Map with key ID and value {x:…, y:…}
right, also a property eliminated
 
I suppose
So basically just supply grid and botData
 
3:05 PM
 
Looks like a load of transposed CandyButton
 
@BetaDecay nope, it's Jack
 
ugh, how do you shake off Trollbot?
 
@Neil you don't.
 
@Neil If it gets you you're done for that round.
 
3:11 PM
you hope that there will be more games where trollbot doesn't choose you :p
 
yeah I noticed :-(
 
This is probably why IDs are randomized :P
 
@Neil I just live with it, its damage equals 0 over many rounds.
 
3:33 PM
I think art_attack/fast version should refresh each round and report which round is it, as it's freezing browser and keep making the page unresponsive. Secondly, you don't know whether it's doing something or not.
 
@kenorb It does report which game it is (and refresh the scores)
In practice, that seems like a task which is too hard for browsers
 
@BetaDecay the webpage only updates if no JS is running
 
It does?
 
it should
 
That's annoying
 
3:39 PM
if the JS was in the middle of deleting a div and replacing it, you wouldn't want the user seeing the deleted div
 
So is there a way to force the page to update?
 
@BetaDecay what you can do is make everything async and await and periodically sleep for 0ms
 
@dzaima help
 
Looks like a De Stijl painting
 
@Alion that happens if you play a game with ±1 player and then switch to more. No idea why ¯\_(ツ)_/¯
 
3:42 PM
Well then.
 
I just refresh the page when that happens
 
0
A: Art Attack KoTH

NeilFarSightedGreed function([id, x, y], grid, bots, gameInfo) { let value = n => n ? n == id ? 0 : 2 - Math.abs(id - n) % 3 : 2; let directions = [ {name: "wait", x: 0, y: 0}, {name: "left", x: -1, y: 0}, {name: "up", x: 0, y: -1}, {name: "right", x: 1, y: 0}...

 
oh god yes my function calling rewrite can write to function and have value be kept :D
 
4:07 PM
yay!
 
@BetaDecay how does the tournament mode work? these results dont make sense to me. out of 100 games Ant won 80 but others won over 20 combined? What am i not getting?
 
@Alion fixed (i hope)
 
Seems okay for now. Thanks!
 
Wow, DFSBot seems to be slow.
 
@Spitemaster I just disable it while testing
 
4:22 PM
@logicBV I forgot to randomise the IDs
 
How does not randomising the ID's give more wins than games played? Or am I misunderstanding? :P
 
maybe there are ties?
 
4:37 PM
That's a whole ton of ties then, alright.
 
Oh sorry, I misread the question
Yeah, there are ties
@dzaima The fast controller is now async (and sorts the leaderboard by score)
 
@BetaDecay but 36/100 games tying seems a bit impossible
(or is that screenshot not actually a 100 game tournament)
 
That screenshot was a 100 game tournament where each game had 20 rounds
 
@BetaDecay oh.
that explains the ties :p
 
5:16 PM
0
A: Art Attack KoTH

ZacharýThe Follower function(myself, grid, bots, gameInfo) { var dirs; window.localStorage.FCOLOR = window.localStorage.FCOLOR || 0; var c = myself[0]; var x = myself[1]; var y = myself[2]; var n = grid.length; function result(color) { if(color == 0) return c; ...

 
It seems the challenge is getting popular, with 27 submissions
 
6:01 PM
1
A: Art Attack KoTH

fəˈnɛtɪkDragonBot function dragonCurve(myself, grid, bots, gameInfo){ dCurve=n=>{ if(n==0){return "1 "} return dCurve(n-1).replace(/(.)(.)/g,"1$10$2") } [id,x,y]=myself; dir=0; if(gameInfo[0]==0){ dragon=dCurve(12); if(x<3*bots.length-x){ if(y<x){dir=0;} else if(3*b...

 
^ this kind of answer is the type I was hoping for
 
Had to modify it just now so that it would leave spaces instead of just filling the space
 
6:46 PM
0
A: Art Attack KoTH

fəˈnɛtɪkNearRandomGridBot function randomGrid(myself, grid, bots, gameInfo){ dir=0; for(i=0;i<3*bots.length;i++){ for(j=0;j<3*bots.length;j++){ dir=dir+grid[i][j]%3 } } return ["up","right","down","left"][dir]; } NearRandomGridBot uses the sum value mod 3 of all the colors on the...

 
7:01 PM
DragonBot errored: window.localStorage.getItem is not a function or its return value is not iterable (line 23 column 41)
I think it's breaking the engine.
 
@kenorb is that my controller?
 
Yes.
 
(... i have the ability to check that :p)
 
Also doesn't work on reference, so don't worry about it.
 
7:04 PM
@Alion ah okay phew
oh it's the classic gameInfo[0]==something that's not 1 error
 
I changed my code to not rely on that information anymore. Seems to cause to many mistakes.
 
I avoided using gameInfo[0] from the start because... gut instinct? I dunno.
 
I accidentally turn all my information into a single string :P
 
oh wait no its my controllers fault for being too good
my controller doesn't force stringify localStorage as it's not actually using localStorage and I just hoped all answers would stringify themselves :p
 
I set it up to actually use window.localStorage, which force stringified it because I tried to put a string and 2 integers into an array
 
7:14 PM
yeah, localStorage only stores strings
 
The dragon really needs to be a string though as there is a problem with 8000 digit integers in javascript
 
@fəˈnɛtɪk You could switch to saving the data in this which retains the data format, or into your function dragonCurve
@tomsmeding sadly that's still a proposal (but hey, it works in chrome so I'm happy)
 
TIL it's actually already implemented in chrome
I mean who needs that
besides crypto libs
 
7:29 PM
@fəˈnɛtɪk DragonBot doesn't seem to be doing much else than moving in a straight line :|
 
I think that might be an issue with gameInfo[0]
 
@fəˈnɛtɪk you're doing gameInfo[0]==1 which is true only on the 1st round, which I think is what you wanted to achieve
@fəˈnɛtɪk in dir=0&&y!=0 did you mean to do set dir to 0 or compare to 0?
 
Intended to compare. Fixing some errors right now
 
with that fixed (and localStorage removed) i gots dragon curve!
 
It looks to be fixed now when I run it. I edited my post
 
7:41 PM
you do window.localStorage.setItem("dragonStep",step); in the 1st round if, but no step has been set
changing that to 0 fixes it
 
It also doesn't seem to care because I then change things back to int by -0 and ""-0 = 0
 
@fəˈnɛtɪk but you're still erroring on the 1st round, stopping the game
FWIW here's Dragonbot without using localStorage (and actually working)
 
I have it working with betadecay's controller.
 
@fəˈnɛtɪk yeah, it's working on mine too
 
It draws a lot of squares
 
 
3 hours later…
11:02 PM
0
A: Art Attack KoTH

12Me21Really good bot function(myself,grid,bots,gameInfo){ return "stay"; }

 

« first day (7 days earlier)      last day (36 days later) »