Chat:World/2020-04-02
LakenCodes: what up
Asterixk: wtf it's 6am now.
Asterixk: half an hour ago it was like 2am
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 https://twitch.tv/thibpat 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.map[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: https://www.codingame.com/share-replay/444559992
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
anid: Who codes the bosses in ocean of code?
wlesavo: everyone and noone
Illedan: anid, bosses are selected among the players on the leaderboard.
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
PsyStorm: How can you track where the opponent? There is so much combination. Plus with the silence
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
PsyStorm: I tought I could edit, but it reposted
AntiSquid: no edits, anything you send will be seen and can't be unseen
darkhorse64: Worse, it is now recorded and searchable
AntiSquid: someone doing rounds with a motorbike outside, lol what happened to the lockdown?
yfprojects: @darkhorse where do I find that?
Tunga: Tracking enemy and navigating to it is a real issue
darkhorse64: https://cg.spdns.eu/wiki/Main_Page
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: https://pastebin.com/QjmFPS6G 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: https://pastebin.com/pyc6hfyB. not much different but less temporary arrays and more imperative style
wlesavo: emh thx, will look into that in the evening
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
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
eulerscheZahl: http://chat.codingame.com/pastebin/ab774f64-2ce8-4ac2-83da-1a10fbf301c0
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
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
INORI: Hi
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
INORI: XD
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?
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: https://www.codingame.com/share-replay/444713712
wlesavo: you*
MSmits: i still have a bug though
struct: wlesavo how well do you do on this map? seed=-1425933
MSmits: https://www.codingame.com/share-replay/444714157
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
Sneffy: Hey, did someones used Brutaltester with CSB referee ?
SavinVadim: going live in 5 minutes, see you there guys https://youtu.be/cBEV5KDB3vc
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:
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
lNitsua: http://chat.codingame.com/pastebin/649ff041-9759-47f2-ab28-d9d9dd20247e
lNitsua: wow, didn't realize I typed a whole book
lNitsua: tl;dr, how do I learn to program the bot to make good decisions
wlesavo: thats a wide question
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
lNitsua: that ended up timing out a lot, and on ocean of code there's too many options
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 https://www.codingame.com/share-replay/444738607
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:
eulerscheZahl: https://www.youtube.com/watch?v=ZTHpXHjTWwM
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
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 https://www.codingame.com/replay/444747150
eulerscheZahl: load fully loaded torpedo, then use it
Astrobytes: Must be doing something right since it's 3rd :D
Ravi1269: is there a playground where i can test any code
struct: yes
eulerscheZahl: tech.io
struct: https://tech.io/snippet
eulerscheZahl: https://tech.io/snippet
Zenoscave: oops
eulerscheZahl: (╯°□°)╯︵ ┻━┻
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: ;)
eulerscheZahl: https://github.com/LSmith-Zenoscave/ocean-of-code
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?
Valdemar:
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
captainsonar-1.0-SNAPSHOT.jar
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 log4j.properties solved the problem
Zenoscave: :+1:
eulerscheZahl: great
eulerscheZahl: minewhile i'm still testing single-threaded with a loop in the test/Main.java
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: https://github.com/CodinGameCommunity/ocean-of-code/blob/master/src/test/java/Main.java
Kathrin: Try running with java 8, this kind of things were introduced with java 9+
eulerscheZahl: http://chat.codingame.com/pastebin/6f258d2c-f679-40b6-ab01-f1dd81c8d4a8
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
Kathrin: https://www.codingame.com/replay/444771023
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?
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 :)
eulerscheZahl: https://pastebin.com/pyc6hfyB
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 tech.io 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
eulerscheZahl: https://github.com/dreignier/cg-brutaltester
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 tech.io 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?!
735487: https://www.codingame.com/share-replay/444790043
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 tech.io 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?
JBM: the one where opponent knows the least where you end up
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 :)
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 https://youtu.be/XWo627F7CeU?t=19
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:
emh: https://tech.io/playgrounds/53455/fast-15x15-bit-grid-bfs-breadth-first-search
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: ^
lNitsua: learning C for this one
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
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
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
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?
Illedan: https://github.com/Illedan/CG-sharpmerger
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
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
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