From CG community
Jump to navigation Jump to search

LakenCodes: what up

Asterixk: wtf it's 6am now.

Asterixk: half an hour ago it was like 2am

Default avatar.png landerson6678: .join([])

Asterixk: o/ US crew is showing up

LakenCodes: US crew here

eulerscheZahl: did you switch timezones Asterixk?

izik1: \o

Asterixk: lol i did time travel by coffee

Zandy156: Sometimes I feel like I'd rather understand why my code doesn't work but not be able to fix it than fix it and still not understand why it was broken.

Blap: that's how life works

thibpat: Hello :wave: I'm live on to stream Ocean of Code progress! Yesterday we've made it to the Silver league (:

Asterixk: Does order matter in the commands you send in a turn? Can't find it src..

izik1: yep

izik1: Totally does

Asterixk: aright thx

izik1: torp where you are at the start of the turn and then move vs move and then torp will do different amounts of self damage

Asterixk: nice

Asterixk: so now i have to test the predicted outcome of different orderings... jeez

eulerscheZahl: also: you can have a cooldown of 1, charge the torpedo while moving and then shoot

izik1: ^

izik1: I personally think of every command as a move per command, because that's definitely how it seems to work internally

izik1: Like, Move, Torp, Surface, all in the same turn

Asterixk: interesting, And update cooldowns..

eulerscheZahl: the Like command?

eulerscheZahl: are you checking facebook with your bot?

izik1: lolno

izik1: I'm SoCal

Asterixk: XD

izik1: Like, I can hardly say a sentence without the word "like" in it

izik1: it's fairly difficult unless I'm thinking about it

AntiSquid: like you could maybe like i don't know, probably try something like avoiding doing it like about all the time?

eulerscheZahl: jeez, I don't know Rick

izik1: I mean, like, I could but like, it would be hard and like, I don't really care not to so like, whatever, right?

izik1: ` return ([self.offset_y as usize] >> 1) & 1 == 0;` That's quite the bug (should be >> self.offset_x)

eulerscheZahl: there is no code formatting in this chat

izik1: I know ;-;

eulerscheZahl: oh, kovi is back at the top

izik1: My tracker now officially handles everything but mines & myself

eulerscheZahl: mines are relevant for tracking

izik1: yeah

izik1: But I mean, I'm preobably _way_ past the point of diminishing returns lol, I still move like this:

kovi: morning euler. we need to wait for a resubmit

izik1: and I never charge anything but torps

eulerscheZahl: or you be happy and don't touch it

kovi: i want to be sure, if its luck or something got better

Zandy156: do mines relevant for tracking if they are never triggered?

izik1: I wouldn't think so

eulerscheZahl: and your movement needs improvement too izik1. but i guess that's on your list already

Csipcsirip: They could be... you can eliminate states where theres is no space to place mine

Csipcsirip: but it might be very rare

eulerscheZahl: too rare to be worth it i think

kovi: yeah

izik1: well, if you have time (heuristic bot ftw)

eulerscheZahl: but guessing mine locations can still help to avoid moving into them

izik1: my movement is literally "Can move right? move right. Can move left? Move left. Can move down? Move down. Can move up? Move up.

eulerscheZahl: can surface? surface

izik1: lol, that's just the default

izik1: I don't even attempt to move after surfacing

eulerscheZahl: yet you are in bronze

izik1: Due entirely to my tracker

izik1: yes

eulerscheZahl: shouldn't be too hard to reach silver, now that you have a tracker

izik1: Yeah, my rank gravitated to 147 bronze during my previous submit

izik1: although, resubmitting puts me back down in the dregs ;-;

izik1: Because I do better against the higher rank people lol

eulerscheZahl: i always gain some spots during the night

Zandy156: I mean my bot moves that way and is currently rank 84 bronze.

eulerscheZahl: not sure if i need more battles to stabilize or i play well vs submit spammers

izik1: Zandy: Yeah, but I bet you use more than Torps.

Zandy156: nope

izik1: :thinking:

izik1: I mean, I _was_ rank 147 or so

izik1: but like

izik1: I guess you probably torp better than me

Zandy156: I'm working on adding sonar right now.

izik1: mm

eulerscheZahl: same bot again kovi?

izik1: thread 'main' panicked at 'attempt to shift right with overflow' Thanks rust for saving me from myself ._.

eulerscheZahl: do you like the language so far?

izik1: I've been using it for quite the long time now (2017), but yeah totally

izik1: (well, long time relative to how long I've been programming)

eulerscheZahl: oh, i somehow thought you just started with it for this contest

izik1: lol

Zandy156: Oh I forgot. My bot charges silence and uses it on turn 6. That's why mine is slightly better.

izik1: see :p

eulerscheZahl: in my memory you are a C# coder

izik1: I'm basically an omniglot by this point

izik1: work does that to you

eulerscheZahl: not just poly but omni - wow!

kovi: seems it was just lucky rolls vs. wlesavo

eulerscheZahl: random is strong with this game

eulerscheZahl: the more sim-heavy, the more stable the ranking from my experience

izik1: lol, ranks decided to recalc right when I submitted, so my bot was at 268/269

AntiSquid: still very low participation count

AntiSquid: will it reach 2k at least?

izik1: I'd hope so ._.

izik1: Wonder what makes people not like this challenge all that much

AntiSquid: is it not obvious?

dbdr: izik1, yes! rust checking overflows in debug mode is very nice when it finds you a bug with no effort on your part :)

AntiSquid: i don't like it either izik1

izik1: `saturating_sub` is a godsend too

Asterixk: i find it challenging yes

dbdr: when do you use it?

dbdr: you speficially need that behaviour?

izik1: clamping mostly

Csipcsirip: and then you fix that overflow and your drank drops 10 places

izik1: lol

Csipcsirip: *rank

dbdr: right, but only at integer size boundaries

izik1: the overflow crashes my bot, so no

izik1: saturating sub lets you clamp to zero

izik1: for unsigned types

dbdr: ah, 0 - 1 = 0?

dbdr: yes, was thinking upwards

izik1: 0.saturating_sub(1) == 0 yes

dbdr: right

dbdr: oh, useful for lives in OOC :)

izik1: huh, didn't think of that

dr.ivan: folks, could you help me out - I am kinda new to this. do I submit my code to get promoted from the wood league? then some more rules show up and I can edit my code again, or what?

dbdr: if you want to store them unsigned

izik1: I store most things unsigned

izik1: heck, I store positions as a u8

izik1: that's both x and y

izik1: there's 2 extra values

dbdr: life.saturating_sub(damage)

izik1: yeah

dbdr: how do you do it?

izik1: I don't do anything that could cause them to have negative life

izik1: so I don't

izik1: wait

izik1: do I crash if they- hah

izik1: so

dbdr: :D

izik1: I do their life calculations _after_ I print my commands

izik1: so I print, then my bot crashes

izik1: but I still win

izik1: because they die

dbdr: lol

dbdr: that's dangerous

dbdr: you print on stderr?

dbdr: might work, but I would not trust it always will

izik1: I do tons of stderr work

dbdr: sure

izik1: I print every single cell of the map every turn :p

Asterixk: ole Bronze league

izik1: Hello everyone this is H to the usky Husky here, back with some more BRONZE LEAGUE HEROS

izik1: :p

AntiSquid: :o

Riyuk: Hi guys!

izik1: Hey!

Riyuk: Just lost one hour to understand that "|" should be escaped in the split function in Java --"

Riyuk: Wanted to complain about that here!

AntiSquid: well you will lose a lot more than an hour to understand a lot of other contest related info

izik1: tfw accidentally submit spamming

izik1: because I keep finding critical bugs

izik1: like, spawning, going right, and then going left because there's a wall to my right

izik1: because I didn't fill in the cell I spawned on

izik1: I actually _used_ to have that solved, but I finally started preventing myself from spawning in corners, so I deleted that line by accident

izik1: Wow, now that I've fixed that stuff I just shot through bronze ranks like they were nothing...

izik1: at 20 now, only 60% submitted

izik1: I might need to pull a tron

izik1: 'Cept not qujite

dbdr: what's pulling a tron izik1?

izik1: I have a tron bot

izik1: Space filling

izik1: Although, tron is a _lot_ more expensive

Tunga: Greetings my lords!

AntiSquid: tron costs 10 pounds more

izik1: lol

izik1: Also, my tron bot gets _worse_ if it has too much depth and I have no clue why

Default avatar.png anid: Who codes the bosses in ocean of code?

wlesavo: everyone and noone

Default avatar.png anid: whaat?

Illedan: anid, bosses are selected among the players on the leaderboard.

Default avatar.png anid: Ohhh, got it

Default avatar.png anid: thanks illedan

AntiSquid: level 30, no avatar?

blasterpoard: it's easy to get lvl 30 by submitting github bots like him

AntiSquid: so much commitment and still no avatar!

darkhorse64: 30K CP in 2 weeks. Looks like cheating

blasterpoard: I saw his kutulu bot, it's a copy of morozec's bot

blasterpoard: it prints "qwerty" after every yell...

darkhorse64: Just look at his progress curve. Registered 10th of March. Guru on the 26th. I have signaled him to CG

wlesavo: are there many bots that can be used without any modification? i thought most people cut there bots to some extent before posting them

wlesavo: their

darkhorse64: Github is a treasure trove

blasterpoard: wlesavo there are people who submit their bots to github without caring about the leaderboard, or they din't realize the repo is public

wlesavo: i see

Tunga: I dont even make one but an easy google search might reveal a top players bot

Tunga: He is right you know

Tunga: I am death for no reason, is this timeout ?

blasterpoard: Tunga replay?

emh: oh phew double checked that my repo is private. got worried for a bit

Tunga: Playing against bots, not submitted the bot

blasterpoard: you can still share it

blasterpoard: even from IDE

emh: from IDE? oh noes!? panic attacks need to hire someone to double check my every click

emh: well I guess a CTRL+V with focus on chat instead of code window is all it takes

blasterpoard: emh I meant the reaply

blasterpoard: *replay

emh: ah ok hehe

emh: oh sideways snow

emh: in April

Tunga: Thanks for the help offer, I solved

Tunga: It is a silly mistake :D

Tunga: It is interesting that even in wood 1 league boss hits you directly

Tunga: Wow

Tunga: When I fire, I reveal the firing position to enemy

blasterpoard: to get out of wood, you need to track the opponent and shoot only when you're reasonably sure you'll hit

Tunga: I ll submit this random fire strat

blasterpoard: (at least, that's what was required before the boss nerf)

Tunga: I think this strat will outsmart players here

Tunga: Here we go!

Tunga: Boss won 3-1 against me

Tunga: I still wonder what this code does against players

Tunga: Looolll I won a lot just with a simple pathing and random torpedo fires

izik1: Huh, thanks game

izik1: gave me silver for no good reason

Tunga: One guy really track me down shot me 3 times

Tunga: Siman submitted the code and #1 now

struct: Damn 3 multies pending on contribution page

AntiSquid: gotta play 'em all

AntiSquid: total bot war looks nice :D

AntiSquid: cute graphics

Default avatar.png PsyStorm: How can you track where the opponent? There is so much combination. Plus with the silence

Default avatar.png PsyStorm: How can you track where the opponent is? There is so much combination. Plus with the silence

AntiSquid: write that again for a special prize

Default avatar.png PsyStorm: x0

Default avatar.png PsyStorm: I tought I could edit, but it reposted

AntiSquid: no edits, anything you send will be seen and can't be unseen

Default avatar.png PsyStorm: I see that..

darkhorse64: Worse, it is now recorded and searchable

Default avatar.png PsyStorm: :scream:

AntiSquid: someone doing rounds with a motorbike outside, lol what happened to the lockdown?

Default avatar.png yfprojects: @darkhorse where do I find that?

Tunga: Tracking enemy and navigating to it is a real issue


AntiSquid: darkhorse so can you view it there?

wlesavo: tracking chat messages

Tunga: There is a hidden player in the wiki's ranking who is #1 and in front of euler

Tunga: I am aware of that, thanks wlesavo

darkhorse64: It's a bit experimental. I don't last week chat logs

AntiSquid: last entry 25th of March

Tunga: The issue is to get a guessing strategy

darkhorse64: *see*

Tunga: I thought it is not a real ranking it seems

AntiSquid: so it's not automatically updated to filter swear words?

darkhorse64: Ask dbdr for details

dbdr: what's the question?

Tunga: These guys are online 7/24, is it because of lockdown or codinggame staff working 7/24 :scream:

darkhorse64: No sleep til Legend, that's the rule of contests

Tunga: Then, I wont sleep for 17 days

Tunga: I cant be legend so here comes the insomnia :D

AntiSquid: actually i work from home Tunga

AntiSquid: during lockdown anyway

AntiSquid: dbdr question was why last entry on chat log wiki is 25th of May, is it because you filter out swearing or random spam or whatever?

Tunga: They gave me day off, you know the economic sucks, automotive industry going down too and now covid :scream:

AntiSquid: i see i didn't respond to some questions in chat, going offline too quick in those chat logs :D

Tunga: I am playing with bots instead working

dbdr: AntiSquid, no, it's because I didn't automate that part yet

dbdr: and I did not do it manually

dbdr: yet

Tunga: Bots output is same with submit ?

AntiSquid: during submit they get +10 sentience bonus actually

Tunga: I dont get it

AntiSquid: no wonder humanity is doomed

Tunga: :scream:

Tunga: :broken_heart:

emh: I ported my BFS to python3. it is about 10 times slower than C++

emh: using numpy

Tunga: I heard that numpy works very faster than usuals but never tried

Tunga: Oh lol

Tunga: emh do you time outed because of search ?

emh: I haven't submitted in a long time

emh: but I had timeout protection in my C#

emh: I guess it didn't time out that often

emh: but didn't use this special BFS either

emh: getting around 120k BFS in 50ms in python3. while 1 million in C++. in C# I used a garden variety BFS which was slow

Tunga: C# is slow you know

emh: not thaat slow

emh: but okay C++ is faster

Tunga: You maybe cut the search in somewhere for python and use the best case available

Tunga: For not to get t/o 'ed

Tunga: Meanwhile I am trying to invent wheel

Tunga: Not using regular algorithms but trying to figure out something :D

emh: oh I am not going to use python3 for this contest

emh: just wondered how much slower the BFS was

emh: because someone asked in the chat a few days ago

Tunga: I dont know c++ and I am using python because of that

Tunga: It is good to do some experiment ofc

Uljahn: emh: wow great, i'd like to learn from your bfs numpy code if you don't mind to share (maybe after the contest)

wlesavo: also would be interested

wlesavo: although my bottle neck now is damage map calculation

emh: Uljahn wlesavo ok :) I just have to debug it a bit and check that it is correct

Tunga: Silence jump can be done on the island's and traversed waters ?

wlesavo: can even smitsiport you anywhere

Csipcsirip: smitsiport?

ToshiTuringMachine: no tunga

kovi: damage map?

Tunga: Is the jump counted as the water as visited

Tunga: We traverse on thee

wlesavo: well i estimate average damage in each cell

kovi: to assess long term path?

wlesavo: to try to minimize damage from mines, yes

kovi: (i only assess nearby cells atm)

kovi: nice

kovi: that would be costly for sure

kovi: espec. for python

wlesavo: well it is, yes, still timeout sometimes, especially against mchl12, i think he is doing something clever with mine planting, but not sure

Tunga: I watch wlesavo 's replays and I love how he accurately knows the other players location and hit with torpido, awesome :D

wlesavo: i guess tracking and torpedos handling is pretty much the same across many top players, mostly silence mines and moves that makes the difference

emh: that's the python3 BFS code. it's a bit ugly because I'm not expert with numpy just googled it and hacked it together. I'm going to optimize it a bit further and make it look neater

Csipcsirip: dou you have anything public like that in c ++ ? :p

Illedan: He is already strong enough emh :P

emh: Csipcsirip nope but you can port it easily :p

AntiSquid: execute python in your c++ code /s

AntiSquid: wlesavo do you have a NN ? or is that a real algo ?

wlesavo: thats a generous assumption :slight_smile: no just some simple estimations, with hardcoded limits

ZarthaxX: i guess not even a search as it's python

AntiSquid: banning ZarthaxX @_@ i still like python

wlesavo: basically i looked at the values of the parameters i got at some boardstates, and figured out the limits i needed

ZarthaxX: wasn't saying python is bad lol

Csipcsirip: HerrHagner's bot is a good opponent to test your tracking performance

Csipcsirip: I timeout like every time against him

AntiSquid: need to be cautious, it's too risky to keep you unbanned ZarthaxX

ZarthaxX: lol

ZarthaxX: i will try

wlesavo: Csipcsirip i think he only does silence 1, with same results you can take the illedan test bot if you want to test agains spam silence

Csipcsirip: okay, thx

wlesavo: it does not spend time charging anything else :slight_smile:

Csipcsirip: hm for some reason he doesn't make me timeout

wlesavo: do you account for mines?

Csipcsirip: yes I track mines too

wlesavo: well, im probably wrong then and illedan is not the bot to test against :slight_smile: mine tracking could also be costly

Illedan: Manually add mines to my output :D

tempux: Guys do use sets or bitmasks for keeping the visited cells?

tempux: do you use*

Csipcsirip: I use std::bitset

Illedan: HashSet of Position

Illedan: I'll move to bitmap when needing perf

Zpooks: Im not really into any of this, but does this mean using a matrix to map cell info will become too costly eventually?

struct: if py3 is 1st you should not worry about performance

Illedan: Depends on what you need to do. Don't optimize unless you need it

Zpooks: I was more asking because im curious, my day to day work doesnt really use any knowledge in performance or calculations.

Zpooks: So its quite intimidating reading some of the discussions here haha

Zpooks: Thanks for the answer =)

wlesavo: struct i have some perfomance issues, probably could be better if optimized

Csipcsirip: yes you use use 1d arrays when performance matters. 2d arrays are slower

struct: Sure wlesavo, but python would never match c++ performance

ZarthaxX: Csipcsirip have you proven that

AntiSquid: ^

tempux: What about keeping the possible paths of opponent? I am currently using a tree structure. But I have performance issue when trying to find mines

Csipcsirip: I just use array of possible states

tempux: so not the path?

tempux: only the end position?

Csipcsirip: state includes path, mine position, hp, cds

AntiSquid: euler jumped high

tempux: doesn't it get very big? sometimes the number of states exceeds 3000 in my code

struct: it can be above 20k

darkhorse64: CG allows several hundreds of Mo for your process

Csipcsirip: I drop paths when I reach 1k and keep only 1 of same states

tempux: :thumbsup:

Nagatwin: Csipcsirip do you have an hard-coded mine limit and store it into an array ?

tempux: me too

Csipcsirip: I dont drop any info about mines

2571540: Aw

tempux: do you consider surfacing instead of going into cells that have high mine probability?

eulerscheZahl: yes

eulerscheZahl: oh wasn't asked but well...

Csipcsirip: yes py path search algo gives a penalty to stay on cells with high mine damage probability

Csipcsirip: *my

tempux: I kinda get stuck in local minimums where I have to surface multiple times and die

tempux: probably should consider using silence to jump over mines

Csipcsirip: ahh no I misread it. I dont consider surface yet

wlesavo: i do, but it started to work reasonably well only when my damage estimation improved

tempux: so your movement strategy depends on damage estimation?

wlesavo: sure

2571540: Csipcsirip don't you include the end positions for a path? Recomputing may be expensive

Csipcsirip: oh yes I do, a

tempux: how many step ahead do you calculate?

wlesavo: around 15

tempux: :thumbsup:

wlesavo: with some simple greedy algo

Csipcsirip: I start with 19 in the 1st round. It goes over 50 when the space is limited

tempux: your implementations should be very efficient since you are using python too

tempux: I am getting timeout on 5 step ahead

tempux: I will try to keep the path as a bitset instead of a tree and traverse it everytime.

AntiSquid: how do i increase timeout limit in local game, or rather where?

2571540: You mean in the referee?

AntiSquid: ya when i run locally @_@

AntiSquid: found i think gameManager.setTurnMaxTime(50);

eulerscheZahl: what do you search for? just pane filling? mine avoidance? opponent detection?

ZarthaxX: lol

AntiSquid: me? everything, wanna see how slow the bot really is if it wants to detect everything

struct: im not sure you can increae the time further AntiSquid

struct: If you do it will have less turns

struct: max time per game is 30 sec

tempux: I am trying to maximize (my damage expectation - opp damage expectation)

tempux: and try not to make the grid disconnected

tempux: for now

eulerscheZahl: keep pushing me kovi

AntiSquid: top 2 seem to be far ahead

wlesavo: 38.99 :slight_smile:

AntiSquid: is it from submit spam ?

kovi: top2 beats me hard, but last run vs. euler i had 80%

wlesavo: got pushed quite a bit yeah

eulerscheZahl: that means i win something :)

AntiSquid: struct how much will that reduce the total turns?

wlesavo: but its back to normal i guess

eulerscheZahl: oh, nevermind

eulerscheZahl: pb killin me now

struct: How much are you gonna increase it by?

AntiSquid: one sec, let me see how much i need :p

struct: 100 ms = 300 turns max

wlesavo: eulerscheZahl same here, the only below 50 winrate

wlesavo: we just got our pandemic restrictions prolongated to the start of may

Uljahn: same here

AntiSquid: hm i time out but doesn't say why struct

pb4: any idea why I fare better against you ? maybe I'm so bad with mines your avoidance isn't useful ? :D

wlesavo: :grinning:

pb4: -_-

pb4: I swear when I watch my bot it's attracted to mines

kovi: :)

emh: wlesavo did you get anything from my numpy BFS? made another version here: not much different but less temporary arrays and more imperative style

wlesavo: emh thx, will look into that in the evening

Default avatar.png yfprojects: Do you use CG Enhancer?

tempux: @emh is there a specific reason to use numpy?

emh: tempux speed ofc

emh: but only if you need it. I just made it for fun to compare speed with C++

tempux: :thumbsup:

Uljahn: emh: thanks

Kanagawa1210: Hello guys! I'm watching a socket tuto with python

Kanagawa1210: does anyone understand

Kanagawa1210: what does this mean

Default avatar.png yfprojects: What does what mean?

Kanagawa1210: print(f'{len(msg):<{HEADERSIZE}}')

Kanagawa1210: HEADERSIZE here is equal to 10

Kanagawa1210: what I don't understand is the sign :<

Uljahn: google f-strings

Uljahn: it's a sign for formatting i guess

Kanagawa1210: I did google f-string

Kanagawa1210: but i didn't find the sign

Nan001: :X:X:X:

RoboStac: it's for justification - < is left justify, > is right justify. The number ({HEADERSIZE}) is a minimum length


Default avatar.png yfprojects: So it works similar .format

Uljahn: ye, Format Specification Mini-Language

darkhorse64: emh: what's do your stats mean ?

darkhorse64: *what*

emh: darkhorse64 the printout from my code?

darkhorse64: yes

emh: iterations the number of BFS iterations. it does 2 per call. you can separate them if you want. time is milliseconds for BFS on 120000 grids. the last number is BFSes per 50ms

Uljahn: cool

darkhorse64: OK. Got 65K. Did not imagine you could do bitboarding with Python. My target is more C++. This is just for the sake of curiosity as I don't think I'll need it for this multi. May be for XR or STC

darkhorse64: Thanks anyway

eulerscheZahl: at a certain point STC isn't about sim count anymore, but a good scoring

darkhorse64: I have reached legend by improving scoring. I may get higher with a combination of brute force for the first turns and stochastic search for the rest. It's low on my list. Right now, it's reaching #100 for Gold tomorrow

eulerscheZahl: and then it's legend next week

darkhorse64: For the moment, it looks like a desperate cause. I have a good tracker. At least, it matches your results but my motion sucks: it's a space filling algo from Tron and I have no idea how to improve. Let's first improve shooting

eulerscheZahl: you are using my debug messages to verify your tracker?

darkhorse64: Yes

darkhorse64: Actually your MSG

Default avatar.png zemzgui: hi

tempux: Oh you can use the mine command to eliminate some possible places

tempux: I just realized :grinning:

MSmits: huh?

darkhorse64: I think tempux talks about the trigger command issued by an opponent

MSmits: ah yes

tempux: not the trigger

tempux: the mine but is highly unlikely

MSmits: please explain

tempux: The rare case where all of the neighbors were mined before

tempux: It is not that useful the more I think about it

tempux: :grinning:

MSmits: well you record the position from which an opponent places a mine

MSmits: he would have had to place a mine from that position 4 times

MSmits: which means he would need to surface 3 times

MSmits: that doesnt happen

wlesavo: not exactly form the same position

MSmits: of course he would

tempux: sometimes he doesnt have four options

MSmits: you track location states

MSmits: ah well then you must be tracking mines differently

tempux: he is sorrounded by islands

wlesavo: it is possible to plant quite dense, but yeah, not really a possibility

MSmits: they way i track it isnt at all

tempux: It is not that useful

MSmits: I dont track mines, i track places from which a mine was laid

darkhorse64: Not something that wins 50 places

wlesavo: MSmits how you remove exploded ones then?

eulerscheZahl: avoiding mine fields is important

MSmits: I check if any of the 4 neighbors had a mine laid from them, i subtract 1 from the count if that is so

darkhorse64: If a mine triggers and it can only be from a given location, you prune. Is that really effective ?

MSmits: if there are multiple options, i split the state

MSmits: if no neighbor has a count > 0 the entire state is pruned


MSmits: it's an infallible method

INORI: Hi , i want an advice? (serious one)

eulerscheZahl: pruning by earlier mine placements on trigger helps

MSmits: yeah it definitely does

MSmits: do you still reset on surface eulerscheZahl

AntiSquid: Automaton2000 gives serious advice if you just ask

wlesavo: MSmits regardles the time bomb was placed? that seems not very effective

Automaton2000: i have a problem with the way i did it in a while

eulerscheZahl: i think so

INORI: I am working so hard in mycompany , but it doesnt pay me enough

MSmits: wlesavo it is not regardless of time. The time is part of the path

MSmits: actually let me explain it different

MSmits: ly

INORI: and i think in my country the competetion is like tough

wlesavo: oh, ok, undersstanded you wrong then, so basically same stuff im doing

MSmits: each position state has a single position and a path. You note down the mine placement at the current position

INORI: companies just take us for granted

MSmits: that position might be wrong

MSmits: but that will lead to later pruning

INORI: oh sorry . i think im interrupting some conversation

MSmits: nah

INORI: carry on

MSmits: it's ok

MSmits: if noone can interrupt me, this chat would be full of MSmits

MSmits: like it sometimes is


wlesavo: MSmits yeah, i got it, we basically doing the same

INORI: so in meantimes if anyone want to answer me , pls let me know

MSmits: kk wlesavo

MSmits: i still have a bug in mine

MSmits: not sure where it is, hope I find it today, then i can move on to some actual game logic

2571540: Do you have any particular advice for uning bitsets in c++?

MSmits: personally I feel you shouldn't. Just use bitboards

2571540: My code with bitsets is way slower than the one using uint64_t

MSmits: yeah i expected that

2571540: Bit board? Bool[size]?

MSmits: no, I do this:

MSmits: uint16_t[15] for position maps

2571540: Same

MSmits: uint32_t[15] for mine maps

MSmits: uint64_t[15] for damage map

2571540: Damage map?

MSmits: yeah to filter out damaged cells

MSmits: if a cell has been damaged and the opponent hasnt, he cant have been there

MSmits: but it works for every number ofc

MSmits: 1 dmg, 2 dmg 3 dmg etc

2571540: Oh yeah I have a different approach for this one

MSmits: my uint64_t map can do 4 bit per damaged cell

MSmits: so max 15 dmg

2571540: I just keep trach on each path how much damage has been dealt, duplicating the paths for each torpedo or trigger and pruning at the end of the turns

MSmits: how do you store your path?

KarlTaal: Hi! I am new in here and I am wondering what should be the logic behind force-field in coders strike back? What should i do with it?

2571540: Bitboard

MSmits: ah ok

tempux: guys do use any special algorithms for space filling?

2571540: Thanks for the feedback on bit board

MSmits: np, you're doing it right, it seems

Csipcsirip: beamsearch

tempux: currently I only try to avoid going into articulation nodes

MSmits: KarlTaal it is hard to use logic for that. Once you get to a certain point, the only way to improve is a full simulation

MSmits: and search

2571540: Dfs randomized + pattern replacement

2571540: Because I had everything coded already :')

tempux: :thumbsup:

KiwiTae: o/

eulerscheZahl: BFS to take the biggest component when i screwed up already and have to decide :D

tempux: oh yeah when it is disconnected you go to the bigger component. I do it too.

KarlTaal: Where is the point I should start using simulation rather than hard coded instructions? Right now I quickly reached to bronze but got stuck here now...

eulerscheZahl: and that's all i do regarding the longest path

eulerscheZahl: as there are aspects way more important than path size

tempux: but it conflicts with mine avoidance :D

eulerscheZahl: do you track your opponent based on the actions KarlTaal?

Nagatwin: MSmits how do you find which position corresponds to each mine with your representation ?

KarlTaal: no i dont, what do you mean by tracking :D?

Default avatar.png Sneffy: KarlTaal Once you get gold you'll have full input so you could start sim here

dbdr: full input in OOC gold? :D

dbdr: that would be a surprise

KarlTaal: Okay I know how to track the opponent, but what should I do with the information about other pod? I just can't think of any good logic that I could implement.

Nagatwin: I think they are talking about CSB

Glenn: Torpedo the squares that your opponent is on

MSmits: Nagatwin you don't. you only know from where they were laid

MSmits: if a mine explodes, you just check if a mine was laid from one of the neighbouring cells

MSmits: if that isn't the cas,e then the state is faulty

MSmits: if there are multiple options, then you must split the state into x options

Glenn: @KarlTaal, you can use that information to target your torpedos, move toward or away depending on your strategy etc.

Nagatwin: So you do not invalidate positions when a mine explodes

MSmits: I do

Nagatwin: Hm

MSmits: if there is no neighbor that has a mine laid from it

Nagatwin: My point of view was :

MSmits: then it couldnt have exploded there now could it?

Valdemar: mine explosion can cause position increase then?

Nagatwin: for each end_point, check if it could have placed a mine here, if not, remove it

Glenn: @Nagatwin Depending on how much life you or your opponent lost (0,1,2) you can determine whether a mine was 2+, 1, or 0 tiles away from that sub respectively.

Nagatwin: Glenn yes

MSmits: Valdemar it usually causes position reduction

AntiSquid: how can trigger cause an increase in positions? lol

MSmits: Nagatwin I think so yes

KarlTaal: Target my torpedos? Haha, we must be talking about different things. I am talking about coders strike back, racing, bronze league

Glenn: @KarlTaal. Yeah, we are sorry. lol

MSmits: AntiSquid if every possible state has laid a mine next to that position and some had multiple

AntiSquid: KarlTaal there's a contest going on most people will automatically think about that

Nagatwin: Trigger may increase paths but will reduce positions

MSmits: depends on your state representation

Nagatwin: Depending if you split the path at trigger or mine

KarlTaal: Oh okay, I'm doing the coders strike back as an internship test :D

MSmits: ah

MSmits: make sure you reset your code when you get to the next wood league

Glenn: @Nagatwin Maybe, but it would be difficult to increase paths because you or your opponent would have to be close enough to the triggered mine to know which one exploded.

AntiSquid: quite sure trigger will reduce paths / positions . otherwise i wonder how you manage your paths @_@

MSmits: copy the code out, reset the code in the ide, and compare the input

MSmits: the input changes

MSmits: AntiSquid thats if you only look at the damage from explosions

Nagatwin: Glenn if you keep track of who placed a mine when, you don't have to be close

Valdemar: Glenn you can keep all possible paths

MSmits: we also filter to see if a mine could have been laid at that position

MSmits: sometimes there is more than one possibility

MSmits: and you need to split the state

Glenn: I think that's true as long as you have your opponent's position down to a single possibility. Which is the case mid/late match

Valdemar: didn't think about that, interesting

Glenn: Early on, you'd have some uncertainty about where they laid the mines though right?

MSmits: you'd have uncertainty late game also

MSmits: you'll only know when they blow

Glenn: If they use Silence well, yeah

MSmits: there are multiple paths to the same destination

Nagatwin: Im puzzled on whether your representation is better than mine. I feel like you loose some potential position filtering

MSmits: because of silence yes

MSmits: I dont see why Nagatwin

Glenn: If you're using all your abilities though, you won't use Silence frequently enough to stop your opponent deducing your position if the game goes long enough

MSmits: every game and opponent is different glenn... hard to say

MSmits: depends on the meta

Nagatwin: MSmits because I use the trigger information to filter end position for the paths

MSmits: I do also

Glenn: It's pretty rare that I don't have my opponent's position possibilities <5 by turn 50 or so.

MSmits: i prune states based on trigger

MSmits: but there are two different things

Nagatwin: does a state have several end positions ?

MSmits: -if a mine couldnt have been there, the state is pruned

Glenn: ^

MSmits: -if a mine could have been in more than 1 position from that state, the state is split

MSmits: that second thingy is rare

Glenn: ^

Glenn: Yeah, I think we're basically saying the same thing. You're just saying it better. lol

AntiSquid: automaton2000's balls were pruned

AntiSquid: ^

Automaton2000: only for the first time i see that

Nagatwin: yeah it happens when mines are placed diagonally

MSmits: Nagatwin do you store the mine location, or the place from which the mine was laid?

Nagatwin: the delta of position from the current location

MSmits: yes but is it the location of the mine

Nagatwin: Nah

MSmits: or the location of where the sub was when it placed the mine

Nagatwin: the delta of the position when the sub placed that mine compared to its actual position

MSmits: allright

MSmits: then you should have the same kind of pruning that i do

Nagatwin: because I check for every end-point of my path if it could have laid a mine there, and remove ones that could not

MSmits: I do also

Nagatwin: and if no end-point is left, therefore no mine could have been palced here

Nagatwin: so i can prune the whole path

MSmits: right, so we have the same kind of pruning

Nagatwin: Can't figure out how youdo the checking for the endpoints without the deltas

MSmits: I have a mine map

MSmits: it's a bitboard

MSmits: who needs deltas

ZarthaxX: for each state right

MSmits: yep

ZarthaxX: you said you had a counter tho?

MSmits: i do

MSmits: 1,2,3

MSmits: cant lay 4 mines from one position in my representation

ZarthaxX: right

MSmits: so i assume a player wont go 4 times to the same position by surfacing 3 times and laying a mine each time

ZarthaxX: but i was thinking , if a trigger happens around the marked cell

ZarthaxX: ah...

ZarthaxX: it's because the enemy can pass by the same cell many times

ZarthaxX: u gotta stack

MSmits: yes, but he has to surface first

ZarthaxX: well laid the mine

MSmits: otherwise he cant lay from there again

ZarthaxX: not pass by

ZarthaxX: lay*

ZarthaxX: yes

ZarthaxX: so the custom bitboard is faster than bitset

MSmits: I think it always is

MSmits: if you do it right

ZarthaxX: std is bad here mhm

ZarthaxX: okey

MSmits: but custom bitboard is inconvenient sometimes

ZarthaxX: 2 bits per cell

MSmits: for mines

ZarthaxX: yes

MSmits: 4 for damage, 1 for position

struct: ZarthaxX even with -O3 enabled is slower

Nagatwin: How do you fill up your mine map, because you have no idea of the exact player position at that time ?

struct: so is not CG fault

MSmits: Each state is a position state, there is only one current positions and all mines are relative to it, kind of like your deltas

MSmits: I used to have multiple possible origins, had to switch to what everyone else uses because of mines

Nagatwin: hm

wlesavo: MSmits i guess i didnt face nagra yet :smiley:

wlesavo: you*

MSmits: i still have a bug though

struct: wlesavo how well do you do on this map? seed=-1425933


MSmits: without laying mines

ZarthaxX: thanks for that info struct

struct: you said std is bad here

struct: I thought you mentioned CG

Nagatwin: ah alright

Nagatwin: what's the uint16_t for then ?

MSmits: path

MSmits: visited cells

Nagatwin: oh yeah

wlesavo: struct depends on the enemy i guess

Nagatwin: alright so you begin with 225 paths (minus islands)

MSmits: anyway, i have to go give my family some attention, been at work all day

wlesavo: not very good in general

MSmits: yes i do now Nagatwin

Nagatwin: :o

MSmits: i didnt at first

struct: Probably no bot will do well there

MSmits: ttyl!

ZarthaxX: struct well in CG

ZarthaxX: cya MSmits

Default avatar.png Sneffy: Hey, did someones used Brutaltester with CSB referee ?

SavinVadim: going live in 5 minutes, see you there guys

Norange: is anybody here a C++ programmer?

darkhorse64: The chat is chock full of programmers for all langages

tobk: too lazy to write code to try it myself: what exactly happens if you MOVE and SILENCE in the same turn? had an opponent doing this (on purpose or by accident) and it seemed to move but ignore the silence-move, is that correct?

struct: no

struct: you move

struct: then silence

struct: maybe enemy did SILENCE dir 0

struct: and stays in same place

tobk: hm, I thought it was some value > 0, but maybe I'll just try myself. thanks!

kovi: #1 again ;)

wlesavo: for a sec =)

eulerscheZahl: #3 \o/

Illedan: #455 \o/

kovi: when both you and siman in submit

kovi: blasterpoard almost top10

Csipcsirip: this game is so random I can end up anywhere between rank 10 and 40 with the same code...

blasterpoard: kovi shh

wlesavo: i just improved my damage map calculation, so it is much faster now wich allowed me to have more time on search

eulerscheZahl: blasterpoard will climb a lot more i think doing one part of the bot after another instead of rushing for ranks like me

blasterpoard: I still ignore opponents' mines and I don't go for kills...

eulerscheZahl: that's what i meant

blasterpoard: and I crash

eulerscheZahl: avoiding mines is what got me from rank 30 to top10

eulerscheZahl: not crashing helped a lot as well :D

tobk: I've heard good things about not crashing, too.

wlesavo: had a crushing bot on #1 :smiley:

struct: wlesavo new version_

struct: oh chat scroll

eulerscheZahl: crushing is much better than crashing for sure

wlesavo: struct had some timeouts in previous version, so had to do smth with it

blasterpoard: I put a bit of tape over the code that made the bot crash... maybe the result will be a rank or 2 better

dbdr: I read "will be rank 2 or better" :D

pb4: "eulerscheZahl 19H11 avoiding mines is what got me from rank 30 to top10" -> let me test without my """"avoidance""""

blasterpoard: maybe if it stops suiciding into the mines ^^

wlesavo: dbdr same :slight_smile:

eulerscheZahl: my avoidance still needs improvement too

eulerscheZahl: 1 turn lookahead is too little to avoid effectively

dbdr: 4 of the top 10 are in sub

eulerscheZahl: make that 5

Csipcsirip: submit spammers -_-

pb4: make that 6

dbdr: let's make that 10

pb4: damnit I nearly didn't count as top 10 -_-

eulerscheZahl: let's do our own final recalc

wlesavo: it is not spamming if the code have changed :wink:

Default avatar.png lNitsua: lmao did nothing but fix a bug resulting in a very rare failed move and got dropped from rank 3 to rank 90

dbdr: gz ValGrowth

ValGrowth: thanks

Default avatar.png lNitsua:

Default avatar.png lNitsua: wow, didn't realize I typed a whole book

Default avatar.png lNitsua: tl;dr, how do I learn to program the bot to make good decisions

wlesavo: thats a wide question

Default avatar.png lNitsua: The only way I was ever able to implement was in the card game, and it brute force tried every card on every other card and checked to see which series of cards was best

Default avatar.png lNitsua: that ended up timing out a lot, and on ocean of code there's too many options

Default avatar.png lNitsua: so, what do I learn from here

Tunga: You need to determine a pattern here

Tunga: It is hard to do actually (I am also new here btw, not a bot expert)

icecream17: Think of an idea that will make the bot better in a certain case.

pb4: sooooo.... I'm not much worse if I disable the mine avoidance code -_-

wlesavo: pb4 this version does not rekt me that hard

wlesavo: or it is some luck

pb4: Only one way to know :o)

wlesavo: resub? :slight_smile:

pb4: hehe

kovi: stop resubmitting, i want to know where am i with mine avoidance ;)

wlesavo: stoped for now

kovi: interestingly mine avoidance did 25% vs. nagra :)

struct: Who was that on last contest

struct: was always resubmiting_

struct: the submit ended, it was insta submit again

wlesavo: kovi some crushing to fix

eulerscheZahl: siman in ice and fire struct

eulerscheZahl: i don't remember anyone for UTG

Quidome: How many players are promoting to gold?

Quidome: End of the week?

eulerscheZahl: 100? 200? we don't know

kovi: wlesavo - ouch that shoudlnt happen

Quidome: How is that decided?

eulerscheZahl: wlesavo there's a difference between crashing and crushing ;)

eulerscheZahl: CG decides who the boss is

wlesavo: eulerscheZahl lol didnt thought of that one

Quidome: Hm, interesting. Is for the last step to legend te same amount roughly?

wlesavo: i guess i crushed it :smiley:


kovi: oh, even crash....i just looked at the floodfill bug (chosing wrong side)

wlesavo: eulerscheZahl :smile:

wlesavo: timecrushers

Astrobytes: lol, Wil Wheaton appearing at the end :D

Zhmyh: Can we place a mine/shoot on the island?

struct: No

Zhmyh: ty

wlesavo: what did the islands do to you

dbdr: fdbdr

eulerscheZahl: are you floating?

dbdr: a Ctrl was missing

dbdr: I got pinged and was looking for it

tobk: hm, both game and description say "cant visit same location twice, using surface", but instead it seems to be instand-death?

eulerscheZahl: right, otherwise it would be dbdrf

tobk: yes, makes sense, but IMHO description and game output should be clearer/updated then

dbdr: dbdrf32 in rust ;)

dbdr: or f64

tobk: Description also says "If you fail to output a valid action, you will SURFACE in that turn. " but that's timeout (insta-death) as usual, too

struct: its not insta death

struct: you surface

struct: if you dont output a valid action

struct: if you dont output anything at all it is considered a timeout

tobk: then that's the difference?

struct: it mentions output

tobk: if I print "GNARF" it's also an error nad insta-death, if I output nothing it's timeout, if I revisit a visited position the game says that I'm surfacing, but it's insta-death, too (had 6 HP then)

struct: GNARF is not insta death

struct: Unless it is in placement phase

tobk: maybe it changed, but I just tried

struct: You are right

struct: It changed

struct: it worked before I think

tobk: I would really LOVE if all games with "abnormal" endings (timeout, invalid command, etc.) were somehow marked in the "last battles" view...

eulerscheZahl: the CG API doesn't allow to search for them, unless you download every single one of your last battles :(

Zenoscave: tobk do you use linux? I have a script for it

Zenoscave: Still working on making it more user friendly but you can see games where you get a -1 score at least

eulerscheZahl: there's a silent agreement not to share these scripts not to stress servers

eulerscheZahl: if you want it, code it on your own

Zenoscave: oh sorry did not know that

Zenoscave: thanks

**eulerscheZahl has such a script too

eulerscheZahl: with some features for certain games like draft analysis for locam

Default avatar.png yfprojects: What if CG Enhancer would add this function? Or isnt that possible this easily?

eulerscheZahl: not possible without spamming requests

eulerscheZahl: like downloading 100MB when opening your last battles

Zenoscave: I am not sure about that. doesn't it modify colors of battles you won/lost alreaady?

Zenoscave: or is that only on position of rank not score

eulerscheZahl: yeah, you can filter for losses

eulerscheZahl: still a lot of matches

struct: Is this on TODO list for CG?

eulerscheZahl: it's on requested features for a while

eulerscheZahl: longer than i'm here

struct: oh ok

Astrobytes: Requested features must need it's own DB by now lol

eulerscheZahl: good start :o

eulerscheZahl: aaand it's dumb

ZarthaxX: LOL

Zenoscave: new submit?

eulerscheZahl: with bugfix

eulerscheZahl: check my charge at 201

eulerscheZahl: load fully loaded torpedo, then use it

Astrobytes: Must be doing something right since it's 3rd :D

Default avatar.png Ravi1269: is there a playground where i can test any code

struct: yes




Zenoscave: oops

eulerscheZahl: (╯°□°)╯︵ ┻━┻

Default avatar.png Ravi1269: alright thanks

Zenoscave: gz euler nice submit

emh: oh my I haven't submitted since "Last Friday at 18:16". was that just after Silver opened I guess?

emh: I guess I'll wait until Gold now

struct: :first_place:

ZarthaxX: doing good toad

ZarthaxX: top3 acheivement?

eulerscheZahl: don't celebrate too early

eulerscheZahl: not even half of the contest is over

Zenoscave: emh nothing since silver opoen really!?

Astrobytes: Looking promising though

emh: just busy with BFS hehe

Zenoscave: fair

Astrobytes: How many iterations did you get finally emh?

struct: performance is a trap

emh: Astrobytes 1.5 million on one server

Astrobytes: Niiiice!

Astrobytes: gj

emh: thx.. and that's using 64 bit registers mostly. there's potential for doing 4 in parallell using AVX2. for up to 6 million I guess. but I haven't gotten around to it

Astrobytes: Post-contest project ;)

struct: It will be a bit lower than 6 mill

emh: yes most likely

Zenoscave: amdahl's law right?

emh: I'm not sure all instructions have 256 bit extensions. and perhaps they take more cycles. different pipelining. different caching and so on

dbdr: nice eulerscheZahl

eulerscheZahl: thanks

eulerscheZahl: dropped a bit at the end but still much better than i expected

Astrobytes: Was a solid submit.

Valdemar: has anyone run game locally using brutaltester? I've managed to patch run it with referee, and referee seems to work, but match results is not counted, always 0.00%

eulerscheZahl: there's a fork from Zenoscave

Zenoscave: ;)


Zenoscave: there's a few local changes needed I found some bugs in my PR

Valdemar: yeah, I use code from there

eulerscheZahl: he made a pull request but i'm not sure if i want to merge it the official repo is about the game, not about automating it with a 3rd party program "brutaltester"

Zenoscave: Yeah don't merge that

Zenoscave: bad idea

Zenoscave: I will close

eulerscheZahl: i'm fine with adding a like to the readme

Valdemar: i see that referee print out stats to terminal, like 2 0 in different lines, but brutaltester shows 0% as result

eulerscheZahl: which brutaltester version are you using?

eulerscheZahl: and new mode or legacy?

Valdemar: 1.0 from artifacts

Valdemar: i didn't pass any flags, so it should be the new one i guess

eulerscheZahl: yes, that's fine

eulerscheZahl: how did you call it?


java -jar cg-brutaltester-1.0.0.jar -r 'java -jar ./target/captainsonar-1.0-SNAPSHOT.jar' -p1 ./ocean-ai -p2 ./ocean-ai

Valdemar: it running ok, but shows End of game 1 0.00% 0.00% despite of real results

eulerscheZahl: so you have a folder structure like this:

Zenoscave: the brutaltester calls the referee default on wood 2 (level=1) league

Zenoscave: add -Dleague.level=3 in -r java string

eulerscheZahl: brutaltester ocean-ai target


Valdemar: oh, but referee seems to running ok

Valdemar: eulerscheZahl of course It runs normally and prints stats in terminal

Zenoscave: How many lines total?

Zenoscave: 3 or 4?

eulerscheZahl: did you try to run the referee + bots without brutaltester?

eulerscheZahl: you should get a single battle that way

Valdemar: Zenoscave can it be related to log level? I didn't change that

Valdemar: so referee prints many log info to terminal

Zenoscave: it might be

Zenoscave: I am not near my desktop but I'll push my changes once I can

Zenoscave: to my branch

YannT: I don't think I have the right thing for mine avoidance...

YannT: I know where they likely are, but I can't figure out how to cleverly factor that in :/

Valdemar: Zenoscave eulerscheZahl thanks for hints changing log level in solved the problem

Zenoscave: :+1:

eulerscheZahl: great

eulerscheZahl: minewhile i'm still testing single-threaded with a loop in the test/

eulerscheZahl: meanwhile*

Zenoscave: If it works ... why fix it

eulerscheZahl: it's slower than it has to me

eulerscheZahl: be

Zenoscave: fair

Illedan: Finally working code again :tada:

Zenoscave: gz Illedan

eulerscheZahl: you reverted to last weekend?

Illedan: Nope

Illedan: I did 4 tries on tracking and reworking :P

Valdemar: well, it works but spamming with warnings sun.reflect.Reflection.getCallerClass any suggestions?

Illedan: Finally found something that is not too bad

AntiSquid: hey you submitted a weaker version of your stream bot? Illedan, was wondering where it would end up if kept as it was

Illedan: No. The stream is untouched

Illedan: 200 in silver

AntiSquid: ya weird, because it used to be 100 ranks above mine lol

AntiSquid: and now it's close to mine

Illedan: People evolve..

AntiSquid: but i didn't improve my bot

eulerscheZahl: randomness

Illedan: And that

Illedan: Guess it was not really top 100 good at the time

darkhorse64: Nice stream btw. it helps me figuring out I had a badly designed code

Illedan: Thx

Valdemar: eulerscheZahl I can see warning output in github readme. Did you try to work around that?

Valdemar: In example game output placed on readme I mean

eulerscheZahl: "WARNING: sun.reflect.Reflection.getCallerClass is not supported. This will impact performance."

eulerscheZahl: no, we ignored it

eulerscheZahl: part of the SDK, every game gets that output

eulerscheZahl: thus not my cup of tea :)

AntiSquid: but it also keeps saying this: WARNING: All illegal access operations will be denied in a future release

AntiSquid: for a long time, but you never know ...

Zenoscave: they will anounce before removal

Zenoscave: future problem

Valdemar: but that output confuses brutaltester

AntiSquid: WARNING: illegal violation infringement !!

Valdemar: I don't bother about problems with game sdk either, but maybe there is some sort of hack to avoid that output?

eulerscheZahl: does the new brutaltester still rely in input/output streams?

Valdemar: yes

Zenoscave: I believe so

Valdemar: it reads info from referee, line by line

eulerscheZahl: lazy solution: edit this file:

Kathrin: Try running with java 8, this kind of things were introduced with java 9+


AntiSquid: i thought i am on java 8 atm

Kathrin: To be precise: oracle jdk 8

AntiSquid: it says 8

AntiSquid: i get the warning though

Zenoscave: but you may be on open jdk

AntiSquid: i guess, i don't really know the difference

Zenoscave: different implementations of Java Lang Spec

Kathrin: And sun.* classes are implementation specific, thus high risk that not all implementations have them

Zenoscave: ^ this

AntiSquid: java version "1.8.0_2xx"

Zenoscave: what OS AntiSquid?

AntiSquid: windows 10

Zenoscave: I'm not familiar with java on windows

eulerscheZahl: I'm not familiar with java or windows

Zenoscave: that too

AntiSquid: ugh i have java on ubuntu too, quite sure i get same error

Zenoscave: Maybe we are wrong then

AntiSquid: maybe i need to add more skill points into my java abilitiy

Kathrin: I'm willing to trade, some java skills for a clue why my bot likes to timeout.

eulerscheZahl: because you have too many iterations in your loop?

eulerscheZahl: hard to tell without any knowledge about your bot

AntiSquid: one of your loops never ends ?

eulerscheZahl: if you play the turn offline, does it terminate?

AntiSquid: for example it might keep searching for a specific solution and therefore get stuck

Kathrin: yes termination is ok, it has to be loop count, but I have plays which should have more iterations without timeouts, and some with much less iterations that timeout.

eulerscheZahl: which language?

Kathrin: kotlin

eulerscheZahl: based on JVM can garbage collection be a problem?

eulerscheZahl: there was a kotlin heroes contest on codeforces recently you were only allowed to code in Kotlin

eulerscheZahl: was fun

Valdemar: eulerscheZahl thank you, indeed simple and lazy solution

Kathrin: may be, but up to now I blame the person in front of the screen not the system.

Valdemar: is it normal, that game is dead slow? like 1sec on one game or similar

eulerscheZahl: for local testing? normal

eulerscheZahl: some overhead for map creation, adding players (starting process), ...

AntiSquid: yell at the person in front of the screen to fix it

eulerscheZahl: do you timeout in the middle of the game? or at turn 1?

Valdemar: yeah, I understood. There is no way to cleanup MultiplayerGameRunner instead of recreating it from scratch each time?

eulerscheZahl: the recreate would still have to restart the bots with 0 memory, create a new map and all that

eulerscheZahl: the brutaltester will have the same overhead

eulerscheZahl: just multithreaded

Kathrin: good question eulerscheZahl, I can't see it, my move is printed in the viewer but instead of beeing executed it gives me timeout

eulerscheZahl: which is why agade always wrote his own local arena, closer bound to his bot

eulerscheZahl: can you share a replay Kathrin?

AntiSquid: ah what happens after that move in your code?

AntiSquid: i mean after the output


eulerscheZahl: the torpedo message is a known viewer bug, repeating your last command

AntiSquid: i would check the BFS in your code first with that kinda replay

eulerscheZahl: might be the enemy tracking too, a bug with torpedo handling

eulerscheZahl: run it offline, that's the best advice i can give you

emh: hah.. first attempt at vectorizing the BFS using AVX2 failed miserably. performance tanked to less than half of before and number of CPU instructions doubled from ~600 to ~1200. not sure it's worth looking into

AntiSquid: and the good news?

emh: I had most of the "infrastructure" in place so it was easy to do

ZarthaxX: emh i have to say, you are crazy with the bfs thing lol

emh: ah yes I agree hehe

eulerscheZahl: he showcased his craziness often enough

emh: BFS is my Best Friend Soulmate

Csipcsirip: emh I ported your python bfs. thanks. I too got 1m bfs. I have no idea how it works and didn't importve my rank, but still... :D

AntiSquid: ZarthaxX weren't you higher rank?

Default avatar.png MichaelAlbert: hey bbs

emh: Csipcsirip oh wow cool :)

pb4: " emh I ported your python bfs. thanks. I too got 1m bfs. I have no idea how it works and didn't importve my rank, but still... :D "

ZarthaxX: AntiSquid ?

ZarthaxX: wat lol

pb4: I'm curious now :D

pb4: Not that the performance would be useful, but I'm still curious :)


pb4: Not the type of python is usually read :neutral_face:

emh: I might as well post my C++ code too now that the cat is out of the bag

emh: sorry Csipcsirip for making your port py code hehe

emh: but C++ is bigger and full of various experiments

emh: needs cleaning

wlesavo: nice one, dbdr

dbdr: thanks!

dbdr: feeling good right now

dbdr: let's see if this sub collapses at the end ;)

dbdr: I have good rates against everyone except siman it seems

Astrobytes: emh, perhaps you could write a article about it, like M Smits did

kovi: gratz dbdr

dbdr: köszi!

eulerscheZahl: the battle for the top intensifies

dbdr: more and more people in the top 5

aCat: Folks, what is state of the art brutaltester repository ?

eulerscheZahl: :D

AntiSquid: köstlich! dbdr

aCat: I mean the newest version


aCat: oh ok, I've seen last update 6monts so maybe something had changed

aCat: thanks euler!

eulerscheZahl: no

emh: Astrobytes do I need permissions from someone for that? or anyone can post?

AntiSquid: anyone can post

Astrobytes: I think anyone can emh

AntiSquid: it's linked to your cg account Emh

emh: ok found it

dbdr: seems I still have a bad rate against you too kovi

kovi: must have been a lucky roll for me

Tunga: How can this wood 1 boss knows the exact location of me ?

Tunga: After 10 moves

wlesavo: ezpz

Tunga: :D

Tunga: It tracks the every output

dbdr: you keep saying that kovi ;)

wlesavo: wood 2 boss used to do that

kovi: and i keep resubmit, to prove it

dbdr: >3 pts between #4 and #6

emh: managed to trim C++ from ~1400 lines to ~500 lines hehe. still working on it

icecream17: I made my code "better" but it made it worse.

kovi: 3 pts is still within luck factor

wlesavo: dbdr it was even funnier when we had same pts with kovi

dbdr: with small probability I think

dbdr: in gold there should be more matches, so somewhat less variance

dbdr: exactly same?

wlesavo: yes

dbdr: nice :)

wlesavo: for #1

dbdr: would be interesting at the end of the contest

pb4: What I hope is there'll be a proper rerun

pb4: more matches isn't useful if there isn't some kind of averaging of the scores

dbdr: it's still useful, though not as much as it could be

wlesavo: do they usually do reran before counting the final score for the contest?

dbdr: what makes a rerun proper?

dbdr: yes

dbdr: they add more matches for the top 100

dbdr: legend only

pb4: more games to get people roughly in the right spot - stop there - start recording average score - launch more games for everyone - rank based on average score

pb4: or - even better - use the procedure we put in place for BR2048

pb4: (see forum for this)

pb4: nice, 3/1 vs siman on this push :)

dbdr: hoping might not be very effective pb4 ;)

dbdr: maybe raise the issue on the forum?

pb4: I can't be bothered anymore. Have raised it multiple times already, including on the forum

dbdr: I remember reading about an old contest where someone ran their own ranking of the matches

dbdr: maybe it was you?

pb4: Possibly :)

pb4: I did something for STC

pb4: and BR2048

dbdr: as I said, more and more people in the top 5. pb4 is back

pb4: :)

pb4: It's so slow to update -_-

wlesavo: pb4 do you track silence 0 now? :slight_smile:

dbdr: at least the matches are reasonably fast

pb4: might even be top2 or top3 given my last battles

dbdr: I still don't get what it means to track silence 0

pb4: wlesavo : I'm not sure it's useful :/

dbdr: don't you need to track all silences from 0 to 4?

pb4: Not that many people do that

pb4: dbdr : assume that people do silence 0 all the time

wlesavo: well its useful against kovi :wink:

wlesavo: well not assume, but deduce

wlesavo: if they actually are

dbdr: ah yes, remember now

pb4: #2 this run

wlesavo: probably not gonna matter soon

kovi: 3 points less after resubmit....told you ;)

dbdr: wow

Zenoscave: My bot occassionally has trouble with people in the 100s

Zenoscave: Like serious 0-6 or 0-5 trouble

emh: new record after cleanup 1.66 mill (vs 1.5 before). not sure why, just deleted a bunch of code (maybe constructor?). 330 lines of code left. maybe ready for now. just want to see what perf is without AVX compilation enabled first. can simplify code if not needed

Tunga: You cant guess the other league when you play against champs

Zenoscave: Tunga what does that mean?

dbdr: emh seems you invented your own contest ;)

wlesavo: dbdr and he is really owning it

Tunga: When you prepare yourself for good players, you cant play well against others more like a bunch of randomness in them

Zenoscave: not always true Tunga.

emh: dbdr true hehe :)

Zenoscave: in fact that shouldn't be nearly as often as it happens for my bot. I think I have a serious flaw

Tunga: It might be

emh: amazeballs.. dra meg baklengs inn i fuglekassa. actually I get 1.895 million without AVX. whyyyy? hehehe

735487: I see an error reporting bug: invalid distance on silence: SONAR 10

Astrobytes: emh, wtf does that Norwegian expression even mean?!


Valdemar: sonar 10 indeed invalid command

kovi: seems copypaste bug

emh: Astrobytes it's from animation movie. a small bird getting the mail by climbing into the mail box and he says "pull me backwards into the mail box". an expression of surprise

735487: i know. just an error wrong. just wanted to let know if it does matter

wlesavo: well still the referee recognized that error wrong, yeah

egaetan: emh still interesting to to see avx, even if it slower

Astrobytes: emh cool, I get it!

emh: egaetan well I want to simplify as much as possible for the article. there are other articles about AVX

icecream17: So if you're trapped, is it better to suface and then silence, or silence and then surface?

Default avatar.png JBM: the one where opponent knows the least where you end up

Default avatar.png JBM: but then again

Default avatar.png JBM: if you can silence, why surface?

kovi: if you are entrapped by mines or your own trail silence itself not help much

YannT: heyooo top10!

YannT: got the sim to work :)

Default avatar.png JBM: gg

emh: github is down? getting timeouts and errors

pmor: I'm getting the same

YannT: I'm gonna repush without the timeout issue tho, that'll probably be better

YannT: there, no timeouts :hugging:

AntiSquid: and no calories

Astrobytes: Like the Monkey reference there

AntiSquid: is there a way to run local games faster? damn this is slow

YannT: using brutaltester?

AntiSquid: ah .

AntiSquid: but i am doing something else :/

YannT: it can thread tho so that would be faster

Astrobytes: Or make your own arena

Tunga: Random pathing is terrible

Tunga: I made my pathing random and lost like 100 rank instead of simple pathing

AntiSquid: actually nvm, yeah prolly should switch to brutal tester

Tunga: Wood 1 boss knows my exact location after a silence jump wtf

Astrobytes: It's watching you Tunga

AntiSquid: eh?

AntiSquid: you doing something wrong p[erhaps

Tunga: Does it reads the debug messages ?

Astrobytes: lol

Astrobytes: no

Tunga: I reveal my location in my debug

Astrobytes: You can pass Wood 1 with just silence iirc

AntiSquid: before boss nerf i managed to promote with just silence

Astrobytes: Same

Astrobytes: Oh no wait, I think I was the day after or something but I had 100% against boss. Boss was nto the problem.

Astrobytes: (before nerf)

Astrobytes: Still a bit iffy about this nerfing business tbh

AntiSquid: ya

AntiSquid: trying to group all in the middle of the ladder

AntiSquid: nerf bosses, stream mid silver bot :p

Tunga: LOL I lost 250 rank with swtiching into random movements

AntiSquid: why did you try random anyway

Tunga: I was bored

AntiSquid: what's the motivation

AntiSquid: aha

wlesavo: wow, pushed to 39 pts

AntiSquid: you have some seriously strong lead

AntiSquid: you need to keep going though, people at the top tend to catch up incredibly quick :/

Tunga: I need to make movements better

Tunga: After that I need a decent tracking

Tunga: This thing just got serious

wlesavo: still have some unused time turn, so probably will come up with smth, but yeah, not hoping to keep that for long

Astrobytes: holy shit, what did you change?

Tunga: I made a accurate torpido firing which made me into bronze I guess

AntiSquid: torpedo

wlesavo: Astrobytes just made some calculations quiker, so have more time for search, also not timing out anymore, that helps :slight_smile:


Astrobytes: gj wlesavo

wlesavo: thx, still surprised this bot doing that good

wlesavo: wouldnt ever expect that

AntiSquid: switch to c++ ?

wlesavo: my c++ is bad, so probably wont get any improvement

Astrobytes: Good time to improve it no? :)

AntiSquid: best time to learn a new language is during contest anyway

Astrobytes: ^

Default avatar.png lNitsua: learning C for this one

Default avatar.png lNitsua: I've come alot further than I expected

wlesavo: well maybe you right, but i would have to give uo this one and now im curious how far can this go

Astrobytes: emh it's faster without auto-vectorisation?

AntiSquid: just translate the bot wlesavo

struct: yes

struct: no

emh: Astrobytes yes

Astrobytes: And faster with your duplicate manual loop unrolling?

emh: ah yes but I added that before removing avx

emh: didn't try without unrolling after that

AntiSquid: damn it, i am finally about to start making an improvement (i believe so at least) but i am too sleepy to keep going Q_Q

AntiSquid: gn7

AntiSquid: gn8

emh: so right now there are 4 calls per loop. you can get away with 2 by removing duplication and 1 call per loop if you swap some variables

emh: AntiSquid gn

Astrobytes: Similar issues here squiddo, gn

Tunga: Yea AntiSquid, gn

struct: Did you try manual vectorization yet?

Tunga: I was fired up but, I have work tomorrow and this random movement submit lost 100 rank for me :D

emh: struct partly but not much and not seriously. have some code for it if you want but it's not good

struct: nah its fine dont worry

struct: but should be possible

emh: kk

Tunga: Any button on ide saves the current version of the code ?

Illedan: Submit

Illedan: Saves it in history

Illedan: I recommend coding locally though

Illedan: and use git

Illedan: for sanity

Tunga: Play my code doesnt save?

Illedan: It saves yes

Tunga: I like the hardness in this ide

Illedan: hardness?!

Tunga: Using only print for debug

Tunga: Not tracking issues on a ide

Tunga: Thanks for the info, gn everyone

Astrobytes: You can debug offline Tunga

emh: gn Tunga

Astrobytes: woops, too late

kovi: nice, illedan is back in top

Illedan: Yeah, simple if(Illedan) GiveExtraPower() In the referee, was very effective

pb4: how much for the same if(pb4) ?

Illedan: :thinking:

emh: pb4 can you improve on my BFS code? more million iterations :D ?

wlesavo: pb4 stop bulling me :slight_smile:

ZarthaxX: Illedan how did went to top so fast? LOL

Illedan: I submitted something good?

Illedan: *decent

wlesavo: spam silence N 4

ZarthaxX: i mean

ZarthaxX: didnt you stop working on bot for days?

Illedan: Nah, I have been working on my tracking for very long

Illedan: between work, fixing the referee and a few reworks. It just took some time

ZarthaxX: ah ok

ZarthaxX: search or heuristics?

Illedan: React

ZarthaxX: wot

Illedan: Some searches and some reactions to current state

Illedan: but far away from top 3 yet

Illedan: long way to the top

YannT: I have to rewrite my entire eval

ZarthaxX: ah ok, ty

YannT: it's basically made of bubblegum and random things

Illedan: Yeah, I have a 20 in here. Which I wrote without testing and assume it was all good.

YannT: score += 50 + (availableSpace - previousSpace) / 10

YannT: I have stuff like that

YannT: why 50, why 10, no one knows

YannT: I also divide the probability of mines by 5 for some reason

YannT: I really have to redo all of that ahah

wlesavo: i think available space is overrated by many players

pb4: Obviously the 5 directions you can lay them in

YannT: wlesavo: this is why it's divided by 10 !

YannT: there is a method to my stuff somewhere

YannT: some sort of sense is in there, it's just hard to see :p

YannT: I really have to rewrite all this janky ass stuff so it can be tuned, that'll be the first mission once in gold

DomiKo: guys

DomiKo: when gold will be open?

ZarthaxX: tomorrow

DomiKo: but its 4/3/2020

emh: today then

emh: around 18:00 usually

DomiKo: ohhh ok

DomiKo: thx

emh: what's the current meta? any discoveries of new techniques since opening of Silver? was too preoccupied to pay much attention hehe

emh: I guess I will start porting my C# to C++ now

Illedan: Torpedoing the enemy sub is currently very strong

ZarthaxX: who would have told

Illedan: But I'm aiming for the pacifist award

emh: ohh I was losing to that already last time. that's why I lay mines and hide

ZarthaxX: laying mines and waiting Illedan?

Illedan: Yeah, make a castle out of mines

Illedan: and just sit there

ZarthaxX: funny phrases drawn with mines

Illedan: :D

emh: and it turns into minesweeper

Uljahn: you can't just sit, you should trigger at least

izik1: > You can't trigger multiple mines in the same turn. You can't place and trigger a mine in the same turn.

Illedan: Suicide on your own mines for the greater cause?

izik1: But can you place a mine and trigger a different one?

Uljahn: ye

Illedan: ye

Default avatar.png JBM: yes

Default avatar.png JBM: -s

YannT: no ones tries to put mines everywhere and just trigger while not moving, see if the ennemy kills himself :D

Illedan: The first version of the mines was triggering when the Sub moved on top of the mine and not with a command :P

izik1: I can't tell how that effects the balance of them, pretty complicated implications there

Uljahn: so unfortunate silence could instakill :smirk:

Illedan: hehe

izik1: Pretty sure mines can still instakill

izik1: just need to lay them in a +

YannT: it's more complicated with manual trigger, because you have to guesstimate if you're "hidden" enough that they won't try it

Illedan: Yeah, glad we did triggering

izik1: yeah, there's a good bit of complexity both ways

izik1: if you layed a mine and someone triggered it by stepping on it, that would reveal your position at

izik1: well, down to 4 tiles anyway

izik1: I might be working on my tracker for another few days to handle mines

izik1: _tons_ of interactions going on with them

izik1: Every mine trigger can potentially give a _lot_ of info

Default avatar.png lNitsua: when you say trigger it by stepping on it, does that mean in silver+ mines explode by contact? I'm in bronze and it's only through trigger

izik1: no

izik1: that was an idea

izik1: that didn't make it to the current version of the game

Default avatar.png lNitsua: ok thx

YannT: izik1: spoiler alert, it actually does ;)

YannT: well most of the time it doesn't, except sometimes it really really does

izik1: :thinking:

reCurse: 10% of the time it works every time

YannT: basically if one triggers a mine laid before a silence, it won't discriminate the branching that the silence(s) since caused

YannT: except in that one case where it will remove a path AND the entire branching that happened since with silences and really clean stuff up

izik1: yeah, as I said, potentially a lot of information

izik1: It doesn't _always_ give it

izik1: but it can give a lot

emh: well good night

izik1: \o

Illedan: gn

izik1: For now I just have to figure out how mines work into my model

YannT: score -= 100 * (8 - life)

YannT: :unamused:

YannT: yeah, really have to rewrite my eval ahah

izik1: I don't sim *shrugs*

YannT: it's full of seemingly random stuff that kinda does a thing, sometimes

izik1: lol

Illedan: It's something! (sometimes)

izik1: Sounds like my code Royale bot tbh

izik1: "kinda does a thing sometimes maybe"

izik1: My mean max bot is still sitting at bronze 2 lol

YannT: thanks kovi you pushed me a lot ;)

Asterixk: crap got to silver too soon

Asterixk: someone beat Cpt Iglo so hard they pulled me up from 5th

Asterixk: I don't even mine or silence, barely track oppPos

wlesavo: kovi went from silence N 0, i guess i can delete that part of the code now :slight_smile:

kovi: maybe i skipped for you only

kovi: or not

kovi: you never know

Zenoscave: illedan do you combine code as post build step?

Illedan: Nah

Illedan: I have a process checking every 500 ms and updating if something new :P

Zenoscave: what is the code combiner process do?

Zenoscave: just wrap each file in a namespace and cat?


Zenoscave: thanks

icecream17: i need some non abstract ideas...

TidyMaze: eat chocolate

icecream17: great idea

icecream17: but still unachievable

TidyMaze: is the concept of chocolate too abstract ?

icecream17: no.......

icecream17: i dont have chocolate

TidyMaze: :S

icecream17: what does that mean? moustache?

TidyMaze: eyes + weird shape mouth, like a :(

icecream17: makes me wonder about other shapes

icecream17: Z, W, Q, k, &, @

TidyMaze: well, I mostly came here to steal ideas from wlesavo, but talking about shapes is fine too :)

icecream17: I need to track paths, sometimes you can move down after you silence and sometimes not, but I only have a MainPath string now.

icecream17: I wonder how the person who did an AI is doing

wlesavo: TidyMaze well more or less most part of what i do been discussed already, its mistery to me how this bot doing so well right now

pb4: wlesavo : do you have big things on your todo-list that you expect will improve your bot ?

icecream17: Ugh, it says "bug = true" at "move 62", turn 147

Radewoosh: Is any admin here?

wlesavo: pb4 mostly thinking about planting mines more effectively, to screw up mine escaping, seems to be an important thing, but dont know if i would have enough perfomance for that

wlesavo: probably will have to make smth simple

wlesavo: i already cuted out some costly ideas

Radewoosh: Guys

Radewoosh: Are you playing ocean od code?

Radewoosh: Or do you just happen to know the rules

Radewoosh: If the opponent prints for example TORPEDO 1 2

Radewoosh: Will I see multiple spaces?

struct: no

kovi: nope

Radewoosh: ty

Radewoosh: is it true that I can get no spaces?

Radewoosh: for example after "|"

YannT: you can output spaces, the referee will sanitize

Radewoosh: ...

Radewoosh: I'm asking about the information about the opponents' moves

YannT: it will always be well formated by the referee

Radewoosh: and what does it mean

Radewoosh: Where can I find any info about the exact format of the input

YannT: there's no spaces around the |

Radewoosh: Great that there is such one in the statement

YannT: "Output for each next turns" section of the rules (last one)

YannT: oh yeah, the example in the statement is wrong :D

icecream17: If you torpedo too far, say "TORPEDO 14 14", will the opponent see that?

YannT: no

YannT: opponent will not see illegal actions

YannT: (and your torpedo cooldown is still reset)

Radewoosh: are you an admin?

Radewoosh: Yannt

Radewoosh: or maybe you just happen to know when can we send some feedback about the details of the contests

blasterpoard: Radewoosh there is a forum for that, or you can message the creators on discord

icecream17: Uj... \wya5 os happening to tjw test. i mena chat. t;s glitxhed wriedly

icecream17: Oh nevermind.

icecream17: Also I realize I record the time before the inputs. Now it says 0ms.

icecream17: Wow. I just discovered crystal rush

icecream17: What... the wood boss in crystal rush was so easy

Default avatar.png superfx12: Hi guys, do you know if with silence you can go through visited places to unvisited places?

mlomb: you cant

mlomb: I'ts like moving but 0-4 times

Default avatar.png superfx12: Thanks!

Nanosplitter: Does anyone know an efficient way to reverse a subset of bits inside an integer in C++?

Nanosplitter: Like if I was dealing with a 10-bit integer 0010110101, and I wanted to reverse position 3 to 7, I would reverse these bits: 001|01101|01 and it would become 0011011001