Chat:World/2020-11-14
NinjaDoggy: tomatoes why did you lie to me :( you do 9 learns
Zenoscave: I have some bug where my bot thinks it can't complete any tasks. Its driving me crazy and super sporadic
tomatoes: it seems turn increment in wrong place :sweat_smile:
NinjaDoggy: :(
Yanners: This game is tough, I've been stuck for hours :grinning:
DaNinja: me too, I still cant figure out the read ahead tax
reCurse: Figure out?
DaNinja: if I learn a spell with a tax on it, do I get the tax ingredient too?
reCurse: Yes
guspihl: I just faced a reverse mode i couldnt figure out, which is bugging me
guspihl: and noone shared their code
DaNinja: thats the stock and tomeStockGain in the referee?
guspihl: is there any way to find out the answer anyway?
Donotalo: what's the preferred ai algorithm to apply for this game?
NinjaDoggy: BFS,simulation for now
Donotalo: what do you mean by "for now"?
NinjaDoggy: if you can make a bot that knows how to cast/brew well then it's going to be like top 20
reCurse: So if you make a bot that plays the game well it's top 20? :thinking:
NinjaDoggy: ok but
NinjaDoggy: once it's standard(like most bots have it)
NinjaDoggy: then other things become important
NinjaDoggy: like the simultaneous turns and stuff
reCurse: Hmm.
NinjaDoggy: also, you don't have to have good learning yet
NinjaDoggy: so i guess that's in the "stuff"
Icebox: reCurse are you tryharding on a bot or taking it more relaxed this contest?
eulerscheZahl: he can't relax
Doug: Okay, hopefully someone can help.. How do you know which spells are yours? From my understanding, they have an ActionType of CAST, and your opponent has OPPONENT_CAST. However, when I play my code, every spell I hover over, on either side, has an ActionType of CAST. Am I missing something?
jacek: only CAST are yours
Icebox: Doug it's visual
Icebox: when you "hover" over a spell
Icebox: it says "CAST"
jacek: also, happy Caturday
Icebox: but in input
Icebox: it will show up as opponent_cast
Doug: Ah, okay. Then I have a different bug. Thanks!
ClockSort: I got into the top 100 by taking the cheapest spells 5 times from the tome, then never running LEARN again. So the bots aren't too smart yet. :)
Zenoscave: eulerscheZahl are you nerfing your bot currently? Out of curiousity
Zenoscave: Your ms counts are surprisingly low
ClockSort: how do you see the ms counts?
Zenoscave: he debugs them in his messages. not everyone does
Zaphus: so he could be lying :-)
ClockSort: very kind of him :D
Zenoscave: Zaphus, I doubt it but true
Zaphus: you don't want to look at my messages :-)
Zenoscave: looking now
Zenoscave: I knew it
Zenoscave: Somehow I just knew it
Zaphus: sorry
Zaphus: but you knew the rules
Zenoscave: It was good
Zenoscave: and so did you
AbsentMoon: Anyone have any tips for deciding when and which spells to learn?
rcar: learning a bunch of the free ones early seems to be a local maximum
AbsentMoon: How are you using your spells? Are you using a points system of some sort?
eulerscheZahl: Zenoscave i could go higher. and it would obviously help. but for the sake of faster submits that's something for the last day
rcar: I'm doing them at random which is why I'm rank 300-400
eulerscheZahl: and the lower i rank the easier it is to see improvements just by submitting
AbsentMoon: rcar so you are casting random spells and then just crafting whatever potions you can afford?
eulerscheZahl: could be random but this submit already gained 8 spots. I improved pruning which equals to a speedup
rcar: yes, until I finish implementing any sort of search
AbsentMoon: Ah. I think I am going to try and implement some sort of points system.
Zenoscave: makes sense eulerscheZahl
Zenoscave: And I thought I was going to have a chance at 1st c# :/
eulerscheZahl: still early in the contest
eulerscheZahl: next on my list: reasonable LEARN
Zenoscave: much too early to tell
eulerscheZahl: there are games where i only learn 1 spell in the entire game :D
eulerscheZahl: and i lose those, big surprise
Zenoscave: You know of the current cheese?
eulerscheZahl: like https://www.codingame.com/share-replay/501127992
eulerscheZahl: no
eulerscheZahl: what is it?
Icebox: learn 10 at the start
Icebox: :D
eulerscheZahl: i have something better in mind
Icebox: not a big fan of it but from what I've seen in chat seems like a lot of people do it
eulerscheZahl: no need for cheese if you can do it right
Zenoscave: better bonus eval is my next todo
Zenoscave: then a better intermediate heuristic scorer
Maliamnon: I ended up with 10 tier-3 ingredients in my inventory on turn 40 and lost :(
Maliamnon: oops
eulerscheZahl: been there before :D
Maliamnon: it looks so good, then it's all so bad so fast lol
eulerscheZahl: minigame idea: who can deadlock himself the fastest?
Zenoscave: Is while True: print("WAIT") a deadlock
Zenoscave: :P
Maliamnon: or, who can get 1 blue, 2 green, 3 orange, and 4 yellow the fastest
MadKnight: that's basically the same as getting things for a recipe which u are already doing
eulerscheZahl: Zenoscave val growth also likes your cheese "I put my first 10 LEARNs in the 1500th place without LEARNs, and I got to 50th place after the first 10 LEARNs, so it's pretty hard to tie up without LEARNs this time."
Zaphus: I think emils strategy is grab so many spells that most bots time-out trying to process it. gets #1 spot in the cheesiest way
eulerscheZahl: i don't even sim the opponent :D
eulerscheZahl: emil plays differently in IDE vs arena
Csipcsirip: yeah thats what i wanted to say. I don't think many players sim the opp.
Csipcsirip: emil is using rust, which runs in debug mode in ide
eulerscheZahl: not yet. not sure if ever
eulerscheZahl: except for endgame detection maybe
eulerscheZahl: i have debug mode in IDE too
NinjaDoggy: end game detection but also if someone is going for a brew and they reach it earlier than you, then it's pointless to go for it
Zaphus: how do you detect you are in the IDE?
eulerscheZahl: only Rust and C# can do that
Marcelo-Hackerman: Hey guys
eulerscheZahl: release mode on submit, debug mode in the IDE
Zaphus: that's handy
Zaphus: wouldnt be hard to give you a #define or similar in other languages
eulerscheZahl: at least for C# define doesn't work anymore
eulerscheZahl: at first it even set the DEBUG flag
lowzhao: if my inventory is full what should I do?
Zenoscave: good to know eulerscheZahl
Zenoscave: ah chat scroll
NinjaDoggy: @lowzhao, don't make it full :)
Marcelo-Hackerman: is this website good for practicing?
Zaphus: so is the emil I play when I choose an opponent a different one to the one that gets #1 spot (via debug or something)? because I can beat it every time here which seems odd
eulerscheZahl: yes, different behaviour
Zaphus: sneaky
eulerscheZahl: play vs #2 then
eulerscheZahl: still strong enough to kick your ass ;)
NinjaDoggy: rust = automatic bot hiding? :O
NinjaDoggy: not hiding, but makes it so people can't tune their bot to do well vs u
Zenoscave: How can it detect this?
eulerscheZahl: last contest my C# bot had lots of IDE timeouts
Zaphus: sems a little unfair when others can't do that
Zenoscave: Then code in c# or rust
NinjaDoggy: to be fair...
Zenoscave: no one stops you
Marcelo-Hackerman: am i playing against bots?
NinjaDoggy: it's more like the other way around lol
eulerscheZahl: maybe rust has a debug mode check? or you compare file sizes?
NinjaDoggy: they can't test their code easily in the IDE
Icebox: ok
NinjaDoggy: so... trade off :/
Icebox: I rewrote my code
NinjaDoggy: :O
Icebox: took only 26h
Icebox: time to debug this bad boy
eulerscheZahl: C++ now?
Icebox: yes
Icebox: oh
Icebox: you mean the rewrite
Icebox: no, it's in python
Icebox: but now I can start with C++
eulerscheZahl: so you start with your 3rd version now?
Icebox: for me personally it's easier to rewrite python into C++ than to write C++ from scratch
eulerscheZahl: sounds inefficient
Icebox: yea
Icebox: I mean
Icebox: for each his own...
eulerscheZahl: like my colleague "i have to write this letter in english. i'll start in German and then translate it"
NinjaDoggy: lol i can relate with icebox
NinjaDoggy: i always start in java and then try to rewrite in C++ at the end
eulerscheZahl: you totally notice when you read it, the structure of the sentences doesn't sound english at all
NinjaDoggy: wait... i just had a realization and am kind of sad now :(
NinjaDoggy: I came up with some fancy bitmask way to represent inventory and do operations quickly but...
Zenoscave: We definitely don't have the hunger like that of a bear either
NinjaDoggy: there's only 1001 possible inventorys, so you can just precompute all the transitions
Zenoscave: colloquialisms are hard
Icebox: welcome to the club NinjaDoggy :)
Icebox: you just guessed what I've been doing
NinjaDoggy: -_- lame
Zenoscave: YOU GUYS ARE PRECOMPUTING. I'M BEHIND
NinjaDoggy: no... i'm bitmasking
eulerscheZahl: same :D
NinjaDoggy: going to switch to precomputing :(
eulerscheZahl: this.Inventory = player.Inventory.ToArray();
eulerscheZahl: oh, that efficiency
NinjaDoggy: ok if i switch to precomputing and C++ oh boy
NinjaDoggy: the amount of extra sims i can do :O
Zenoscave: wait How did you get the 1001 number
NinjaDoggy: quick exhaustive search
NinjaDoggy: of all 4 numbers summing up to 10 or less
Zenoscave: oh i didn't think of that
Icebox: eh
Icebox: that's lame
eulerscheZahl: sometimes stupid is more efficient than smart
eulerscheZahl: i found a player who says "snif" when detecting a loss :D
NinjaDoggy: lol
Icebox: @NinjaDoggy https://oeis.org/A000332
NinjaDoggy: :O nice
Icebox: math is cooler than summing up to 10
NinjaDoggy: nah i'm not a fan of math
NinjaDoggy: computing is cooler :P
Zenoscave: I want euler totient functions
NinjaDoggy: i need to exhaustively list out all the states anyways
eulerscheZahl: NinjaDoggy now set your limit to 9 or 11 and compare with the sequence
eulerscheZahl: did Icebox even find the right one?
NinjaDoggy: yea he did
NinjaDoggy: :O
Icebox: :)
NinjaDoggy: idk how it's right though...
Zenoscave: it's also the sum of 1 to n for totient _ 4 (k)
NinjaDoggy: because it's wrong for small numbers
NinjaDoggy: like 2
Zenoscave: hooray partition theory
NinjaDoggy: or 1
NinjaDoggy: or 3
Zenoscave: because those are less than 4
NinjaDoggy: but 0 sequence is ok
Icebox: NinjaDoggy you have to discard the leading zeros
NinjaDoggy: oh right, nvm lol
Icebox: from the sequence
NinjaDoggy: yea it's just correct
Icebox: :)
Icebox: its basic combinatorics tho
NinjaDoggy: ok now it's time for you to code it anyways to form your states ;)
NinjaDoggy: but yea that is pretty cool
Zenoscave: Are all the actions known? or are they randomized
Zenoscave: like do the tome entries change
NinjaDoggy: ?
DaNinja: they are shuffled
Zenoscave: but not edited? Just order changes?
DaNinja: yep
NinjaDoggy: yea there's a fixed list of actions
Zenoscave: cool. Looks like I know my next steps
NinjaDoggy: 42 tomes and 36 deliveries
Zerfa: https://github.com/CodinGame/FallChallenge2020/blob/main/src/main/java/com/codingame/game/Deck.java
Zenoscave: thanks!
NinjaDoggy: honestly, might be a good time to switch to C++ if i'm going to switch to precompute :thinking:
dbf: you are discussing precompution of applying casts to inventory?
NinjaDoggy: yea, casts, brews, tax
eulerscheZahl: why can't you just play like normal persons?
Icebox: huh?
eulerscheZahl: have some fun. give others a chance as well...
Icebox: oh euler is trolling
eulerscheZahl: realizing that a good rank will be hard work
NinjaDoggy: :joy:
eulerscheZahl: and i want silver. 2k in bronze is a lot
NinjaDoggy: yea... early silver would be nice
NinjaDoggy: on the other hand 10/10 initial submits do feel good :)
NinjaDoggy: does*
eulerscheZahl: well... https://prnt.sc/vizhem
NinjaDoggy: lol just resubmit ;)
dbf: do you have chat window cleared and reset every 5 minutes also, or it is something with my browser?
eulerscheZahl: my chat sometimes crashes the whole tab
Icebox: saaaaame
eulerscheZahl: 2k users in chat is no fun
NinjaDoggy: hey euler
NinjaDoggy: how do you deal with the single file requirement in codingame?
eulerscheZahl: good morning
eulerscheZahl: multiple + merger
NinjaDoggy: oof
NinjaDoggy: ok
NinjaDoggy: so same as me :(
dbf: I have something like this: https://c2n.me/49OR8jk but at least my internet connection is stable
NinjaDoggy: do you have one for C++?
JamesOnnen: does it just copy to your clipboard?
eulerscheZahl: no, only c# check the forum for C++
NinjaDoggy: ok will do, thx
eulerscheZahl: mine writes to a new file from where i copy
NinjaDoggy: yep similar, i print it to stdout
NinjaDoggy: and then just copy all it
eulerscheZahl: https://www.codingame.com/forum/t/cg-local/10359/ you could automate further but meh
Icebox: codingame is making fun of me
Icebox: I finally submit something working, just for the website to tell me to "improve my bot"
eulerscheZahl: captcha?
Icebox: https://imgur.com/zDeId1D
DaNinja: cg-sync is great for automatic uploads
eulerscheZahl: :D
Icebox: feels bad man
eulerscheZahl: you are pretty new to CG, not sure if you knew about that already
eulerscheZahl: wait, that's in the highest league
eulerscheZahl: misleading hint at best
Icebox: yes :D
eulerscheZahl: new players might get confused for real :D
dbf: I am confused because there is no 'Submit' button now :grinning:
Icebox: madknight took over hints
Icebox: Improve your bot eulerscheZahl
Gonny: NinjaDoggy when you print to stdout and copy, did you just write something to remove the extra spaces and turn numbers?
DaNinja: Your bot sucks, fix it! :)
NinjaDoggy: @gonny nah, not that tryhard XD
lowzhao: How to know how much others have brewed.
Gonny: so you delete the lines by hand?
Gonny: I also do that, but find it quite annnoying oO
NinjaDoggy: wait what lines?
Icebox: track it lowzhao
Icebox: yes
NinjaDoggy: deleting stuff for code size?
NinjaDoggy: or deleting stuff to make it compile?
NinjaDoggy: keep spam submitting euler :)
Gonny: to get the stdout as an input without having the extra blank and score lines mess it up
NinjaDoggy: i can get top 10 soon :)
Gonny: http://chat.codingame.com/pastebin/3f334003-ce45-462f-8ef0-e6523d2b1675
Gonny: see the lines in the middle?
NinjaDoggy: oh! we're talking about different things
NinjaDoggy: yea for that
NinjaDoggy: i manually delete :(
NinjaDoggy: should probably make something for it tbh
Gonny: haha ok
Gonny: yeah I keep telling myself that too
Gonny: and end up never doing it :/
NinjaDoggy: yea... everytime i need it
NinjaDoggy: I'm busy debugging XD
NinjaDoggy: and then when i find the error i'm like "phew ok done"
Gonny: haha totally
Gonny: alright just wanted to check I wasnt'missing any easy option
Gonny: thanks for the confirmation
MindController: Guys am i doing something wrong?
MindController: chrono::duration_cast<chrono::milliseconds>(chrono::high_resolution_clock::now() - start).count()
MindController: If this gives me numbers biger than 100
MindController: When time limit is 50 ms
Mazelcop: do you start the chrono after you get the first input ?
MindController: Before?
MindController: It should be after?
Mazelcop: you should start it after, otherwise you are measuring your opponent's turn
MindController: Actually it still gives time > 50
Gonny: actually NinjaDoggy I think for this challenge the extra lines are always the same: 4 before a new turn. So I just added 4 lines of input() and I problem solved, at least for this contest :)
Gonny: I think problem solved*
Icebox: https://imgur.com/hGbABvp literally 2 timeouts
Icebox: it do be like that
NinjaDoggy: :O that's true!, thanks gonny
[Csongor]: I love how I just I rewrited some unreasonable code and it's worse than it was when it was unreasonable.
[Csongor]: What do you use to determine the value of a potion, is my price/amountOfMovesToMakeThisPotion bad?
NinjaDoggy: it's what i use too
NinjaDoggy: but it's not perfect
[Csongor]: I lose because I make more potions but at a smaller price
NinjaDoggy: wait what?
[Csongor]: so
NinjaDoggy: price/amountofmoves should prioritize big potions
NinjaDoggy: if you search deep enough
[Csongor]: I know
JamesOnnen: picking the left most potion and just picking legal moves with a weight towards that potion got me into top 100
[Csongor]: I think I knw the problem
[Csongor]: It set the depth to 2
NinjaDoggy: lol yea that's probably it
[Csongor]: It = I
Maliamnon: i get so anxious when i submit. I plummet into the low 300-400s, then slowly climb back into the top 70-80 lol
VizGhar: I've just realized, that my brain is damaged by years of coding in style "Just Display what backend sends you"
eulerscheZahl: here your bot is the backend
ChenHuang96: does codingame have a debugger option? like stepping through each line and watch window for variable values?
dbf: ChenHuang96, you may print values to stderr
ppeter: csongor hi! :D
[Csongor]: hi
ppeter: magyar? :)
[Csongor]: igen
[Csongor]: yes
ppeter: haha jonapot
ppeter: hows the lockdown at home?
[Csongor]: not bad
ppeter: cool, just surprised to see a fellow homie at this time ;)
sdaletskyi: Hi, am I getting rules wrong or there is a bug (0 < actionCount ≤ 100) ? https://imgur.com/rjvUdoF
eulerscheZahl: actionCount is not the same as actionId
eulerscheZahl: https://prnt.sc/vj0f4i
sdaletskyi: ok, thanks
fboccacini: am i missing something? everytime i try to learn a spell it says "not enough ingredients to learn x"
fboccacini: they all have tax 0
pb4: tax is what you'll receive
pb4: If you learn that spell
fboccacini: yes, but i can't acquire them in the first place
pb4: But you still have to pay its own tax, which you can calculate by the position in the tome queue
pb4: the first one costs 0, second one costs 1, etc..
fboccacini: that would be in tier 0 ingredients, the blue ones, rigth?
VizGhar: it cost (tier0*tomeIndex)
pb4: Yes
fboccacini: i'll try again, but i was sure i had enough even for that
fboccacini: well, it happens with the first on the list also
VizGhar: first is at the bottom ;)
fboccacini: alright! that's what i was missing
VizGhar: :thumbsup: glad to help
fboccacini: thank you! i just noticed, it actually had tom_index 4.. :grin:
Donotalo: i taught my witch to learn, now she doesn't have time to brew potion :(
stylemanguy: Hey guys, can the repeatable spells be cast any amount of times? 2 times or 5 times for example?
eulerscheZahl: yes
eulerscheZahl: as long as you don't run out of storage
stylemanguy: ok cool!
stylemanguy: that will be interesting to model in some tree search
MadKnight: anyone is using BFS ? is it good ?
eulerscheZahl: i tried and gave up on BFS
Westicles: So there have been 50 previous contests, and 0 won by an american?
strlcat: then take the initiative ! :grin:
eulerscheZahl: you checked every single one of them Westicles?
Westicles: yep. The oldest ones were mostly French
eulerscheZahl: do i somewhere see how many potions i finished or do i have to count myself?
lowzhao: u need to count yourself
eulerscheZahl: (╯°□°)╯︵ ┻━┻
struct: morning
mootez_nabli: hi
mootez_nabli: I want to be perfect in js
mootez_nabli: how?
[Csongor]: simple: practice
Donotalo: i'm getting this warning:
Donotalo: Warning: your code did not read all available input before printing an instruction, your outputs will not be synchronized with the game's turns and unexpected behaviour may occur.
eulerscheZahl: do you have multiple print statements?
[Csongor]: you have a print somewhere before reading an input
eulerscheZahl: probably printing twice in the same turn
strlcat: agree !
Csipcsirip: I had that warning when I accidentally put two endlines after the command I printed
Donotalo: i couldn't find double printing
Donotalo: however my code was timing out
Donotalo: i was searching too deep
Donotalo: after reducing depth, the warning goes away
Nerchio: usually this error is either a timeout or double printing
Csipcsirip: yeah that warning is a clear sign, that something is wrong your code :p
MadKnight: then what are u using euler ?
MadKnight: or Csipcsirip
Csipcsirip: I'm using BFS atm, but i don't think it's top10 wothy, so I might replace it soon
MadKnight: Csipcsirip but with what ?
Csipcsirip: with an other algorithm :p
MadKnight: u haven't decided yet which one ?
Doju: So, umm
Doju: to make a search of some kind, is this basically what one might need?
Doju: -a gamestate of some kind
Nerchio: in the higher leagues yes
Doju: -a thing to simulate future gamestates
Doju: -a data structure to hold the states
MadKnight: yea
Doju: -a thing to look through the structure and find the best one
Csipcsirip: not yet MadKnight, but I think it'll be some kind of ugly hybid algo
Doju: I think i might give it a shot for the first time
Doju: thanks
MindController: Guys taxCount for tome can be negative?
DaNinja: no, its the number of tier0 items you receive from learning the spell
MindController: But if its 3rd spell i need to pay extra 2, so it wont be -2
MindController: ?
zapakh: That's tomeIndex
DaNinja: taxIndex is 2
DaNinja: *tomeIndex
MadKnight: taxIndex doesn't include extra payment
MindController: Thanks
Westicles: Anything interesting in github besides all the spells?
DaNinja: you could try reverse engineering java shuffle() to get the next tome and delivery ;)
Doju: This thing is gonna branch really fast because the potions and tome are random, right?
Fox787: would be better to work out the average combination of all tome, work out what resources are more common
Doju: Right, that basically cuts down like 30^5 + 40^6 branches on every step
Doju: yeah there's no way anybody was doing that
struct: There are plenty of seeds to be able to find out which one is being used. But I can be wrong
zahariaca: tome is not random
struct: zahariaca is not random?
WINWINWIN: Any idea when Silver is opening?
zahariaca: 16th :D
Nerchio: monday
WINWINWIN: Thanks :)
zahariaca: "The tome is not infinite, there are exactly 42 spells within." from the description :D
zapakh: Shuffled though
struct: yeah, but they are shuffled
zahariaca: yes true
struct: The tome is random, the spells are not
ToshiTuringMachine: it's very sad that you all are thinking of hardcoding the solution
zahariaca: ok, understood, I miss read the discussion
ToshiTuringMachine: but yeah, probably the winner in legend league will have to exploit the pseudo random generators
blasterpoard: ToshiTuringMachine how about no?
ToshiTuringMachine: they will
Nerchio: nah
eulerscheZahl: i don't think so
struct: I also dont think it will happen
zapakh: I'ma press X to doubt
zapakh: Lots of probabilistic precomputation though
ErikBrendel: it currently says that silver is opening "11/17/20" - what's up with that? Was the date moved?
ToshiTuringMachine: hi eulerscheZahl! top ten again?
ToshiTuringMachine: :)
eulerscheZahl: for now
eulerscheZahl: have to improve my performance a lot
struct: it says 16-11 for me ErikBrendel
eulerscheZahl: creating 2k new lists each turn is a bad idea
Illedan: Just ask me next time euler, I'll let you know it is bad.
ToshiTuringMachine: :P wooow superhero illedan how are you?
eulerscheZahl: step 1: get it working step 2: get it fast
Nerchio: 3. even faster
ToshiTuringMachine: this chat is always full with best geniuses of the world
struct: I do those steps
struct: but reversed
eulerscheZahl: 4: give up and cry in the corner
Illedan: Hi, I'm playing around in an offline project working on performance and analysation of spells and customers.
Nerchio: realise you code in Java and go back to if logic
eulerscheZahl: but i'm still between 1 and 2
blasterpoard: I search ~150K states per turn... not too fast either
zapakh: *cries in 1K states per turn*
struct: 150k seems decent
ToshiTuringMachine: isn't that funny that google destroyed microsoft in company leaderboard? :)
eulerscheZahl: i can double zapakh but your number is jaw dropping
Illedan: (╯°□°)╯︵ ┻━┻
Nerchio: euler C# blaster C++
Illedan: I checked if I had enough resources, but forgot to make the cost positive -.-
eulerscheZahl: i have realease mode
struct: still c++ is not 75x faster
eulerscheZahl: no, that's a coding style thing
struct: yeah
eulerscheZahl: i have some ideas. after lunch
struct: allocating new memory costs a lot
ToshiTuringMachine: what about rust? I see a lot of them
zapakh: I'd kind of believe it once you get it down to a memcopy. My state copying is slow as heck
struct: rust has release mode too on arena
ToshiTuringMachine: also go seems having similar performance
eulerscheZahl: and first python down to 23 already
zapakh: I might go with Go idk
eulerscheZahl: meta evolves to search faster than i expected
struct: Do you think enemy prediction will be important at all?
eulerscheZahl: as important as for STC
Illedan: Yes
Illedan: agreed
zapakh: Probably, in Legend
ToshiTuringMachine: zapakh how do you learn go? i did the codeacademy course but didn't find anything advanced
zapakh: golang.org tutorial
eulerscheZahl: Illedan: yes = important or yes = STC?
Westicles: The winner will be the guy with the best tax algorithm
blasterpoard: early game, learning correct recipes is important (sooner than the opponent); late game, prediciton helps with choosing the correct potions
Illedan: ^
zapakh: Yeah it's kinda bad to follow a plan for a potion only to have it disappear due to enemy action
ErikBrendel: (can somebody please tell me what STC is?)
Illedan: Anyway, off to work on the house. ttyl
Illedan: Smash the Code
struct: ErikBrendel a multiplayer, Smash the code, is similar to puyo puyo
ErikBrendel: ah ok, thanks :)
ToshiTuringMachine: i feel like this contest is similar to code4life but without shared ingredients
eulerscheZahl: much different
eulerscheZahl: as in: a heuristic won't make it to legend
Nerchio: im doomed
ToshiTuringMachine: and prize that time was money not t-shirts
eulerscheZahl: C4L had no money prizes (but no tshirts either) was an iPad for the winner and something along the lines for 2nd and 3rd as well
struct: 4.5k players
struct: damn
zapakh: Yeah Silver League is going to be a real land grab :D
struct: 2.5k are on bronze
eulerscheZahl: that will be a laggy promotion
struct: Will probably be the biggest ammount of player promoted at once
zapakh: Do you guys know how many battles have been run? Because it seems like a lot.
struct: Dont think we have access to that data
struct: Would be a nice stat for CG to share at the end
struct: Number of games played in arena and number of games played on IDE
eulerscheZahl: last time they published these stats in a blogpost
eulerscheZahl: https://www.codingame.com/blog/spring-challenge-2020/
eulerscheZahl: 5 million battles, 114,932 code submissions
zapakh: nice
struct: And 4,955 players
struct: How many will it be for this
struct: 6k?
Westicles: The replays are numbered, you can tell from that?
eulerscheZahl: i go with 7k
eulerscheZahl: no Westicles. while we play teh contest, others try the onboarding :D
struct: Westicles but replays from other games also increaase that number
Westicles: ah
eulerscheZahl: 13,699 participants 4,955 finalists that counting...
eulerscheZahl: register to be a participant. submit anything and you are a finalist
struct: deceiving
struct: participants and registered would do it justice
eulerscheZahl: who cares about those who register but don't play anyways?
zapakh: But but engagement!
eulerscheZahl: obviously we don't work in marketing
eulerscheZahl: anyways, lunchtime. and then i'll try to increase my sim counts
struct: bon appetit
zapakh: Good luck
Hvosten: I thought that if I first cast six spells I will win :D dammit
struct: close enough
Doju: Aand again my code is devolving into spaghetti. How surprising.
MindController: Is it valid to compare vectors in c++ with ==?
casmith789: sure
blasterpoard: if you want to check whether they contain the same items, no
geppoz: always valid, depends what you want to check ;)
casmith789: https://en.cppreference.com/w/cpp/container/vector/operator_cmp
MindController: I would like to check if they contain the same items
blasterpoard: actually, it looks like it is correct
blasterpoard: according to the reference
Westicles: Yeah, it used to not work but I think it does now
casmith789: it will be correct unless you are doing something weird like storing two sets of pointers and comparing them
blasterpoard: TIL vectors have operators >,>=,<,<=... c++ surely has a lot of stuff I have never even considered
zapakh: STL is pretty great
anoburn: Is there any way to rewrite a printed line? I've tried to use \r to reduce my output, but it seems to do nothing
struct: what do you mean anoburn?
casmith789: save the string you want to output in a variable, and then overwrite the string. output the string at the end (don't write output and then overwrite it)
anoburn: I'm basically trying primitive error-hunting by building prints into my code. But it overwhelms the output, so I would like to always overwrite the same line until the code breaks. So I can't save it in a variable and print at the end, because it breaks somewhere before
anoburn: Usually with \r you can just jump back to the beginning of the line and overwrite previous prints, but I guess the codingame output does not work like a usual terminal
RockyMullet: hum, why did I win ? https://www.codingame.com/replay/501326995
RockyMullet: I randomly got 5 points in the end
struct: the resources you have on inventory
struct: above tier 0
zapakh: @anoburn does your language have exceptions?
RockyMullet: what !?!?! that's a thing ?
struct: give 1 point each
struct: yes
RockyMullet: I don't how I manage to missread the statement every contest lol
RockyMullet: thanks for the info
anoburn: I guess I can try using some, although there is no obvious error, just a timeout. But maybe I just don't see it in the output
blasterpoard: C++ errors are hard to debug here
zapakh: It's a shame we can't pipe output through tail or something
blasterpoard: either test locally, or make only small changes to make sure you know what's broken
RockyMullet: anoburn CG will call crash "timeouts" since you never sent an ouput since you crashed
anoburn: Aah. Is there a way in C++ to catch all exceptions?
xylorg: I don't understand the tome + tax stuff :(
RockyMullet: like blasterpoard said, your best bet is to test locally
blasterpoard: not every C++ crash is an exception
RockyMullet: but you'll need to go get your input and read that
blasterpoard: (most aren't)
anoburn: oh well ... looks like I don't have another choice. Thanks
struct: xylorg if you want to learn a spell from the tome that is not the one at the bottom you must pay a tax for every spell bellow it
zapakh: Yeah, I was thinking more like Java
struct: for example if you want to learn spell at index 2, you must pay 1 tax to index 0, and 1 tax to index 1
struct: 1 tax = 1 tier 0 ingredient
RockyMullet: tomeindex is pretty much the price you need to pay
struct: If you learn a spell that has tax, you will get the tax, the excess will be discarded
RockyMullet: so if (tier0Count >= tomeindex) and your good to go)
kovi: the usual hungarian pack
Tomfu: Hello everyone, is it just me or is the input broken for other people as well? Yesterday everything worked fine and suddenly today he complains that I don't read all the input, does anyone else have that problem?
zapakh: Only happens to me when I time out
Nerchio: maybe you print something twice or timeout
Tomfu: If I timeout, I don't read everything even if it is at the start?
Tomfu: I mean even if my reads are at the start?
RockyMullet: Likely what Nerchio saif
RockyMullet: said*
RockyMullet: if you output twice, it all becomes out of sinc
RockyMullet: or you have an early out in your loop
RockyMullet: meaning you dont read the end of it, there's a lot of input in this game
anoburn: Next thing: how do I run it locally? :sweat_smile: Is there a guide somewhere?
xylorg: struct what you mean by ? If you learn a spell that has tax, you will get the tax, the excess will be discarded
struct: If there is a spell that has tax in it
struct: you will get the ingredients that are there, it will be N tier 0 ingredients
xylorg: Ingridients to make cast the spell or the output of the spell its self?
struct: https://i.imgur.com/uKxQru5.png
struct: See those blue ingredients?
struct: if you learn spell at the bottom
struct: you will get 2 blue ingredients
struct: yes
struct: When you learn that spell you get the tax
xylorg: But since is the last one on the tome shouldn't be free?
struct: yes its free
RockyMullet: anoburn euler wrote this for smart people https://www.codingame.com/playgrounds/53705/contest-tools-and-workflow/introduction
xylorg: so why it has tax on it?
struct: because on the previous turns spells above it have been learned
struct: Imagine that you always lurn spell at index 1
struct: You will always have to pay a tax to spell 0
xylorg: Ok yeah it drops down on the list and then it becomes free makes sense
RockyMullet: but if your dumb like me: I make a define like "OUTPUT_INPUT" and add a bunch of #ifdef around the cinn to log them all in the error log. Run the game once on CG, copy that log to a file. Make a new stream which read this file. Then I run it again with the define and it's like I'm reading from CG the same game
RockyMullet: it is tedious the way I do it, I'll have to make it better at some point
RockyMullet: I plan to try the euler way at some point, but I'm pretty dumb when it comes to web
xylorg: So is like i Learn ID i got that spell. If is like tomeIndex 1 it will automatically pay 1 tax to the underling spell, and then i'll got the spell. If i learn the last spell (or any spell) that has tax paid on it i'll get the tax back
struct: anoburn also you can run the referee offline
struct: yes
struct: if you learn at tomeindex 2, you will have to pay to tomeindex1 and tomeindex0
RockyMullet: yeah, that's even smarter
xylorg: It will launch error if i don't have ingredients right?
struct: a warning
struct: you wont timeout
zapakh: You lose your turn, though
xylorg: And last thing repeatable is on the same turn? So i can cast it twice in a row in my own turn?
Westicles: Those twitch streams are possibly the most boring things I have ever encountered
anoburn: And how do I run the referee offline? :D
zapakh: Westicles Even better when people come to Twitch to complain how boring I am :D
RockyMullet: Westicles lol I think CG automaticly detect twitch with a codingame tag or something
Tomfu: @RockyMullet, but I haven't changed anything since yesterdays last run, I doubbled, tripple and quadroupple checked
struct: There are a few good streams
struct: errichto explains things well
RockyMullet: I missed it but I'm pretty sur Illedan's one was interesting
VizGhar: Hmm when should I start counting turn time?
RockyMullet: when you timeout :P
struct: after reading first input
RockyMullet: oh you mean in the loop lol
jacek: where else? :thinking:
RockyMullet: well the question was when
VizGhar: just asking :) I'm currently loosing many games, because of timeout even tho I'm checking it... I'll look for error then
RockyMullet: I still rarely go over 1 ms with a dept 2 search, I guess I should kick my but and make it posible for depth N
Nerchio: :O
Westicles: They playbacks show a red splotch when you timeout, so you can zoom in on it. Or at least they usually do
RockyMullet: there is way less permutations than other games
blasterpoard: depth is very important, though... going for potions fast means you can't use those ingredients to make more ingredients
blasterpoard: and then I often beat weaker bots like this: https://www.codingame.com/replay/501338498
VizGhar: ah now i see the error in my code.. qick fix
zapakh: ...Hey!!!
RockyMullet: blasterpoard yeah, going depth 2 made a great impact, specially for learning spells
zapakh: Yeah, I keep my inventory pretty light and it limits my options...hmm
blasterpoard: zapakh sorry :) I just wanted to demonstrate a gaem against a bot that doesn't search beyond the first brew
zapakh: Haha no hard feelings I think it demonstrates it really well
RockyMullet: blasterpoard how deep do you search ?
blasterpoard: 20
struct: ?
struct: what
struct: I quit
jacek: only spells?
RockyMullet: nice
zapakh: I do try to search beyond the first brew, but it doesn't make much difference when my depth only goes to 6 or so
RockyMullet: I can believe that, my depth 2 rarely go behond 1 ms, the sim is really simple with not that many permutations
wlesavo: blasterpoard do you search with learning or use separate estimations?
blasterpoard: wlesavo wait for postmortem
wlesavo: kk np :slight_smile:
jacek: but i want to know right meow
RockyMullet: and the deeper you, go less spells are available to cast or learn and less brews are brewable, so it does go down in permutations the deeper you go
VizGhar: :D ask him for algo right away :D
blasterpoard: still, the bots at the top have lots and lots of room for improvement
zapakh: "rest" is also a move
blasterpoard: for example, I still ignore some rules
RockyMullet: I just leanred that > tier0 in your inventory give points lol
zapakh: Some endgame attention can definitely finesse a few extra wins there
RockyMullet: yeah, I often have some "urgency" edge cases in my bot when the game is about to end
RockyMullet: removed the one I had on this one cause it sucked
RockyMullet: but if I try to become a big boi like blasterpoard and go for depth N, probably make it more agressive with prioritizing sooner result would help
Nerchio: so if you do that then do you search for anything
Nerchio: like any potion
Nerchio: or perhaps its better to direct the search towards potion you choose
Nerchio: i wonder between these 2 atm
Ikhadem: can i go back in leagues ( just to sort my thinking ) wnna go step by step in my logic
RockyMullet: also a pretty easy thing (I'm might do it) would be to know that your opponent is about to brew their 6th potion and try to stack the most > tier0 in your inventory since it's gonna end next turn
Nerchio: unfortunately no Ikhadem
struct: rocky doesnt matter
struct: if he brew 6 he wins
Ikhadem: can i go back in leagues ( just to sort my thinking ) wnna go step by step in my logic
Nerchio: struct i think thats not true
Nerchio: its about points
Nerchio: ?
struct: oh no
struct: I was wrong
struct: sorry
RockyMullet: struct no
Nerchio: you can lose by brewing 6th potion and having less points
struct: yeah I got confused
Nerchio: you can essentialy win the game by brewing something like 4 potions if your enemy brews low value stuff :D
RockyMullet: the replay I sent you that I didnt understand how I won what that situation, my opponent brewed 6th potion, but I won from inventory
zapakh: I cast random spells if brewing a sixth would kill me, but I haven't seen it help yet
RockyMullet: https://www.codingame.com/replay/501326995
RockyMullet: but I only got lucky, might as well try to do that
RockyMullet: damn nondeterministic bot ! Not giving the same gmae in IDE
Ikhadem: h
RockyMullet: ok found out another game where I lose from enemy brewing the 6th potion first :upside_down:
dreadylein: hi
struct: plenty of people Im sure
Nerchio: I'm new here playing since 1 year
Nerchio: :joy:
zapakh: I've been new forever
zapakh: ugh the sun is up
zapakh: why
lechium06_: @Nerchio Neeb vs TY in 1h, who are you cheering for?
Nerchio: I don't watch SC2 too much anymore tbh, but I saw buy TY vs Serral or Reynor would be more fun later
Nerchio: to watch ;p
Nerchio: not sure what 'buy' in my sentence was supposed to be
Nerchio: not many Koreans left, Serral or Reynor vs KR would be more fun later
Nerchio: thats the message xD
lechium06_: that 'buy' was the accidental swarmhost
Nerchio: but i am programming my witch atm
Nerchio: not swarmhosts
lechium06_: I'm pretty sure we're gonna get Serral vs TY tomorrow
Nerchio: good
lechium06_: btw I guess there's still a bit of competitive mindset left, except for coding instead of SC2
lechium06_: cheers man, glhf
Nerchio: for sure there is
SimonPrins: Funny, I'm coding a SC2 AI. :D
[Csongor]: How can I create a copy of my list of Spell class in C#? I searched for almost 30 minutes now, but nothing works.
Barimehdi77: I want to get the id of The potion who has the highest price so I write the folowing code
Barimehdi77: http://chat.codingame.com/pastebin/d9cec2f4-2fe4-4741-b6f0-4585bb19103c
Barimehdi77: but in output i get this
Barimehdi77: http://chat.codingame.com/pastebin/0e64927e-49ec-43ed-a343-df3a6e2d5758
Barimehdi77: my full code is
Barimehdi77: http://chat.codingame.com/pastebin/675da740-ecd0-4029-8830-92d82aa0e255
VizGhar: you ate probably computing againt all actions, not BREW only?
linjoehan: you got to put highest = 0 at the start @ Barimehdi77
Barimehdi77: yeap I think so
Barimehdi77: so the spells have no price?
linjoehan: if you don't give it a value it will have the value of what ever was left in those memory by the last thing that touched it. which might have been Chrome
linjoehan: and yes spells have no price
offroff: you need to pay the blue ingredient corresponding to tomeIndex (if tomeIndex is 0 it's free)
offroff: that is if you learn a spell
Barimehdi77: but when i edit my code to this
Barimehdi77: http://chat.codingame.com/pastebin/db990f7d-51bd-4c79-ad63-dd891e074017
offroff: casting. aspell is free
Barimehdi77: i got this output
Barimehdi77: http://chat.codingame.com/pastebin/7f87db51-4fb8-42af-9dc8-4e8cd525f5c3
Barimehdi77: and the id 44 have the lower price not the highest
ErikBrendel: Have you defined highest and id_of_hight_price outside of the loop?
Barimehdi77: no inside of the loop
ErikBrendel: try moving it outside, that may help
zapakh: Why inv. ?
Barimehdi77: i make a struct to store the data of my inventory in inv
zapakh: but you updated id_of_hight_price, not inv.id_of_hight_price
Barimehdi77: I try to remove inv. but I get 0 in all the output
Barimehdi77: http://chat.codingame.com/pastebin/099bb5ff-1a75-4ab9-975f-bafa753d4f23
zapakh: how about adding inv?
Barimehdi77: I tried to move highest and id_of_highest outside the loop and i get the same output
Barimehdi77: zapakh: could you explain more?
zapakh: Did you want id_of_hight to be in the inv structure or no?
linjoehan: you are updating id_of_height_price which is not the thing in your struct I think it should be t_inv.id_of_height_price
Barimehdi77: zapakh yes that's what i trying to do
linjoehan: No inv.id_of_height_price
zapakh: ^
Barimehdi77: when I did it i get the same init value
zapakh: Because you're not initializing inv.id_of_hight_price ?
linjoehan: What he said
ErikBrendel: (how can I send a private message to somebody?)
linjoehan: click on their name and it will open a private window?
Barimehdi77: I tried it before like this
ErikBrendel: with somebody who hasn't written here in the chat yet (sombebody I lost against)
Barimehdi77: http://chat.codingame.com/pastebin/9bf55009-3a4d-4d09-a9ad-6f86dec31339
Barimehdi77: http://chat.codingame.com/pastebin/5a3bee59-9794-461d-9b82-0fbf1d83a653
struct: you need to follow him and he needs to follow you back
Barimehdi77: the val id_of_highest dosen't change I dont know why?
eulerscheZahl: ErikBrendel or a private message on the forum
eulerscheZahl: that always works and even sends an email
Quidome: it depends which one
Quidome: forget it I was way back in the chat :P
eulerscheZahl: in which chat? :P
geppoz: "Whenever they memorise a spell with ingredients placed upon it, they also acquire those ingredients, which become usable on the next turn. If the witch's inventory is full, the excess is discarded."?
struct: the spells that have tax on it
struct: The resources will go to your iventory
geppoz: so just one tier-0
struct: But only the resources that are on tax, so only tier 0
struct: or multiple
geppoz: ok
Quidome: Learned spell are repeatable by default?
eulerscheZahl: depends on the spell
eulerscheZahl: some are. the "spawns" aren't
zapakh: Used to be :p
eulerscheZahl: true :D
Maliamnon: Quidome - https://www.codingame.com/forum/t/fall-challenge-2020-bugs-questions/187495
That bug was fixed :)
completementgaga: please, for the fall challenge, i don't understand the format of the orders' data, do we have to store it when the first loop is running?
eulerscheZahl: yes
offroff: the potion bonus, do we need to keep track of that or can it be parsed?
Xenoid: The bonus is included in the price
ErikBrendel: you mean the urgency bonus? This is _not_ directly part of the price, but instead in the tomeIndex variable for orders (see input description)
Xenoid: The urgency bonus is included in the price
Xenoid: price the amount of rupees this will win you if this is a potion recipe, 0 otherwise. This includes the urgency bonus.
zapakh: Yeah, that turned out to be incorrect
zapakh: Er, n/m I think they changed it
offroff: yeah, the urgency bonus, thx for telling
struct: price includes bonus
Quidome: OK, let me refrase, the spawned spells are not repeatable and all the tome spells are?
zapakh: Only some tome spells are repeatable
Xenoid: The tome spells that have a cost are repeatable
Quidome: Aha, that helps
Xenoid: The tome spells that are all upside (only pluses) are not repeatable
Quidome: thnxs :)
VizGhar: I believe (about that repeatable flag) there was some bug previously? Read that in forum. But yes, you should check repeatable
tomatoes: hi whensday93
Quidome: Is there a limit on the number of spells learned?
tomatoes: 42+4
Quidome: :D
Quidome: ok, thnxs
QPN: hello
geppoz: can we assume the tome is given in order, in input (it seems so, but can we rely on this)?
tomatoes: you can sort it by tomeIndex
geppoz: i know, just asking if i can skip that sort, since it seems already given in order
geppoz: ok, silly question :D
Washier: tomatoes, would love to hear your take on this. Any tips\thoughts
Washier: *on this= broad srtategy
tomatoes: bruteforce for now
Earthborne: Warning about printing before reading all inputs, is that more probably the bot being too late?
Counterbalance: it's most likely the bot printing more than once in 1 turn
Xenoid: Earthborne, I have gotten that warning when running out of time sometimes
Washier: ty
Earthborne: Yep, Xenoid that's when I'm getting it too, when I increase my search depth too much
cegprakash: is 1300 a good rank without learning skills?
cegprakash: did anyone make it to top 500 without learning spells
Hvosten: 700-800
geppoz: im 955 without learn
Earthborne: ^ same
cegprakash: that's amazing
cegprakash: I'll try some replays with u guys
tomatoes: learn some first free
RockyMullet: hu, the last battle doesnt show me the right game...
RockyMullet: ok refreshing it worked
RockyMullet: was weird, I lost a game, pressed "show" to watch it, watching it: I win. Then I realize it's not even the same player im against
Earthborne: Is anyone else experiencing the displayed score at the end of the game not matching the one on the end of game screen?
geppoz: y
RockyMullet: Earthborne yes
Xenoid: You get points for each remaining ingredient from tier 1, tier 2, tier 3
RockyMullet: I just learned this morning that all tier1 and above in your inventory gives you 1 extra point in the end
Earthborne: Oh, okay
Earthborne: I just had a game where I lost just because of that
Marcelo-Hackerman: how do i get a better rank?
struct: improve and submit
Amitos: is there something after bronze league? or is it just compete for the best rank?
Donotalo: click on the league
Quidome: silver, gold and legend :)
Earthborne: Silver, gold and legend are being released soon
struct: A player from top N% will be chosen as the boss, and all the players above it will be promoted
struct: if you are not promoted, you can still be promoted later by submiting and getting above the boss rank
Quidome: silver wiil open on the 16th
Maliamnon: Marcelo - make your bot smarter. Personally I like to watch the battles I lose very closely and correct the dumb things my bot does
RockyMullet: wondering if my current bot will be good enough for straight to gold
RockyMullet: 63, hum not sure
struct: doubt it
Washier: I'm guessing the game won't get more complex beyond bronze? anyone have a better guess?
RockyMullet: obivously good enough for silver
Xenoid: There will be no additional rules added
Washier: ty
RockyMullet: other bots make it harder, not the game itself
Washier: just curious, how do you know?
geppoz: wtf the actionId of the LEARN will not be the same for use it??
Xenoid: Because it's been that way for years
RockyMullet: Washier has been like that for years
Washier: haha
yonder83: players can learn same spell
Nerchio: i am rank 900 using only basic spells
Nerchio: :joy:
struct: I need to start coding
RockyMullet: Nerchio really ? I had to implement spell learning to get to bronze, life's not fair I guess
Washier: ty RockyMullet . sounds right
Nerchio: Rocky atm i have depth 4 bfs its probably better than many newbies :D
RockyMullet: yeah well thats better than mine haha
RockyMullet: just added depth 2 yesterday
Earthborne: Wow you're doing so good with only depth 4?
Washier: jeepers, any trees at this stage is quite good imo
Nerchio: i mean its depth 4 with only basic spells xD
Nerchio: i dont buy anything
RockyMullet: well im 58th with depth 2
Nerchio: you have depth 2 probably with buying spells and all that funky stuf
RockyMullet: yeah im surprise is doing good actually
Nerchio: so thats better ;P
Bobbadillio: I'm 1700th with waiting every turn, so y'know
RockyMullet: depth 2 without learning spells was making my bot worse
Washier: impressive for depth 2
Bobbadillio: things are getting pretty serious
struct: Rocky I was lucky and got bronze with my 5 minutes code
struct: My first submit
Washier: not a simple game this
Nerchio: im not sure really if buying spells should be in my search algorithm
Maliamnon: I am doing depth 3 with an ingredient value heuristic and i'm top 50 :)
RockyMullet: Nerchio learning a spell means you can use it on dept + 1
RockyMullet: you can also learn a spell with tax on it instead of casting a spell giving you only tier0
Nerchio: well i guess there is some merit to it
Nerchio: but im thinking if i don't find a nice path towards anything then i should be looking for optimal spells
struct: I think I must try this game
Nerchio: not neccessarily ones that will open a path to 1 out of 5 potions
RockyMullet: Maliamnon I should probably do that... I treat all ingredient as same value rn
struct: I never do well on these kinds of games
struct: because I dont know what to implement
Maliamnon: I have learning in mine Nechrio
Washier: same here struct
RockyMullet: struct feel you, it's hard to visualize
Maliamnon: RockeyMullet - I derived it from the list of all potions
RockyMullet: I like to watch a multiple game to think about what I could do, this one, it's hard to see
Maliamnon: it's solvable with about 10 minutes in excel :)
Earthborne: Oh, I dropped my search depth from upto 10 to 4 and it gave almost the same score
RockyMullet: wait a minute
RockyMullet: potions are hardcoded ?
Icebox: yes
Earthborne: guess depth isn't all
jacek: eeyup
RockyMullet: oh god
Maliamnon: https://github.com/CodinGame/FallChallenge2020/blob/main/src/main/java/com/codingame/game/Deck.java
RockyMullet: *scribles notes furiously*
struct: recipes too
Icebox: I have a weird question with a wild guess
Washier: *squinting*
struct: yes Icebox?
Icebox: My code that runs around 900ms on turn one had a timeout probability of around 5% tonight
Icebox: without changing anything it rose to around 40%
struct: ouch
Icebox: could it be that server is just having more stress and takes slightly longer?
RockyMullet: does past potion can come back ?
Icebox: with more people submitting
Maliamnon: Icebox - I think the hosts are slower during busy times, yeah
Washier: *noob* busy ersvers
Icebox: okay thought so
Washier: *im noob*
Doju: What's the point of opponent_cast?
Doju: Just so that you know that the opponent has that spell available?
struct: to know opponent learnt spells
Doju: ok thanks
RockyMullet: Doju knowing opponent spells, so you can predict
Maliamnon: Doju - you can guess/predict what they're doing if you want
Doju: right
RockyMullet: I still dont do anything with it, but I get the idea
Doju: Yeah. I'm just trying to get a super basic and super shallow sim working before I have to stop
Doju: so that's not gonna be happening haha
RockyMullet: so my question got lost in the chat, if a potion is completed, can the same potion come back as a new potion ?
Washier: aren't the potions random
reCurse: It's impossible
RockyMullet: Washier apparently not
reCurse: You can only complete 11 potions at most
Washier: aah, ty
reCurse: And there's 36 of them
RockyMullet: so the potion order is predetermined at start
reCurse: Yes
RockyMullet: not everytime a new potion pops up
RockyMullet: good good thanks
reCurse: It's a shuffled deck
Doju: Do I have any chance at getting a search of at least depth 2 working with python?
RockyMullet: also go away reCurse im #1 in canada
Doju: I really can't rewrite this in c++
RockyMullet: shhussh
reCurse: You're not :)
RockyMullet: hahaa
geppoz: Doju i also think i'm going to switch from python to c
Bobbadillio: anybody else like rust? :D
Doju: yeah geppoz that's a good idea but i really only have this afternoon to finish this
Washier: ooooohhhhh, some Canadaian fighting talk going on
Washier: very polite
Washier: :)
RockyMullet: canadian trashtalking is pretty intense yeah
Bobbadillio: If you're coming from python, I think you'll have better luck picking up Rust and having a compiler that checks your code for fundamental problems
Doju: Hm
geppoz: no I'm newbie in python
Bobbadillio: What I'm saying is: as someone who switched from python to rust for this sort of thing, I write terrible code
geppoz: try to use to learn it
Doju: I've had a look at rust and it looks interesting
geppoz: im confortable with java, c
Washier: then rust is natural
geppoz: so i don't want to learn rust too :D
reCurse: It looks good but I'm always worried about the lack of external libraries/support when they're needed
Uljahn: they said python is viable :pensive:
reCurse: There's more to a language than a language
Bobbadillio: Yeah, some of it's pretty new, and the library ecosystem is definitely not fully mature/complete
Washier: true that
Bobbadillio: The ML/Data Science stuff for example is pretty rough
geppoz: yeah it is, i'm having depth 7 in python
Bobbadillio: And it just added language support for async/await with a somewhat controversial syntax?
geppoz: but i suppose when things will get more serious we will need far more
Doju: Wow really geppoz? How much pruning are you doing?
Washier: for ML/DS its almost no choice, python or R
geppoz: BF, but not use LEARN
struct: D
Washier: not taken off
Doju: Ah, right.
geppoz: with LEARN will be a problem
RockyMullet: geppoz at some point depth is not as meaningfull, since your opponent can screw up your predicition
geppoz: yes right
geppoz: +as soon as he took away an order...
RockyMullet: my only enemy prediction right is checking if he can brew a potion
RockyMullet: and I dont much with it
RockyMullet: use it as a tie breaker
RockyMullet: and if its the last potion, I try to full my inventory of tier1+ ingeredients
reCurse: Wasting a weekend over 2.6k players bronze league sucks
dbf: we don't have portions count for players in input so need to track change in score?
RockyMullet: yeah, a contest starting a thursday, it's a long time before silver
RockyMullet: I feel they should've open silver tommorow instead
RockyMullet: or even today
RockyMullet: bronze is still about implementing the last set of rules
RockyMullet: silver is where the "rule completeÈ bots are
struct: Also silver will be quite big
reCurse: I doubt that
reCurse: Given how simple the game is I'm pretty sure the top 100 has all rules
Washier: simple?
reCurse: Simple rules yes
struct: Game is simple to implement
Washier: <cat crying meme>
RockyMullet: it's pretty much a bunch of substractions and additions in the end
geppoz: :D
struct: Having chat open is almost impossible atm...
Bobbadillio: @RockyMullet All computer science is fundamentally just a bunch of logical operations
RockyMullet: true true
Washier: yes, also see the simple adding vetor angle, but still not simple
Spifflejedi: o/
geppoz: there will ever be any reason to "WAIT"?
RockyMullet: geppoz I dont see any
Majeck: To Forfeti
Majeck: *forfeit
geppoz: learn the free one instead, right?
struct: to trash talk your opponent
geppoz: :D
reCurse: LEARN 0 is the new WAIT
Spifflejedi: hey for the experienced player, do we have any idea of the probability to get the +3 / + bonuses?
RockyMullet: my fall back is to check if there's an ok spell to learn or rest
RockyMullet: but since I added learn and rest in my sim, it doesnt reach the fallback much anymore
Washier: sim is working then
RockyMullet: I also learn a bunch of spells at the begining to reduce the possibility of locking myself in an impossible situation
RockyMullet: Spifflejedi it's first potion +3, second +1 and there's a max to it
geppoz: with "LEARN" my depth dropped to 5
reCurse: You're never locked though
Washier: so RockyMullet,you do more than if-else?
RockyMullet: geppoz youre bot is probably better still
RockyMullet: Washier yeah I know it's unusual coming from me lol
RockyMullet: rip heuristic bot
Waffle3z: if your inv has 10 t3 then you're stuck unless something requires all t3
Washier: cool ty, also aiming for that
RockyMullet: reCurse by locked I mean, no spell that can be casted
reCurse: So you learn new ones
RockyMullet: exactly
Washier: what do I do with "@Inject ". why aren't game engines done in C :)
reCurse: Not sure how that's better or worse than learning random ones at start..
Spifflejedi: @RockyMullet: I've read that but the description suggests the bonusnis not garanteed even if all the bonuses haven't been granted yet
RockyMullet: well at the start of the game you still have plenty of time to make poitions, more spells = more posibilities
Doju: Ohh
reCurse: I'd argue there's no difference between random learns at start and when you're stuck
RockyMullet: will in the sim, (at least mine) I only leanr spells that I can use in the near futur
Doju: no wonder my bot wasnt brewing things
reCurse: I'd even go to say random learn at start is always worse
RockyMullet: reCurse oh yeah thats for sure
Doju: i gave those actions a negative value haha
RockyMullet: worse
RockyMullet: nah
reCurse: Yeah
RockyMullet: it costs 0
RockyMullet: but maybe it's how my current bot works that make it better
Earthborne: Warning: your code did not read all available input before printing an instruction" getting this again, but now I was only just reading input and printing 'LEARN <tome[0]>'
reCurse: I'm pretty sure of my position but I won't bother proving it :)
RockyMullet: probably with a deeper search I could drop it
RockyMullet: and I can for sure be wrong
dreadylein: @earthborne did you restart your loop after it ? Or is the rest of your logic still running after it?
Earthborne: heh, ofc, pretty much "if early game: grab spell else: do search"
Earthborne: if turn_count < 5:
print(f"LEARN {free_spell} Grab some free spells first") else: step = gs.run_games()
Washier: ty
RockyMullet: I probably should do at least depth 3
RockyMullet: something I never do right now
RockyMullet: is cast a spell to get tier0 to learn a spell, to then use it
RockyMullet: which can only be done with depth >= 3
struct: Just go depth 20
Washier: hehe
RockyMullet: yeah I'm more affraid of miss evaluating the score when going too deep
RockyMullet: if I think I can pull this awesome move in 20 turns, but get blocked by the other player at turn 19, I waste my time
Average_Barclays_Employee: I'm on Wood 1 League and I'm getting error "attempted an invalid action: Spell 78 is not repeatable'
Average_Barclays_Employee: Is it a bug?
RockyMullet: Average_Barclays_Employee you trying to cast a spell you already casted without resting
anoburn: The messages from earlier are sadly gone. Is there any chance to get actual debugging output from c++? I've got the game to work locally, but have no idea how to get any output except what I see on codingame anyway
RockyMullet: some spells are repeatable and dont need to rest to be recasted
Xenoid: anoburn, use cerr
Washier: ^^
RockyMullet: when at least locally you can break in your code
anoburn: Xenoid, that doesn't tell me what happened when my code just crashes
jacek: then cerr every line and see when it stops :v
RockyMullet: well you have a call stack and the whole memory to look at
anoburn: how do I look at that?
RockyMullet: pretty much 1000 times better than debugging with cerr on CG :P
anoburn: that's exactly my hope :D
RockyMullet: are you using visual studio ?
Uljahn: RockyMullet: what? repeatable spells allow multicast in one turn and then you have to rest to reuse them, no?
anoburn: yeah. I launch the game from Eclipse and have my bot added as an agent
RockyMullet: I'm not really familiar with other IDE
RockyMullet: Uljahn huuuuuuuu
anoburn: Problem is I'm not launching the code from visual studio, but from Eclipse when the game is simulated
RockyMullet: you are making me doubt myself now
jacek: yeah, you can cast more times in 1 turn but its not castable
eulerscheZahl: i switched from MonoDevelop to VS code for this one
RockyMullet: Uljahn oh shit you are right
RockyMullet: "Some spells are repeatable, meaning they can be used multiple times on the same turn before becoming exhausted."
struct: Im using vs code with wsl2, it has been fine
jacek: i use notepad.exe :v
PrgmrN: i use geany ;)
RockyMullet: it's not really important in my depth 2 sim since I can never cast the same spell in 2 different turn, but I'll have to take that into account for depth N
anoburn: And do you launch the game from VS? Or how do you get at the call stack?
eulerscheZahl: i copy-paste the input of 1 turn to a text file
eulerscheZahl: and use that as stdin when running my code locally
RockyMullet: I cant speak of other IDE, but in VS when you debugin mode, you have a window with the callstack and a watch to look at your variables
anoburn: aaah
RockyMullet: yeah like euler said
anoburn: Sounds tedious, but very helpful
Washier: RockyMullet, VS debug is my home
Earthborne: Trying to time first turn now, and after first loop of input I'm apparently on >3 sec, is that weird?
FrankR: can you learn a tome spell when your inventory is full, but the spell pays for itself due to the tax back?
eulerscheZahl: no, you have to pay before
FrankR: (oh and your inventory contains no tier0 resources)
zapakh: Learned that one the hard way :)
FrankR: hrm.. ok.. thanks
Uljahn: i guess excessive tax returned is ignored
eulerscheZahl: eventually the opponent will learn cheaper spells and unstuck you
Counterbalance: Earthborne you should start measuring after reading the first line of input, each turn. The 3s you see is the referee and the other bot starting up etc..
SujalAI: I tried prioritizing potions of higher price first but the results were very bad, I can't figure out why. Does anyone have an idea why?
Earthborne: Oh, even if I start from inside the game loop?
casmith789: probably because higher price potions are harder to make
casmith789: (on average)
SujalAI: Is there a way to get the code for the deafult ai?
struct: no
Uljahn: yes, you should be one of CG staff
jacek: or mod
struct: I can already see the pms coming
FrankR: our company has players ranked ~400, 514, 758, 1305, 2375. The top 100 company has 952, 1152, 2564, 2845, 2926.. why isn't our company listed? I thought the top 5 employees only count ?
eulerscheZahl: i'm pretty sure Bob had it. submitted with Typescript and was at the bottom early in the contest
eulerscheZahl: are they shown in your company FrankR?
FrankR: aah.. CG screws with me.. just after posing the question the board refreshes and we're at 39 out of nowhere
eulerscheZahl: :D
eulerscheZahl: i just realized that CG creates chatrooms for your school and company
jacek: huh
eulerscheZahl: mine are extremely active (insert image of dead animal below cactus)
eulerscheZahl: here https://prnt.sc/vj5421
Earthborne: That out-of-sync seems really random, it never happens on second attempt on same conditions
reCurse: out of sync is easily solved by keeping input reading and output writing out of your code and only in the main loop
Earthborne: I have
**Earthborne studies his code to make sure he has
reCurse: In case I'm not clear
reCurse: while (true) { state = read_inputs(); action = play(state); output(action); }
reCurse: Can't go wrong
starmaq: finite state machines time
reCurse: I'm starting to get the feeling this contest will end like locam
Zenoscave: remind me how locam ended
kovi: i have the same feeling
reCurse: 1 point separating top 20 or 50 I think?
Zenoscave: I can see that happening
eulerscheZahl: same
RoboStac: one of the cg staff was saying the out of sync message is being displayed when you timeout as well as when you go out of sync
reCurse: This may have been better as a weekend contest
DomiKo: how locam ended?
eulerscheZahl: i think there isn't that much strategic depth
eulerscheZahl: locam had a clear order at top3
jacek: so less than a point between nothing and t-shirt?
reCurse: clear ehhhhh
eulerscheZahl: below it was quite random
eulerscheZahl: you got a well deserved 2nd place
eulerscheZahl: i saw closet better than you, sorry
reCurse: I wasn't insinuating in that direction
reCurse: More like the rankings felt random overall
eulerscheZahl: yeah, i hated that contest
Zenoscave: moin
eulerscheZahl: so, do we steal LEARNs this time? (kidding, it's more complex than drafts)
kovi: actually i had the feeling of that
reCurse: Yeah nowhere similar
eulerscheZahl: your spells can't be scored alone i think. depends on the other spells you have. how well they add up
Zenoscave: euler did you do the precompute yet
eulerscheZahl: which precompute?
Zenoscave: inventory 1001
eulerscheZahl: i never planned to do so
Zenoscave: I must've misremembered the convo
kovi: true, combinations do matter (actualy they do in hearthstone, but not in locam)
Maliamnon: to me, there seems to be a bit of unresolved sequencing. rest to recast a create so that your conversion can be repeated - for example
Maliamnon: or maybe some of you are ahead of me and have figured that out :)
thibpat: Hi everyone :wave: I'm live streaming the fall challenge in JavaScript now! Feel free to join on https://twitch.tv/thibpat
icecream17: i'm trying to combine learn cast and rest somehow
Uemu[yazid]: Hey, I get the message "Internal error. An error report has been sent to the CodinGame team." once every couple of times, should I ignore it or is the problem from me ? xd
Presac: I think I've made a horrible mess in the fall challenge. It's sooo badly optimized. I really don't know enough about dfs and bfs...
Maliamnon: Presac - that's part of the fun! For me it's as much about learning as it is about doing well.
SmolPepeL: where is fun about bot programming when it's all about machine learning...
Maliamnon: You can do very will without ML Smol
icecream17: I didn't do BFS or DFS, am i doing something wrong?
SmolPepeL: yeah, like the tutorial levels, maybe. What about challenging the leaderboard
Presac: Well, I mostly just feel like I don't know where I'm supposed to go/look. Don't really have much experience with this.
Cappefra: I didn't do graphs either icecream
Tandy1000: I just started. Can I has job now?
nan0S_: ras
Presac: Which different methods are usually used for this?
Cappefra: monte carlo is pretty popular
dbf: Presac, just watch some bfs/dfs tutorial to be familiar with algo itself and then think how to represent state/do transpositions and you are done
Presac: I mostly have a bfs/dfs, but run out of time with a depth bigger than 5
Presac: Probably my evaluation of how good a node is that is wack.
Earthborne: Damnit, I isolated input/output in separate functions called from the main loop, but I'm still getting out of sync
RockyMullet: I generally don't change the input default code, to avoid messing up something
Counterbalance: it's the first thing i rip apart
RockyMullet: Counterbalance well I'm not as brave as you :cry:
jke: Earthborne check for excessive newlines in output, that can cause it as well.
Earthborne: RockyMullet things like moving delta0...3 into a list instead of 4 variables, does that break the sync?
Braykin08: I'm getting out of sync too, didn't change the starting code
Earthborne: No extra newlines
starmaq: what I hate the most about python is its syntax errors
starmaq: I write one long line of code and it just yeets a syntax error with no additional info
starmaq: one long line of golf code*
starmaq: then I spend the next 4 minutes fixing that
Doju: My sync just broke too
Doju: they must've changed something
rak1507: That's why you write more than one line lol
Earthborne: Could still be that I time out, my check on number of computations isn't all that reliable
SmolPepeL: yeah, you always optimise the code later, that's the rule
starmaq: I'm not a python dude so I got used to writing a lot in a single line, but python is not super good at that it seems
SmolPepeL: less brackets to worry about, sounds like the best language to write single lines in
Earthborne: Oh, I just realized that I'm using DFS while I should be using BFS on the search tree, no wonder I got a C in algorithms
starmaq: it's not as easy as you'd expect
starmaq: when you start using lambdas
starmaq: it's a nightmare
Earthborne: oi
Earthborne: Isolated input/output, now I'm getting out of sync even more often
Counterbalance: does the game end when you get out of sync? I.e., is it a timeout?
Counterbalance: your bot might be crashing..
Earthborne: Nope, I get the warning and then it might play upto 50-60 turns before timing out
Counterbalance: if i'm not mistaken, the warning is printed at the top, regardless of where it happens, so it's probably because of the timeout.
LuckyJ.: Hey, same problem of sync here
LuckyJ.: I reactivate all my verbose stuff for the turn it stopped to understand it but then, time out ('cause of the lost of printing) And no message for the sync anymore
LuckyJ.: So I'm sure how the 'sync error' <-> 'time out' are related
LuckyJ.: I'm not sure*
Earthborne: If it was the bot crashing I would expect it to happen on the same place every time
Earthborne: But now with 10 replays it happened only twice and on different turns
Doju: I think my algo is gonna use waayy too much memory
ProMikeSundays: i have a problem that i cant maximize the editor
meh1001: try a different browser, or disable plugins at least and see if that helps
ProMikeSundays: but this problem only arrived when i started using this chat feature
roglemorph: u refresh right?
Panagis: does java assist work?
ProMikeSundays: ´what is java assist?
ProMikeSundays: and yes i have refreshed, but thanks for the info roglemorph
Panagis: "Activating Java Language Assist" for a long time :/
roglemorph: how u do red text
struct: java assist seems to be having problems
rcar: type roglemorph to see red text
Icebox: this is legit not normal
Icebox: I wanna throw the pc out the window
struct: why Icebox?
Icebox: how does a piece of code that takes precisely 600ms still have around 10% of chance to timeout on turn 1
struct: Still first turn problems?
Icebox: yes
Doju: Umm, what kind of structure is good for storing the possible game states?
Doju: Just a tree?
Icebox: I optimized the **** out of it
Doju: Or maybe only the last level of the tree?
Icebox: Standard Error Stream: Line 19 - 560ms 886μs
struct: Try reporting it on discord, I doubt it will get fixed before monday though
Icebox: how does spamming "replay in same conditions" ever make that timing out
Icebox: time*
reCurse: First turn includes runtime initialization and all that
reCurse: It was never really meant to give your bot extra time
Uljahn: same condition doesn't mean you get the same cpu i guess
Ben_J88: if multiple output are sent in one trun, which one is registered by the system ? the first one ? the last one ?
reCurse: It causes desync
struct: they stack
Braykin08: You know what's missing from the last contest? Emojis
reCurse: No
MaroIsLife: :grinning:
zahariaca: what was the command to say something ?
eulerscheZahl: just append it
struct: just add a space, REST message
zahariaca: ah cool, thx
Braykin08: You would append it after your command, "Move up 🍆"
05K4R: I have quite a few battles that I lose after 7-8 turns, but they work fine when I run them in the IDE. Is performance the problem here?
Earthborne: Sounds like the same problem I'm having 05K4R
Earthborne: Haha, now my opponent timed out the same way
cegprakash: bronze leaderboard too slow
Cappefra: I'm curious, is there any of you in top 500 bronze without any tome logic?
AntiSquid: 4.7k already o_o
dreadylein: @cappefra yes
Cappefra: nice!
Cappefra: I'm procrastinating implementing the tome :D
[CG]SaiksyApo: Who? because dread use tome
Doju: I'm so confused about how the tome works
Doju: like... is the tax shared?
Doju: and how on earth does it work
tomatoes: tome_index = price, tax = reward for learning
dreadylein: ah saiksyapo isnt wrong , i dont have logic tho, just grabbing a handfull spells in the first few rounds to widen options
AntiSquid: tome greatly increases wins without any logic
dreadylein: missinterpreted logic in this context i guess ;)
Cappefra: oh ok
Cappefra: well then I guess I'll have to start by doing that too
icecream17: i just noticed - there's nothing to learn that requires two different ingredients
icecream17: take a look
icecream17: * Tomespells: http://chat.codingame.com/pastebin/42756a51-a1ff-47a5-a938-0dea71396c8b
icecream17: aw
icecream17: nevermind, somehow i didn't see the first two
[CG]SaiksyApo: :D
Cappefra: I was so confused there for a moment @icecream17 :D
Maliamnon: Anyone have advice on a good timer for C#?
PatrickMcGinnisII: why would you need a -1,0,-1,1 when u have a 0,0,-1,1 ?
[CG]SaiksyApo: Stopwatch
Q12: How do you decide which Cast spell to learn?
icecream17: well, maybe the 0, 0, -1, 1 is the 42nd learn
Maliamnon: ty saiksy
icecream17: Most people learn the first 10
Zenoscave: [CG]SaiksyApo is right Maliamnon. System.Diagnostics.Stopwatch
icecream17: You can make a usefulness grader for each learn then pick the best one
ParticleBeam: is the tome randomly generated or are the entries always the same with different shuffling?
Zenoscave: the latter ParticleBeam
Q12: Thanks icecream17
ParticleBeam: Thanks
icecream17: You can check out the source code of this game on this GitHub repo. You can find a list of all possible spells in the tome.
[CG]SaiksyApo: You need to start the timer after reading the first input tho
Maliamnon: https://github.com/CodinGame/FallChallenge2020/blob/main/src/main/java/com/codingame/game/Deck.java ParticleBeam
icecream17: oh, nvm, it was already answered
ParticleBeam: Thanks. I see the deliveries are also the same.
Zenoscave: yup
Ekaon: How do you guys debug all the thing ? Do you only use the CodingGame ide ?
Zenoscave: currently, yes Ekaon. But there's also brutal tester
Ekaon: Brutal tester ?
Zenoscave: https://github.com/dreignier/cg-brutaltester
Zenoscave: some setup is required
DanTheMan832: Guys, what happens if both players try and buy the same thing
struct: they both get it
Zenoscave: both get the points
icecream17: technical details: When both witches perform the same action, they both reap the rewards for that action. This applies namely to potion prices, the urgency bonus, the read-ahead tax, and learning spells.
icecream17: aw, my copy and paste is so slow compared to typing
Zenoscave: lol icecream17
roglemorph: do I have to wait with the test for arena open
roglemorph: and its gonna take awhile
GetSchwifty: where does the bronze boss usually end up; top 10% gets through to silver? or does bronze use a predefined boss ..
struct: Usually top 40%
GetSchwifty: nice
struct: bot there are a lot of players on bronze
struct: so it might be a little bit lower
icecream17: phew, i'm probably good
struct: But I think 40% is quite high for this contest
GetSchwifty: roglemorph, what league are ya in?
sparky: just had to implement WAIT, but if you have to wait you've already lost :/
rcar: REST > WAIT
roglemorph: bronze
RockyMullet: a little table flip to get the tie https://www.codingame.com/replay/501489913
Doju: Oh hey my witch is finally doing things
Earthborne: :clap:
GetSchwifty: roglemorph - you can start test in arena whenever you want, but silver league will only open up in 2 days
Doju: Although this is still heuristics
Doju: and crappy ones at that
icecream17: my usefullness for learning things is way too complicated
RockyMullet: icecream17 once you have simulation it because pretty clear, since you can simulate using it the next turn
AntiSquid: top 50%, it was like top 30% or less for pacman :P
AntiSquid: ah chat scroll nice
RockyMullet: hello AntiSquid from the past
Barimehdi77: is there is any spell that doesn't have an action_id?
AntiSquid: hello mullet and human attached to it
RockyMullet: I'll be sad to learn that we still don't have flying cars in this distant futur
RockyMullet: you'll * damn
RockyMullet: Barimehdi77 they all have an id
Doug: @RockyMullet Orlando is building the first Flying-Car Hub in the US, FYI
Earthborne: Wow, decreased number of computed gameStates and jumpet on the leaderboard, I guess it was actually my code timing out:P
AntiSquid: there are flying cars for years now, but none like the ones from the movie
dreadylein: mh ?
Barimehdi77: i'm trying to sort all the potions using there price (highest to the lower) put when i'm printing this own id I get this
Barimehdi77: http://chat.codingame.com/pastebin/217980f2-69c7-4144-9c48-26504bd87472
Icebox: AntiSquid flying cars, or planes that look like cards?
Barimehdi77: this is where i have the problem
Barimehdi77: i = 5 price = 3 id = -1457670072
Icebox: cars*
AntiSquid: hybrids? :P
Icebox: nah
rcar: are you sure that one is a potion, Barimehdi77?
Doju: I now have a hopefully working gamestate system
Doju: now for the hard part...
Icebox: we have a lot of car-ish looking planes, but no flying cars yet
Icebox: all planes have wheels AntiSquid, that doesn't make them flying cars either
reCurse: Always thought 'flying cars' was about 'flying for private use'
struct: flying cars that need an airstrip to land are not cars to me
Icebox: yeah exactly struct
Donotalo: bug fixed only to find out there are more bugs :(
Doju: I reckon BFS until time runs out is gonna be a valid option for now?
Doju: or actually i guess it's a flood fill
Barimehdi77: rcar: yeap cuz I store all The data in actions so I send them to a func who sort them
Braykin08: A flying car is basically just a drone
Earthborne: Floodfill until time runs out is gonna do Doju, just not actually let the time run out like I'm doing:P
geppoz: how do you put the logo on your school or company?
Doju: haha :D thanks Earthborne, I'm gonnat try to do that now
AntiSquid: do cars with wind turbines count ? they can lift up somewhat vertically
rcar: Barimehdi not all actions are potions though. there's only 5 potions available at any given time
Earthborne: Doju while I'm going to rewrite to use bfs
Doju: I have a feeling that the tree is gonna blow up immediately if it's not pruned at all but whatever, lets give it a shot
cegprakash: why do I see lot of "may" in problem statement
cegprakash: The first spell in the list "may" be learnt freely.
"You may only do this if you can afford it."
reCurse: Because you're not forced?
Maliamnon: you'd prefer April?
Earthborne: My fear when doing naive floodfill is that I'll waste all the time following a worthless path
Doju: if i do this:
wlesavo: ceg reading statement instead of asking in chat :scream:
Doju: [func(x) for x in x_list if func(x)]
Doju: will func(x) be calculated twice or is python smart enough to only do it once?
Zenoscave: twice
Earthborne: yep, i guess twice
Doju: okay, thanks
DeCe: you can do something like y=f(x) for x in list if y
Earthborne: no automatic memoization
Maliamnon: won the first 25 straight after submit, i think tha's a new PB
Zenoscave: DeCe in python not sure if delegated assignment works that way
Zenoscave: may be wrong
Remus_: What would happen if I had 0 tier-0 ingredients when learning tomeIndex = 1 and taxCount = 1? Would I get it or is it a bad action?
Illedan: reCurse 05:26PM This may have been better as a weekend contest Agreed!
Earthborne: Wouldn't that be where := comes into play?
DeCe: Zenoscave I think i read that in new 3.8 features
Doju: oh really DeCe? that's exactly what i need. thanks
struct: Remus_ bad action
Zenoscave: yeah 3.8 has the walrus
Remus_: thanks
Earthborne: but is CG using 3.8?
Topjimmies: somehow my random action bot is better than my optimized one
Remus_: You were lucky then
Zenoscave: Earthborne it uses 3.7.4
Maliamnon: Or you're optimizing for the wrong thing ;)
Zenoscave: https://www.codingame.com/faq
Topjimmies: or my "optimization" isn't actually good
Earthborne: So no walrus yet then
Zenoscave: nope
Donotalo: leaving my bot at rank 250, going to sleep
Q12: From when the response time start? from the beginning of the while loop (before inputs) or after receiving the inputs?
Zenoscave: after reading the first input
lambrosk: So if i understand correctly
Zenoscave: is the best estimate. but any Preemptive OS will be not precise
lambrosk: to add tax to a spell i simply increase tax count?
Q12: after reading this variable: actionCount?
HolyLoremIpsum_c4e6: anyone knows which C complier are they using here/.
Counterbalance: ^ see the link to the faq
Zenoscave: Q12 yes. Iambrosk yes
Q12: Thanks
Zenoscave: HolyLoremIpsum_c4e6 https://www.codingame.com/faq
HolyLoremIpsum_c4e6: ohh thanks
Zenoscave: yw np
Q12: how do I append message to my command? I just need to put space and then my message?
Remus_: Interesting, first time running my AI. It says best possible score at depth 5 is 969289844. Magnificent!
RockyMullet: Remus you should win all games with that score :smile:
Bobbadillio: That sounds like a big score!
aCat: or an overflow :joy_cat:
Andy176822: I'm getting a strange result where my bot gets 60, the opposition 58. But in the final score card is shows that the opposition got 64 and beat me ???
Maliamnon: you get points for inventory at the end andy
Andy176822: ohhhhh
aCat: you have bonus for materials of tier > 0
Andy176822: I didn't know that
Maliamnon: Anything more than level 0 counts for 1 point
Andy176822: thank you very much
RockyMullet: you can steal some wins here and tehre by detecting that your opponent is about to brew their 6th potion and just try to full your inventory
dbf: I've just implemented a code that detects last move and trade resources to get final bonus. Works like a charm: instead of 71-41 a lost just 71-42
eulerscheZahl: http://chat.codingame.com/pastebin/1718c396-e72f-465a-8cab-881c2d150749
eulerscheZahl: oops
Maliamnon: lol dbg
Maliamnon: dbf*
Nerchio: and i was fixing bug for 2 hours
Nerchio: instead of doing shallow copy i was copying the list reference
Nerchio: :x
RockyMullet: eulerscheZahl yeah, I feel I have a week to convert my depth to in depth N, so I'm lazy
RockyMullet: depth 2* in a depth N
RockyMullet: I doubt I'll make it legend and I'm pretty sur depth N will be good enough for gold, so I wasting time on the chat instead of coding
Nerchio: i think good bfs(or whatever search) with some nice heuristics will be able to make legend
Nerchio: but we will see :p
RockyMullet: yeah, I doubt mine will be "good" lol
eulerscheZahl: i still need those heuristics
RockyMullet: I'll likely do a bfs for my search
eulerscheZahl: and more depth!!!!
Nerchio: plenty of time for t hat
RockyMullet: I'm curious to see how deep I can go, I feel it's not really perf heavy
RockyMullet: eulerscheZahl you going like depth 6-7 ?
Nerchio: i started with bfs although i want to do some beam search maybe later
eulerscheZahl: this contest is a CPU masterrace
Nerchio: but i had some bugs and now i got tired xD
eulerscheZahl: see my messages RockyMullet
eulerscheZahl: https://www.codingame.com/share-replay/501692461 random game
RockyMullet: yeah, I watched a game I sadly lost against you and noticed the message
RockyMullet: oh some depth 11 in there
eulerscheZahl: outliners
RockyMullet: is it only based on avoiding timeouts or do you some times stop before ?
eulerscheZahl: just time
RockyMullet: kk
ParticleBeam: So many nodes...
Maliamnon: so is the time we're judged on starting after we parse inputs?
struct: after 1st input
aCat: euler it's wide search or some beam?
eulerscheZahl: :zipper_mouth:
wlesavo: damn euler comes up with a killing move
cegprakash: what is that extension that shows the rank of all players in battle list
cegprakash: CG spunk?
Zenoscave: aCat what is wide Search?
eulerscheZahl: stop analyzing me wlesavo
aCat: oh I mean full search
Zenoscave: ah
wlesavo: you started it :smiley:
reCurse: C#?
aCat: like not cutting the moves
Zenoscave: wlesavo stop analyzing ever?
struct: I would start porting to c++ euler
eulerscheZahl: might be a good idea
Zenoscave: Yes euler port to c++
eulerscheZahl: but you know i'm stubborn
Zenoscave: I'll stay c#
eulerscheZahl: you want to win the language?
eulerscheZahl: then convert to D
Zenoscave: I already won a language. Just want to be first in C# specifically
Zenoscave: of course if you leave it's a hollow win... so no actually stay on c#
cegprakash: why no one vote for me on who wins fall challenge poll
reCurse: Rhetorical question?
Bobbadillio: I haven't voted at all, and who are you?
Zenoscave: there's a poll?
cegprakash: https://www.codingame.com/forum/t/poll-who-will-win-the-fall-challenge-2020/187257
eulerscheZahl: automaton is so overrated
struct: I changed my vote
cegprakash: looks like someone just voted for eulerscheZahl
cegprakash: how to change vote
Zenoscave: My money is on emil. Strong for a newcommer
struct: press show vote ceg
cegprakash: okay voted for eulerscheZahl
eulerscheZahl: i voted negligence. statistically it seems the most likely option
cegprakash: who is negligence
WINWINWIN: He means someone thats not on the list
eulerscheZahl: can't copy the full text
cegprakash: yeah that includes me
cegprakash: that gives me hope
cegprakash: i just want to see diagrams of eulerscheZahl and his debugging tools
cegprakash: so just voted for eulerscheZahl
struct: new automaton?
eulerscheZahl: 2020?
eulerscheZahl: that's from dbdr, for the chat history
Zenoscave: Other than Linq Concat is there a fast way to concat IEnumerables?
Zenoscave: Maybe separate loop unrolling needed here
eulerscheZahl: i opted for separate loops
eulerscheZahl: hm, Concat is probably better than the Union I used
NickTheFirst: Hey guys, Im trying the Fall Challenge and i have come to a position where the code im running in my Visual Studio gives me the correct result but when i put it in the Coding Game it messes up the results. Is there any quick tips on what it may go wrong (i have removed and copy pasted the whole code 10 times already
Zenoscave: Union is awfully slow. def change to concat euler
Zenoscave: yw
Zenoscave: NickTheFirst Could be timeout related?
cegprakash: what is the difference between a normal spell and tome spell
cegprakash: what's the meaning of tome
Nerchio: Nick you don't tell us what is the error :P
eulerscheZahl: 2 loops is fast enough :P
Zenoscave: CEG READ THE INSTRUCTIONS
eulerscheZahl: do we have a a marco for that yet?
Zenoscave: we should
Zenoscave: :rtfm_ceg:
Zenoscave: :book:
Astrobytes: A marco eh? :P
NickTheFirst: @Zenoscave what is the time limit that we need to run the code ? is there an easy way to test for that ? @Nerchio the output is not the same. Meaning in my vs i get 17 steps and in Coding Game i get 1
andrefpoliveira: Well I guess I will give up on C# and return to Python xD
meh1001: A "tome" is a big book. Maybe that's what they mean. "Tome spell" = spell you get from reading a big book
eulerscheZahl: what appears to be the problem with C#?
andrefpoliveira: The problem is me :joy:
Zenoscave: 1S for the first turn and 50ms after
andrefpoliveira: Im just more used to Python xD
Zenoscave: 1 sec
Zenoscave: stick with C# there's no better time to learn than right now
eulerscheZahl: yeah, i totally agree
andrefpoliveira: Hmm
**eulerscheZahl refuses to convert to C++
andrefpoliveira: AHAHAH
**struct changes vote again
eulerscheZahl: go ahead struct. i wouldn't even vote for myself
struct: I believe at least in top 10 for you
Zenoscave: I'm just shooting for top 20
Zenoscave: Have a ways to go though
Zenoscave: was 12th at one point
eulerscheZahl: let's for for the :tshirt:
eulerscheZahl: :shirt:
Zenoscave: That's my goal!
Zenoscave: it'd be my first
struct: how many CG shirts do you have already euler?
eulerscheZahl: i won 8 but gave some away
NickTheFirst: Not sure that its a time out the hardest one takes around 14ms to compute everything
**PatrickMcGinnisII is caffeinated beyond being productive
**eulerscheZahl won't be productive anymore either until the end of the day
eulerscheZahl: emil is back
**Astrobytes hasn't been in the slightest bit productive all day
**Illedan is starting for the day now
eulerscheZahl: you and your weird sleep cycle
**jrke ending for day now gn
eulerscheZahl: as in: completely broken
Illedan: I coded until 4 am last night xD
eulerscheZahl: already midnight for jrke as well
Illedan: We are remodelling the kitchen, no time to code during daylight :P
eulerscheZahl: :D
eulerscheZahl: where is my number shifting app?
VizGhar: how many kuds u have? :D
Nerchio: 1 kid per multi
Illedan: I did rewrite big parts of it last weekend
Astrobytes: Yeah, doing work in the house is no excuse for the lack of app
Astrobytes: :P
VizGhar: i have less then 1hr for this :(
eulerscheZahl: you aren't supposed to refactor. patch it and ship it
Illedan: :D
Illedan: I wanted better features
VizGhar: :thumbsup:
Illedan: You'll see
Illedan: going to be legendary
eulerscheZahl: gotta wait till friday for legend
cegprakash: I don't understand tomeIndex and taxCount when learning spell
zapakh: tomeIndex is what you pay, taxCount is what you get back
cegprakash: if I learn a spell I'll gain ingredients?
_Lupus_: tomeindex is how much you pay for it, taxCount is what you get out of it
Zenoscave: rtfm ceg
_Lupus_: the taxes both players pay are placed on spells in the tome. the one(s) who learn it get these ingredients
cegprakash: red ahead tax means?
cegprakash: I need to pay rupees?
_Lupus_: no, tier-0 ingredients
_Lupus_: it's in the rule description ;)
cegprakash: what happens to the tax
cegprakash: can I get it back
Astrobytes: Read it laddie!
cegprakash: so basically if inv0 >= tomeIndex I can learn the spell
cegprakash: right?
zapakh: Yes
mojojojo: and is the read ahead tax automatically applied when I try to learn a spell which is not the first?
_Lupus_: yes
mojojojo: ok thanks
eulerscheZahl: you have to pay first and get a refund from the tax
cegprakash: refund?
cegprakash: :o
eulerscheZahl: if you can'T afford the initial bid, you don't get it
cegprakash: bid?
eulerscheZahl: refund: https://www.youtube.com/watch?v=X4PllvUowaQ&ab_channel=JimBrowning
_Lupus_: dude, read the instructions :D
cegprakash: are they even in prob statement?
struct: Will never know if you dont read it
_Lupus_: yes, assuming you have reached a league where these rules apply :)
Astrobytes: ceg never reads the statement, it's his hallmark
cegprakash: I read every line
cegprakash: I never saw bid or refund
struct: ahah
struct: You read the chat statement
eulerscheZahl: looking at it doesn't mean reading it
mojojojo: what if opponent and I try to learn a spell higher up together? Both of our tier-0 money is on the line?
cegprakash: and I don't understand any statement that contains a tax in it
Scarfield: xD
eulerscheZahl: let's report ceg to the IRS
Hurda: Hi in Javascript what is the way to get current tme in millies?
_Lupus_: You learn from the tome, you have to pay blue ingredients for it (unless it's the first spell). The tax is distribute across all tome spells with lower index than the one you learned
cegprakash: higher spell :o
eulerscheZahl: are you high?
cegprakash: okay so first spell is free
mojojojo: high on blue ingredient pills
cegprakash: all the time?
_Lupus_: If the spell you learn has blue ingredients on it, you get them to the inventory, provided that you have room for them
cegprakash: I saw may be free
cegprakash: so I was confused
cegprakash: is the first spell always free?
Uljahn: no
struct: the first spell on tome
Uljahn: it cost 0
_Lupus_: yes, the first spell is always free
_Lupus_: So if you want you can spend 42 turns learning stuff for free. When the tome is empty, it's empty
cegprakash: okay what does it mean by bidding
cegprakash: lets say I go for 2nd spell first
cegprakash: so I need to pay 1 t0 ingredient?
cegprakash: will I get it this turn itself
cegprakash: or I've to wait?
Astrobytes: jeez
_Lupus_: you get it immediately and can use it next turn
_Lupus_: it's not an auction. Whoever wrote bid meant "pay"
cegprakash: okay so there is no bidding
cegprakash: eulerscheZahl confused me
Astrobytes: Let him figure it out like the rest of us!
cegprakash: thanks
eulerscheZahl: and that's why you read the statement and don't listen to the chat
Astrobytes: ceg, you're a good guy but I wish you'd figure things out on your own for once!!!
cegprakash: hey
cegprakash: I read
cegprakash: and can't get
cegprakash: I either ask
struct: Also dont forget to read the part where you trade rupees
cegprakash: or just stare
Astrobytes: Check the code!
cegprakash: I stared for 2 hrs
eulerscheZahl: rupee trading is a game changer
Scarfield: xD
Astrobytes: :smirk:
Scarfield: to be fair, the statement isnt that clear :) but you do have a reputation in this regard ceggy :p
cegprakash: nope
cegprakash: it's not clear to me
cegprakash: if it's clear for u
cegprakash: does not mean it's clear for everybody
struct: Its not clear
struct: But you do this every contest
cegprakash: tax is usually what ppl pay to govt.
Astrobytes: No it's not that clear, but you can check the code
cegprakash: in this game why the witch gains tax
cegprakash: its just weird
cegprakash: naming
struct: ok...
Scarfield: yea taxes isnt usually paid back to costumers :D
mojojojo: i'd like the govt to pay me tax too
Astrobytes: that's what rebates are for
Braykin08: That sortof the point of tax, they 'should' go back to the community
Astrobytes: They seldom do
mojojojo: only if the tax paid in game gave me more milliseconds...
mojojojo: rich would keep getting rich
mojojojo: realistic
Astrobytes: lol
HungryBurger: Does anyone know if it's possible to turn off Language Assist? I haven't been able to find an option yet.
zapakh: There was a user script floating around to hide the popup elements, but it hasn't been working for me
Scarfield: on the extra milliseconds part, i thought couldnt you make a CG game, where it was possible to output "still thinking", then opponent gets a turn to think as well, but will only be allowed to output "still thinking", since its still the first players turn to move. Couldnt this achive a possibillity of a time bank on CG?
HungryBurger: Oh, haha, so they added a feature that you can't turn off? :-)
eulerscheZahl: a complicated one. you still have to be responsive to claim that extra time
mojojojo: implementing that part in game backend would probably be difficult
Scarfield: yea, but at least it seems possible? never made a contribution, so i have no idea if it would work
mojojojo: or on second thought, maybe not. it's just a new command which tells interpreter to skip the turn
mojojojo: but user program state is destroyed each turn I assume
eulerscheZahl: it would work but i don't think it's a userexperience worth implementing
mojojojo: i agree
Scarfield: well i have seen people here mentioning having a possiblility of a time bank in games could be nice. Had the idea for a work around and wanted to share it :)
andrefpoliveira: Hey guys I would like some piece of advise if anyone want and could help :) I'm new to C# and trying some BFS. But obviously, using new everytime is not useful. But neither is creating an array of States and then initiallizing all... Any help on how to optimize this? No problem if it something I should not ask xD Just say so
Doju: bugs
Doju: bugs everywhere
Majeck: Fix one bug and three more appear
andrefpoliveira: Its like hydra
struct: I dont know C#, but on c++ I just allocate memory I will need at the start
andrefpoliveira: That was my idea but is very slow...
struct: By start I mean first turn
andrefpoliveira: Yeah yeah same
struct: Its still slow, even after allocating?
jacek: you get 1s in first turn
Astrobytes: ~1s
HungryBurger: @Majeck - http://www.developermemes.com/2014/12/17/grumpy-cat-patching-bugs-developer-meme/
andrefpoliveira: Maybe 1000 is too much for an array?
Astrobytes: (that's a tilde if you can't see it btw)
struct: Whats the size of each?
andrefpoliveira: Hmm Im using a class
andrefpoliveira: Not sure of the size
Counterbalance: you have 768mb so i doubt that's a problem
Counterbalance: could it be that you're not setting 'visited' when you add a neighbour but only when you process that node?
andrefpoliveira: I was not marking them as visited actually...
Majeck: Lol
andrefpoliveira: I was considering that a state will only pass once
andrefpoliveira: Maybe that is dumb
Astrobytes: That *could* be a problem :P
andrefpoliveira: AHAHAH
andrefpoliveira: Yap maybe
jacek: oO
andrefpoliveira: But like... if you remove them from the queue they wont happen again no?
AntiSquid: "LEARN id: your witch attemps to learn the tome spell with the given id. " small mistake but ...
Scarfield: if you dont consider them visited, what will stop them from being added to the queue again? :)
Counterbalance: yeah that's one way to do it, if you don't add anything back to that queue (like when exploring neighbours)
andrefpoliveira: Hmm okok then I need to make an override of the equals probably
andrefpoliveira: Tyy
eulerscheZahl: class State : IEquatable<State>
eulerscheZahl: then implement Equals(State) and GetHashCode()
Xenoid: Ties are ties
sirsatan: both 1st places
sirsatan: but chance is very low for tie
Xenoid: it's a low chance but they do happen
geppoz: lol my bot choosed to learn [-1,0,-1,+1] , when he has the default one [0,0,-1,+1] that is already better :D
zapakh: Yeah but now he can cast both without a rest in between
Nerchio: there is [-1,0,-1,+1]?
Nerchio: i will hardcode to never take it XD
geppoz: yes there is :D
Scarfield: https://github.com/CodinGame/FallChallenge2020/blob/main/src/main/java/com/codingame/game/Deck.java Nerchio
Nerchio: yea i know thanks
Nerchio: soon i will try to evaluate them :p
PatrickMcGinnisII: someone pasted this earlier: http://chat.codingame.com/pastebin/42756a51-a1ff-47a5-a938-0dea71396c8b
HungryBurger: Use every part of the ingredient.
geppoz: tbh there is a difference, that is repeatable, but my bot dont yet use that
jacek: also sometimes you want to free your inventory
Nerchio: i'd argue that's pretty niche
xSkyline: Hi guys, I'm new here. Can you break your bot into multiple files here in the IDE ?
jacek: no
struct: no but there are extensions to sync file with IDE
Nerchio: in the IDE no that's why people who visit the site more often code outside the IDE and have some merging scripts
xSkyline: Thanks ! I guess I'll google around for something for Visual Studio
Fox787: yeah i'll have to look at how to merge java files. I've just been coding one class instead of multiple
struct: Skyline I use this one for c++ https://github.com/MarcosCosmos/cg-cpp-bundler
struct: Whenever I build I run that python script
xSkyline: Thanks, I'll check it out
xSkyline: mindless prototyping in a single file gets old really quick.
xSkyline: now I can mindlessly prototype in multiple files !
mojojojo: is there a Python bundler like this one?
struct: I don't know
ClockSort: i haven't been bundling in VS (C#) and I'm at 500 lines. Haha
Astrobytes: should be trivial enough to write a python merger in python no?
mojojojo: yeah but i thought let's not reinvent the wheel
HungryBurger: I use bash to glue files together. But you have to be familiar with cat, xargs, and piping.
Doju: ClockSort, my python file (single file, written all in the codingame IDE) was 1k lines long :D
Doju: for the spring challenge
Doju: Oh no
Doju: why is this bug back
struct: No bugs yet
Doju: this is doesn't help at all
struct: Havent started coded though
Doju: http://chat.codingame.com/pastebin/5e95956f-8ab9-420d-b7ab-a7de0a8de8f2
struct: coding*
Astrobytes: I have a bug in my motivation :P
Nerchio: in chat the whole day haven't started coding :D
Nerchio: nice one struct
Astrobytes: I was busy today, that's my excuse
Astrobytes: But probably won't start til Monday tbh
cegprakash: oh now I see tax refund :D
cegprakash: implemented learn
Astrobytes: lol
cegprakash: but I've some bug on 40th turn
Bobbadillio: I frequently encountered a bug last night. It was a box elder bug, and it kept crawling back onto me for some reason. I ran into the same bug this morning, and dropped it outside.
cegprakash: I'm trying to learn a skill with wrong ID
Astrobytes: Fix it
BenjaminUrquhart: it's not a bug, it's a feature
BenjaminUrquhart: smh
Astrobytes: lol Bobbadillio
Bobbadillio: happy to entertain :)
jthemphill: does anyone have a C++ macro that would make writing hash/equality functions less tedious?
jthemphill: i'm thiiis close to switching back to Rust just for `#[derive(Eq, Hash)]`
Bobbadillio: gotta admit, I love the derives. When I get to choose my own crates, there's a derive_more crate that lets you derive add too, I think, which is shockingly useful
jthemphill: yeah it's great
Bobbadillio: Looks like I'm out of wood 1!
Bobbadillio: or about to be
Doju: gratz :D
Doju: oh no
Doju: deepcopy doesn't like my GameState class
ClockSort: I wote my own deep copy :P
Bobbadillio: Any clue what your deepcopy is doing wrong?
HungryBurger: Bobbadillio is almost out of the woods.
Doju: It's not passing all the arguments to a constructor
Doju: ew__() missing 3 required positional arguments: 'b', 'c', and 'd'
Doju: that's __new__()
Illedan: (╯°□°)╯︵ ┻━┻
Illedan: 2 hours of trying to make code use bitboards and it is slower -.-
struct: next try avx
Bobbadillio: bitboards for the fall challenge, or something else?
cegprakash: this error is weird :o
Illedan: ye
cegprakash: may be c++ fast IO
Astrobytes: It's fine, you have until 6am Illedan, don't worry :P
Bobbadillio: Huh, what does a bitboard look like for the fall challenge?
Doju: oh my god
cegprakash: there is only 1 learn in input but somehow I traverse learn command twice :o
Illedan: 0b000_0000_0000_000_0000_0000
Doju: aahh why did i do this this way
Illedan: Then replace the 0 with 1 as needed
Illedan: xD
struct: lol
Doju: What even is a bitboard o.o
Illedan: Astrobytes, no sleep until 1st
Astrobytes: :D
Bobbadillio: That appears to be a 5 byte bitboard? gotta admit, I'm confused
Doju: huh, that's some fancy thing
Illedan: I'll accept being above euler though
Doju: you really want all the performance that silicon is gonna give you
Bobbadillio: Doju, a bitboard is a binary representation of game state, usually indicating where things are.
Illedan: Thx bobba
Illedan: :)
Bobbadillio: So like, in chess you can have a 64 bit type that stores a 1 or 0 for each square where a pawn is or isn't
Illedan: I tried to keep the inventory as a bitboard
Doju: Oh, I see
Bobbadillio: Fair enough, order doesn't matter of the bitboard, right? But you could still do it?
Astrobytes: what went wrong Illedan?
Illedan: On 10 million operations the array is on avreage 1 ms faster.
Bobbadillio: (order of the bitboard in THIS challenge, don't let what I said confuse you Doju, the order of bits VERY much matters for chess/go/tictactoe etc)
Doju: Right, bobbadillio. gotcha
Astrobytes: Ah, intrinsics needed
cegprakash: oh shit
struct: _mm256_set1_epi8()
cegprakash: the bug was
cegprakash: const int MAX_SPELLS = 20;
struct: you do the rest Illedan
Illedan: Trying this now
Doju: I'll just make a class inherit list instead of tuple somewhere deep within my code and hope nothing breaks...
struct: good luck Illedan
Zenoscave: euler you have timeouts
Illedan: He is sleeping
Zenoscave: bah
Illedan: But wait 1 hour and he might wake up
Illedan: xD
struct: he is online on discord though?
Astrobytes: Doju: exploring bitboards where order matters visually: http://cinnamonchess.altervista.org/bitboard_calculator/Calc.html
Zenoscave: fair enough lol
struct: Illedan are you really going to try avx?
Illedan: Nah
Illedan: I have used some time to try and structure my models to give it any sense
Illedan: none found
Astrobytes: Ask him again during the week struct :P
Bobbadillio: If you write "compiler friendly" code, won't C++ compilers use avx for you?
Zenoscave: not sure but I don't think always
Illedan: My code is friendly. I have variable names like: var compiler_rocks = 42; var looking_good_today = new int[4];
Illedan: Didn't help :(
Astrobytes: you can enable auto-vectorization yeah, but oftentimes if you really need SIMD stuff you have to do it manually
Astrobytes: Illedan :rofl:
Psyho: not without any optimization flags (I assume CG is still without -O2/-O3?)
Bobbadillio: Yeah, and nobody wants to contort their code until the compiler gets satisfied anyway. No way, CG has to have O2/O3, doesn't it?
Scarfield: var dontForgetToBringATowel
Astrobytes: nope, gotta use The Pragmas
Psyho: If you're using SIMD manually, you can quite often use it in more creative ways (there are few operations that are non-trivial to use)
struct: When I tried AVX on csb I got around 2mill sims
Scarfield: Psyho, you know about these:
- pragma GCC optimize "O3,omit-frame-pointer,inline"
- pragma GCC option("arch=native", "tune=native", "no-zero-upper")
jacek: Ofast plx
Astrobytes: that should be for Bobbadillio Scarfield, I think psyho knows
Psyho: yeah, I know, but I'm not sure if this translates to producing auto-vectorized code
jacek: pragmafield
Scarfield: oh, chat scrolled, or im just blind :p
Astrobytes: gotta specify avx, avx2 or whatever you're using
Bobbadillio: Yeah, I had no idea you C++ folks had to deal with that :D I've sort of wished I could get some control over compiler flags as a rust competitor
Bobbadillio: And I REALLY want to get access to 1.46 (I think?) which introduced more features to the Rust constexpr equivalent
struct: cg takes a while to update languages
cegprakash: submitted first version of my code with LEARN
Psyho: I honestly don't remember what was the reason for not having optimization flags set for c++ (maybe decent msgs in the editor?)
Psyho: but we could always have "c++ release / c++ debug" modes
Astrobytes: *specify using #pragma GCC target ("avx2") for example
Astrobytes: I can't remember either
cegprakash: omg 39 turns eulerscheZahl ends the game :o
Astrobytes: It's not like we get decent messages in the IDE anyway lol
cegprakash: I shouldn't test against eulerscheZahl
icecream17: =O i won the first 10 games
Zenoscave: https://www.codingame.com/share-replay/501835850 39 turns isn't hard
Psyho: btw, does anyone know memory limit?
Xenoid: 786MB
Zenoscave: 768MB
Astrobytes: 768
Xenoid: err 768MB
Zenoscave: c-c-c-combo breaker
Scarfield: xD
Astrobytes: lol
Scarfield: Finish Him!
Zenoscave: FATALITY
Astrobytes: that's jacek's line :P
Psyho: huh, I got a crash with 64MB so I guess it's not a memory limit :D
Zenoscave: timeout perhaps psycho
Astrobytes: :)
Zenoscave: but I'm sure you're aware of that
xSkyline: How do the leagues work ? do they segregate coders based on results ?
icecream17: beat a boss in a league to move on to the next one
icecream17: silver isn't open, so there's no boss in bronze yetr
HungryBurger: Hey help ease you into the game. Rather than overwhelm you with all the game rules at once, they help you focus on a few rules at a time.
Psyho: I get "collect2: error: ld returned 1 exit status" so I guess it's memory limit
Scarfield: segfault mayhaps?
xSkyline: So if I'm currently in the bronze league does this mean I beat a boss ? did this happen when I clicked test in arena ?
Xenoid: Yes, and yes
Scarfield: you have leagued up from wood 2 to wood 1, and from there to bronze
Psyho: I believe it means it doesn't even compile :)
icecream17: Dim Sum Saying beat me first, in this ...weird game https://www.codingame.com/share-replay/501839707
Psyho: too much static memory probably
Zenoscave: Yeah are you allocating a huge 1M array?
Psyho: more like 64MB, but yeah
Zenoscave: that's blocked me before Don't remember the size limit
Scarfield: can static memory be a problem, how?
Zenoscave: Compiler will refuse if it heap sprays
cegprakash: omg my win rate looks crazy
cegprakash: :o
Scarfield: interesting, i should look under the hood some more soon :)
cegprakash: finally I'm searchable on cgstats
cegprakash: http://cgstats.magusgeek.com/app/fall-challenge-2020/cegprakash
Astrobytes: we believe you ceg, you don't always have to go on about it and provide proof lol
cegprakash: it's not proof
cegprakash: bragging
Astrobytes: no s**t :P
Scarfield: lol
Astrobytes: What I most appreciate about ceg is his honesty :D
DomiKo: Euler top1
Zenoscave: It's a good character trait.
DomiKo: nice one
cegprakash: yeah eulerscheZahl #1
cegprakash: everyone change ur votes to eulerscheZahl if u haven't yet
BenjaminUrquhart: I'm voting for DefaultAI
cegprakash: see we all code all night
Scarfield: votes?
struct: stop the count!
cegprakash: what's the use of coding if we can't brag
cegprakash: CEG for bronze boss!!
Bobbadillio: To develop systems that foster the development of humanity!
cegprakash: I've never been the boss
BenjaminUrquhart: I don't want to be the boss
BenjaminUrquhart: and to make sure I'm not the boss I use debug messages
Psyho: hmmm, I have ~50%+ winrate against euler (I run ~50 games), something is fishy
Psyho: or maybe I just have to wait
pb4: ?
struct: League is too big to know which bot is stronger
pb4: Are you surprised you don't have the same score ?
Zenoscave: Trueskill variance is huge here
Psyho: nah, not really, there's obv huge variance
cegprakash: Psyho let the progress complete
Psyho: and there's still some RPS
pb4: 1 score difference isn't huge and 50 games isn't either
Psyho: 1.0 is like 6 games
Psyho: just getting impatient after fixing a silly bug, that's all :D
pb4: :D
pb4: At least it's not the kind of fix where your ranking drops 50 places :D
DomiKo: Friday Friday
Psyho: the bug was super silly, essentially I didn't take into account prices of potions
Psyho: and somehow I was still hovering near top 10
cegprakash: omg psyho is red :o
cegprakash: in tc
cegprakash: he gonna rekt us all
cegprakash: :D
Astrobytes: you don't know of psyho?
DomiKo: tc?
Psyho: topcoder
Nerchio: damn top23 is all C++ except like 2 ppl
cegprakash: yes I just checked ur handle to double confirm :D
Nerchio: or rust
Psyho: well, now it's 2 points :sweat_smile:
cegprakash: Zenoscave what did u do top 100
cegprakash: omg
Zenoscave: I've been top 50 most of today.
Astrobytes: Read the statement properly :P
Zenoscave: Fixed something big
Zenoscave: Looking for top 20 with this
Marcelo-Hackerman: what do i do to be the top 1?
Astrobytes: Wreck the leaderboard
Zenoscave: Yeah Reading is the biggest help at first
Marcelo-Hackerman: why am i top 2 million
cegprakash: win 70% games against top 10 @Marcelo-Hackerman
struct: lol
struct: you win 70% against evey one in top 10?
cegprakash: lol that's all time ranking @Marcelo-Hackerman everyone starts from 0 in every contest
struct: Hi missread
struct: sorry
cegprakash: that rank doesn't matter
cegprakash: there are only around 5000 ppl in this contest
PatrickMcGinnisII: omg, game ends at 6 potions
Zenoscave: PatrickMcGinnisII Hi slowpoke
Astrobytes: omg Paddy's caffeine has worn off :P
PatrickMcGinnisII: I couldn't code last night, too many Mojitos
PatrickMcGinnisII: I just now got my simple search working
cegprakash: Zenoscave u crash: https://www.codingame.com/share-replay/501854850
Zenoscave: thanks ceg
PatrickMcGinnisII: wow, i didn't realize finding a brewable would be so easy... under 80 nodes in bfs to find first available
zapakh: Now find another one
icecream17: the matches are already around 40-50 turns, i wonder how many turns it will eventually take....
Q12: Do I need to leave the computer open if I did test in arena?
BenjaminUrquhart: no
Zenoscave: no Q12
Q12: thanks
PatrickMcGinnisII: hmm, since I totally overdid it, but adding learn and cast x shouldn't be as hard now
PatrickMcGinnisII: yes, I'm WAY behind
PatrickMcGinnisII: at least i can randomly beat default ai
PatrickMcGinnisII: c'mon leaderboard, big $
BenjaminUrquhart: changing my debug messages makes me lose against default AI most of the time despite having no impact on the game
BenjaminUrquhart: the hell is that
ClockSort: Use "replay in same conditions"
Majeck: I know the feeling BenjaminUrquhart
BenjaminUrquhart: that's what I'm doing
Waffle3z: does it start with a number
Majeck: Debug messages take a lot of time to process though
ClockSort: the problem is probably between your computer and your chair
BenjaminUrquhart: Waffle3z I made sure it doesn't by putting the message in brackets
Astrobytes: See my profile
Maliamnon: Aren't they all ClockSort?
Doju: oh my god
Doju: it doesn't crash instantly!
Majeck: And the opponent could have a random (non-deterministic) algo
Majeck: A classic case of PEBCOC
icecream17: PEBCOC?
Doju: oh my god
Doju: it actually works
Maliamnon: PEBKAC is what i always saw
woosal: a literal brain storm
Majeck: Same as PEBKAC but with different initials
Doju: I must be missing something... Simulating to depth 10 atm with no issues
geppoz: you switched to c++ ?
Doju: nope, still python
Doju: yeah something is definitely wrong, it's doing depth 100 with no issues hahah
Astrobytes: seems legit
Doju: python so stronk
Doju: :-d
BenjaminUrquhart: can it do 1000
PatrickMcGinnisII: Battles in progress 32% ... hmm, when does silver open?
Doju: hahah now my bot is just haording spells
Xenoid: Silver opens on the 16th
Doju: https://www.codingame.com/share-replay/501866402
PatrickMcGinnisII: tx Xenoid
Astrobytes: Patrick you know how to check that by now!
Maliamnon: horray - same result after a refactor. Minor miracle
Remus_: Doju yeah mine does that too.. had to hard cap it becuse I coulnd't fix it xD
PatrickMcGinnisII: I should do pushups when I syntax error...I would be buff
Doju: yeah, i think i know why it did depth 10000 just fine
Doju: there are only 4 branches o.o
Hvosten: what represent node and branch in your graphs?
Hvosten: It's hard to imagine for me :D
Doju: Node is one gamestate
Doju: branch is a chain of nodes
struct: depth 10000?
Remus_: Yeah that's too much I don't think in 100 turn you can have that deapth without doing nothing for a long time.
Doju: http://chat.codingame.com/pastebin/d0fd6b13-3c61-422b-b66e-6660c3d1f814
Doju: Ohh right of course
Doju: I forgot to add resting as a possibility
Doju: i think it's working otherwise
Doju: seems to be working
Doju: 15 branches at depth 2
cegprakash: wow 9 wins in first 10 games
cegprakash: :o
PatrickMcGinnisII: wait 10 minutes, it'll change, lol
Zerfa: i was thinking IDA* for spell order sims, but I'm struggling to consider a heuristic that is admissible (doesn't overestimate) has anyone tried and had luck with, or can suggest a better heuristic that doesn't overestimate "distance"
cegprakash: I used Zenoscave's bot to improve mine
Zenoscave: cool My bot has a bunch of bugs
cegprakash: I couldn't win Zenoscave but I improved my score against Zenoscave
icecream17: Zenoscave - some bug? https://www.codingame.com/share-replay/501883738
Zenoscave: Yeah Timeouts i'm aware of. Lowering threshold to stop search
cegprakash: he probably debugging that crash
PatrickMcGinnisII: well, submit finally stopped, holy crap. simple search jumped me up to 1678th ... almost a 1000 place improvement over just barely runnable
cegprakash: I don't know if I'm wasting time right now lol.. coz I'm spending time on doing something greedy than implementing a search from scratch
icecream17: Woah! I tied against someone that's not me
kovi: perfect tie?
icecream17: https://www.codingame.com/share-replay/501885255
PatrickMcGinnisII: Every brewable is attainable with the basic 4 spells... so wouldn't a reverse search be simpler?
PatrickMcGinnisII: i guess it depends on your starting inventory
PatrickMcGinnisII: hmm
icecream17: simpler, but probably not better it'll take awhile to do potions without learning stuff
Zhmyh: Wonder how to beat emil? Here it is :) https://www.codingame.com/replay/501881973
icecream17: how am i losing so much after i fixed the bug it doesn't make sensssss
Zenoscave: Zhmyh he uses rust. the actual bot is not available in test
icecream17: what is wrong with codingame, i just won 6 in a row after losing 5 in a row
Zhmyh: Zenoscave ?
Zenoscave: That's called statistics icecream17 ;)
Astrobytes: And also -9 XP for you Zhmyh for that song :P
Zenoscave: Rust can tell when you're in arena vs test.
Zenoscave: so emil probably is a much stronger bot out of test
Astrobytes: Rust is in debug mode in the IDE so it will timeout
Zhmyh: Oh
Astrobytes: Still the same for C#?
Zhmyh: Wait, why are you saying it's in IDE?
Zenoscave: Yup
Astrobytes: Was this a leaderboard match Zhmyh?
Zenoscave: Was it from a submit?
Zhmyh: No
Zhmyh: Yes
Astrobytes: ...
Zhmyh: Bot which is not "IDE"
Astrobytes: Did you play it locally "Play my code" or was it a match you found from "Last Battles"?
Zhmyh: Locally
Astrobytes: Then it's played in the IDE
Astrobytes: So the Rust bot is in debug mode
Zhmyh: Ok, didn't know that
Astrobytes: Now you do :)
Majeck: Weird... My code doesn't print an output but I get no timeout error
PatrickMcGinnisII: looks like euler got the groove back
Majeck: Nor StackOverflow error
Zenoscave: spoke too soon Presac
Zenoscave: PatrickMcGinnisII***
PatrickMcGinnisII: i sure did
cegprakash: I beat someone with same profile pic as eulerscheZahl and I was shocked for a second :D
PatrickMcGinnisII: I'm starting to think perfect game is possible to find
PatrickMcGinnisII: it may come down to the urgency bonus
PatrickMcGinnisII: too much coffee
PatrickMcGinnisII: g/l. dinnertime
icecream17: At some point you have to account for the opponent though. But my code isn't ready for that yet
PatrickMcGinnisII: the random brew screws it up to
Majeck: BenjaminUrquhart
Majeck: I'm having the same exact problem you described
Majeck: With "Replay in same conditions" I get different outcomes depending on where I put debug messages
Cappefra: I think I started off with a failing solution type and I'm too lazy to change it now
Majeck: I'm so confused
cegprakash: all skills auto reset when I learn?
Zenoscave: I think no. ceg
PatrickMcGinnisII: last element of opponent_cast data radomly goes missing in input data, wth
Astrobytes: PEBCAP
MarekM: i am starting new algo third time now, timings are very erratic
PatrickMcGinnisII: yup Astrobytes, the input data is just longer than the game information window
Astrobytes: :)
Michael_Howard: My first starting 10/10 since bronze :heart_eyes:
Astrobytes: Annoying when that happens
Doju: apparently deepcopy doesn't like the fact that im subclassing list
Astrobytes: gj Michael_Howard
Michael_Howard: Lost #11 but I don't care lol
Astrobytes: every little helps right :)
cegprakash: I want to display a number in log after cast command but the judge assumes I'm trying to repeat the cast action
Illedan: Serious submit time :scream:
Nerchio: #top150
Zenoscave: Submits are super slow rn Illedan
Illedan: Yeah, I feel it
Astrobytes: "eeyup"
Illedan: Still 100% win
Zenoscave: how many in a row?
Nerchio: 5
Illedan: 24
Illedan: And a lose :D
Zenoscave: My record was 26 earlier today.
Illedan: Sweeeet, something to work on
Zenoscave: Gotta love bugs ;)
Zenoscave: 21 this time
PatrickMcGinnisII: thinking aloud, if you take the most expensive brew and search backwards, the other brews should exist along the path to your current inventory
Zenoscave: not always
Illedan: Not at all Patrick
Zenoscave: probably never
Tandy1000: TOTALLY WRONG PATRICK
Illedan: Brews are not subsets of each others
Zenoscave: lol Tandy1000
Astrobytes: SHOUTY MUCH TandY1000? :D
anoburn: oh boy, how I love inconsistent runtimes ...
Tandy1000: I LIKE TRAINS
Zenoscave: asdf
PatrickMcGinnisII: was trying to figure out how to reverse search and consolidate 5 end states into one search, either way I'm storing a hash of known gamestates
Zenoscave: ding ding ding
Astrobytes: All aboard
Illedan: Nice, top50 and only 50% :rocket:
Zenoscave: how many losses?
Zenoscave: I think we'll be close
Illedan: :wave:
Zenoscave: Hi neighbor
cegprakash: Zenoscave I think u learn some bad skills
Illedan: Just passing by
Illedan: no worries
cegprakash: bad spells*
Zenoscave: wdym ceg
Zenoscave: :P
cegprakash: wdym ?
Illedan: 8 loses in 50 games
Zenoscave: what do you mean
Illedan: and a lose against zeno
Illedan: -.-
Zenoscave: 9 now
Illedan: (╯°□°)╯︵ ┻━┻
Illedan: 2?!
Zenoscave: 2* losses
Illedan: Comon
cegprakash: https://www.codingame.com/share-replay/501923156
cegprakash: ur first skill Zenoscave
cegprakash: it was bad learning
Zenoscave: how so?
Zenoscave: don't worry Illedan 5 losses right after you
cegprakash: u trade a t2 for 2 t1s
cegprakash: there are better skills that I picked
cegprakash: compare my learning with urs
Zenoscave: I don't rank learning
Astrobytes: Compare your ranks ceg :P
Zenoscave: Illedan do you stop at 6?
cegprakash: wait for submit to end
cegprakash: 8 loss in 25 games
cegprakash: so current rank does not matter
Zenoscave: I had 4 lossses in 40 games
Astrobytes: Illedan had 8 in 50
Zenoscave: 9 in 50 :/
Zenoscave: 10 in 51
Astrobytes: Ah yeah, sorry :)
Zenoscave: hit a wall
Astrobytes: credit where credit is due
cegprakash: I still have deadlocks https://www.codingame.com/share-replay/501925349
Zenoscave: Yeah Illedan is kicking ass
Astrobytes: yup, very nice
Majeck: If it takes me 30ms just to read the inputs does that mean I only have 20ms available for calculations and such?
Zenoscave: yes MadKnight
Zenoscave: Majeck
Illedan: Just trying something. Still nothing serious
Zenoscave: my tab is off
Majeck: Dammmmn
Majeck: Thanks Zenoscave
Illedan: *not too serious
cegprakash: some ppl are not addable on ide to test?
Majeck: That's so little time
Astrobytes: It shouldn't take 30ms to read the inputs though surely
Majeck: cegprakash they have to be in the top 1000
Majeck: of your league
Majeck: Astrobytes it takes me 25-40ms on average to read all inputs
Astrobytes: when do you start your timer?
Majeck: At the start of the while(true)
Doju: aarghhh
Doju: why does deepcopy freak out when i subclass list
Majeck: Then I call gameInputs.UpdateTurnInputs()
Astrobytes: It should be immediately after reading your first input Majeck
Majeck: Oh ok
cegprakash: that's so unfair :(
Astrobytes: why cegprakash?
cegprakash: i want to debug
Astrobytes: well, you can accomplish in other ways. I have faith in you :)
cegprakash: okay able to repro now
cegprakash: send parameters to IDE was not working first time now working
Majeck: Oh yeah it makes much more sense now, just 0ms to read inputs :P
Tandy1000: So uhh. What language are you guys using?
Zenoscave: C#
PED: Hello everyone
Doju: aaahhh im gonna go crazy
PED: My bot (C) sometimes often times out once submitted, but I cant reproduce it by sending params to IDE and running it again
Waffle3z: spells and potions are fixed, does actionId always correspond to the same spell or potion between games?
PED: Like in the IDE it doesn't seem to timeout
Astrobytes: Hey PED, nice to see you again, what time limit are you setting?
PED: I'm using a timer set to 40ms with clock()
tomatoes: id different
PED: Hey Astrobytes :)
ClockSort: 1. work for hours. 2. get worse results. 3. ???
Astrobytes: Might vary because of different CPUs
PED: I start it after reading the last input
PED: :/
Majeck: ClockSort 3. Delete everything and implement MCTS
Astrobytes: Start after first input PED
aljen: hi :)
PED: Hmm ok will try
cegprakash: 3 potions vs 6 potions.. 3 potions win :( https://www.codingame.com/share-replay/501939768
Michael_Howard: OMG the top is hard. I won 36/37 then won 1 out of 16. :head_bandage:
Astrobytes: There're different servers with different specs PED, you can timeout on one and not the other sadly
PED: Yeah but I don't nderstand why I get a timeout after 40ms
Astrobytes: Try what I recommended and see if it still happens
PED: I just did, still timeouts
Astrobytes: hmmm
PED: Damned
PED: Thanks for the idea though
DeWitt: do you guys simulate other player as well?
PatrickMcGinnisII: ok, only 36 brews ... 36 spells, all possible paths should be able to be made locally as a kinda book and easily computed for score/turn (ignoring opp of course)
DeWitt: my bot when times out just learns another spell, increasing a chance of a timeone for the next tick :D
PED: Whith 20ms it works :(
Braykin08: It's not about "36" but any combinaison of those spells. You'd need to precompute path for way too much possibilities
Astrobytes: Pff, that's pretty grim PED
PatrickMcGinnisII: hmmm, re-inventing the wheel, I just know once I put learn in there my search is gonna go to hell
struct: Shame that C doesnt have high resolution timer
icecream17: wow, mine doesn't account for learning either... hmmm
Zenoscave: fix that icecream17
Zenoscave: Illedan new submit?
struct: PED if you run the C code in C++ does it run into same problem?
Illedan: Testing something
PED: Lets give it a go
Astrobytes: hm good point struct
struct: Also if it works try using chrono high resolution clock
PatrickMcGinnisII: Braykin08 going from brew to 0 0 0 0 shouldn't be that exhaustive, alot of gamestates will already exist and more often than not alot of spells woould be unavail.
PatrickMcGinnisII: I dunno, Need to run locally
PatrickMcGinnisII: Anyone run this thing locally yet?
Zenoscave: not me but I'm sure some top do
PED: Also seems to timeout in C++ struct
PED: chrono high resomution clock is in case it didn't work ?
Zenoscave: yes PED
Zenoscave: clock() is not very accurate
Astrobytes: ^
struct: yes, I meant to say if the code runs in c++ to try high resolution clock
PatrickMcGinnisII: g/l. need food.
Astrobytes: there're ways around it in C but I think you have to implement your own solution (of course, it is C after all :D )
cegprakash: do potions and their price related or completely random?
Remus_: they are related
Icebox: cegprakash read the github implementation
Icebox: they are same all the time
Astrobytes: See the source ceg
Astrobytes: yes, what Icebox said
ClockSort: yeah, I built my own simulator in C# so I could play versions of my code against themselves quickly.
Astrobytes: The statement may be vague but to paraphrase recurse, the code does not lie
Psyho: hm, that 3-way tie at 1st
struct: yeah
struct: 55.21
Zenoscave: whoa
Zenoscave: I think the locam will strike again
struct: in case of tie at the end, do both players show as first on profile?
Zenoscave: It's never happened
Illedan: There is more decimals than shown
Icebox: struct the float is truncated for display
struct: ah right
Zenoscave: What if there was a float level tie?
struct: Still there is a few people hiding
Icebox: I'm assuming the player that was first before the tie will still remain first
struct: I saw someone started on discord but never sent the message
struct: He is quite good, but not very active
struct: and is known for hiding :)
Astrobytes: do tell
PED: No timeouts so far !
struct: ;)
PED: Thanks struct :)
Astrobytes: heh awesome
Astrobytes: And you are using pragmas PED?
Remus_: My code: https://imgflip.com/i/4mezpx
PED: Still by bot is garbage tier but thats unrelated
PED: #pragma GCC optimize "O3,omit-frame-pointer,inline"
PED: donnu if I should change them for C++
MattSOrme: Im re-writing mine from python to java, and i might be over-engineering code thats never run haha. I have so many classes already and it can't even play yet
MattSOrme: Got till silver league is released to get there
struct: #pragma GCC optimize("O3","unroll-loops","omit-frame-pointer","inline")
struct: Should be fine PED
DeWitt: forgot about pragma, now ez -100 places. thanks, struct!
struct: np
Astrobytes: MattSOrme: no you have until the end of the competition, you can still plough through the leagues after they open
Remus_: that pragma double the states my bot searches holy hack
Michael_Howard: OMG it's like there's a bouncer guarding the top 100 who won't let me past for more than 30 seconds
Andy176822: does anyone know if C++ is compiled optimised?
Zenoscave: -O0 -g
DeWitt: it's not
Astrobytes: No Andy176822
Andy176822: ahh dang, ok thanks
Astrobytes: see previous #pragmas
Astrobytes: scroll up
DeWitt: guys, at 100-150, do you do anything else from bfs?
Andy176822: oh wow, perfect timing to ask that
Astrobytes: :)
DeWitt: (i only do bfs :) )
Psyho: DeWitt no :)
Andy176822: thanks
struct: A bit overkill
struct: #pragma GCC optimize("O3","unroll-loops","omit-frame-pointer","inline")
- pragma GCC option("arch=native","tune=native","no-zeroupper")
- pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,avx2,fma")
Zenoscave: Psyho bfs only?
Michael_Howard: @DeWitt I'm not doing any search trees & I'm above that now :)
Waffle3z: where are all of the different spells and potions defined in the source?
struct: Deck Waffle3z
Astrobytes: Deck I believe
Illedan: Deck class
struct: https://github.com/CodinGame/FallChallenge2020/blob/main/src/main/java/com/codingame/game/Deck.java
Zenoscave: Dock
Astrobytes: Duck
Zenoscave: quack
Astrobytes: Doctor
Zenoscave: Philosopher
Astrobytes: Thought
DeWitt: Psyho nice optimization
Waffle3z: automaton2000
Automaton2000: i don't even know how to pick the best
icecream17: that kinda applies
Astrobytes: alright, laters everyone. Good luck and see ya tomorrow
Remus_: bye
geppoz: bye
Good_Coder: What do you put in your Generated stub?
Zaphus: is it right that Codingame uses wall clock, not application time - for the timeouts? C++ - I've been using clock() all these years, and see people talking about the HR timer. If I compare, I can see massive differences between the two (40ms vs 75ms) even though there was no timeout. confused
Marcelo-Hackerman: am i playing against bots
Marcelo-Hackerman: wtf, always the same guys
Codeab: im not a bot
Marcelo-Hackerman: nice
Marcelo-Hackerman: AlkhilJohn is a bot
Marcelo-Hackerman: there is no way
icecream17: i mean, do you or your code play?
icecream17: and do opponents or their code play?
Good_Coder: What do you put in your Generated stub?
Good_Coder: ??????????????????????
struct: what do you mean Good_Coder?
struct: the default code?
Good_Coder: Stub generator inpuy
icecream17: uh, probably completely misunderstanding... i don't put anything in the input...
icecream17: do you know how to code?
icecream17: nvm, i just hovered over your profile and it says lvl 20
Doju: Arghh i'm seriously going crazy
Avi123: help i have no idea what im dong. all my code just chooses the last recipe and i cant change it. help
Doju: deepcopy doesnt want to cooperate
Doju: and copy isn't sufficient
Doju: plz send help
icecream17: in js, if you copy a nested array
icecream17: i mean
icecream17: if you copy the array [object, object2]
icecream17: object will still change
geppoz: Doju you dont need to deepcopy everything
Doju: geppoz yeah but if i don't deepcopy my gamestates it just doesn't work
geppoz: in some case the shallow copy is a blessing
geppoz: if both has to store same recipe, let's not deepcopy
geppoz: only when you modify it, then create a new one in the new game
icecream17: maybe global variables or something?
geppoz: when it is the same, lets new game point to same of the old one
Doju: global variables are definitely not the solution haha
Avi123: can anyone recommend a python tutorial instead of me just typing random words
Illedan: Montecarlo based python coding? :O
icecream17: i meant, if your code uses global variables then that could be the problem...
Doju: Ah right. But yeah, only some constants, icecream17
geppoz: @Illedan I'm using python just to learn it
icecream17: Maybe some complicated "self" or .... idk, why does your code break when using just copy
geppoz: I suppose I will go back to c++ if I continue this challenge
Doju: icecream17 I'm trying to simulate actions
Doju: so to store the new action i have to deepcopy the old gamestate and modify the copy
Doju: to store the new gamestate*
icecream17: the simplest solution i can think of is to put everything in a class, then make a new class, but that's probably not a very _good_ solution
Doju: uh, what? lol
Doju: nevermind, im just gonna try to figure it out
Bubaptik: Is 50ms per turn typical for CodingGame contests? How was it in previous games?
Illedan: Yes
Xenoid: It's typical
raymoo: if you use haskell you only need shallow copies since everything is immutable
raymoo: hope this helps xoxo
ClockSort: cool, i'll just rewrite everything in haskell real quick here
Doju: yeah sure it's 2 am i'll do that
FrancoisB: yeah, I was going to say, doesn't look helpful at all in the short or medium term :D
icecream17: haskell and rust sound like such interesting languages
Tandy1000: And here I am, just minding my own business writing in VB.NET
FrancoisB: The language used is probably not the issue anyway
icecream17: Doju, python classes: https://docs.python.org/3/tutorial/classes.html
Doju: Yeah, i know what classes are lol
icecream17: maybe make a gameState class? then make a new game, oh....
icecream17: but why deepcopy? changing the branch will change both....
icecream17: *the original
Doju: yes but i want multiple branches
Doju: that differ
icecream17: copy multiple times? or maybe make a parent property
icecream17: yeah, deepcopy means that if you change the copy, you change the original, since they're the same
Doju: in python it's the other way
icecream17: really? wow
Doju: if you change the copy you don't change the original
dreadylein: huh in what langauge is a deepcopy like this ?
Doju: python
Beresta: I'd rather ask in which language deepcopy is not like this :D
dreadylein: i meant a deepcopy that only copys refs :)
dreadylein: yep
Doju: wait, no
Doju: nvm yeah
Doju: xd
Doju: I'm gonna try pickling and unpickling the gamestates now
Beresta: alright, tried to naively implement monte carlo and my terrible implementation could finish only 50-100 random games per turn, thats way beyond terrible :D
FrancoisB: The good news is that there is a lot of room for improvement :)
dreadylein: :)
Beresta: yea true
dreadylein: a full mc implementation ?
Beresta: I mean like randomly play a game and memorize if you win or lose for each starting turn, take best one
Beresta: but it can't work with 50-100 games played, thats silly
dreadylein: true sample size kinda small hehe
Beresta: yea, well I need to opmimize my sim, its just too inefficient atm
Scarfield: whats your depth?
Beresta: I'm trying with full games now, so up to 100 :)
Beresta: didn't wanted to come with heuristics to evaluate the state for now, but I'll do later
totorroto: totorroto has not provided 1 lines in time. totorroto was disqualified.
totorroto: this means that my code is too slow?
Beresta: yea, over 50ms most likely
Ifthel: Too slow or stuck in an infinite loop
reCurse: Or crashed
totorroto: okey.. thanks, i think infinite loop make sense
Jdools05: yeah first line has 1000ms maximum and every round after that has 50ms maximum... i think
totorroto: okey it crash in the first one, dont think my code is that slow
Jdools05: yeah I just double checked my numbers it is <= 50ms and <=1000ms
Marcelo-Hackerman: wow i am so dumb
FrancoisB: not enough context to know for sure
Scarfield: xD
Beresta: lol :D
Beresta: well yea in my tester if I use 50s instead of 50ms mc gives decent moves, now I just need to make it 1000x faster :D
Doju: Ok im done
Doju: i give up for today
Doju: and tomorrow i dont have time so bye bye competition
icecream17: wow, emil.
anoburn: Top 100 for a couple of seconds! :tada: With that, I can go to bed happily
Tandy1000: stupid question. does castable not mean what i think it means? as in, if a spell has already been cast?
tomatoes: cooldown
Tandy1000: yes, does it indicate the cooldown? so if i cast a spell, it should turn to 0, right?
FrancoisB: cast-able, 1 means you are able to cast it
icecream17: castable is a self-explanatory name
ClockSort: what happens if you try to learn a tome spell that has too much tax, more than you can hold? illegal move, or extra discarded?
ClockSort: is this before or after paying the tax?
Xenoid: You pay the tax, then take whatever fits in your inventory
Xenoid: I can't think of any other ways to make major improvements to my bot. I guess I will tweak parameters and hope that has some huge effect, but I am not too hopeful
benlinn: hey guys whats up
benlinn: just made it to wood 1
benlinn: wait so we can't beat wood 1 right now? even with the perfect program
dreadylein: ?
dreadylein: you can get to bronze atm :)
benlinn: ooo ok sweet. so i have something to shoot for
benlinn: ooh ok so silver opens up in 2 days then
ClockSort: @Xenoid what rank did you reach with your program?
Xenoid: Right now #12
ClockSort: is it normal to have to only use about 25ms, because anything more can spike over 50 at random?
reCurse: If you're using a garbage collected language, yes
BrunoFelthes: Languages with garbage collector is garbage here at coding game @cloksort
reCurse: Well there's a couple of C# in the top 20, but it has a pretty good GC
ClockSort: i'm using c#, but shouldn't i be able to control that with the following?
GCSettings.LatencyMode = GCLatencyMode.Batch;
Illedan: GC.TryStartNoGCRegion(10000000);
ClockSort: and then GC.Collect(); before the ReadLine() calls
Illedan: Collect will use of your CPU time.
BrunoFelthes: Why they dont expose GC at Javascript and JAVA?
reCurse: Ask Google and Oracle
BrunoFelthes: I'm asking here at codingame
BrunoFelthes: it is possible to expose the GC at node
ClockSort: Illedan can you just collect in between moves so the time is not counted?
BrunoFelthes: it is a parameter
reCurse: Well because they don't give you control over the command line
Illedan: No, because you have no CPU power when it is not your turn.
reCurse: That's as simple as that
reCurse: If they had a way to do it in code then it'd be fine
BrunoFelthes: but they could add this parameter, no
Illedan: Startup parameter?
BrunoFelthes: yes
reCurse: You've been around long enough to know it's been an ongoing debate and they haven't gotten around to exposing that
reCurse: If they ever will
Illedan: BrunoFelthes Check this: https://www.codingame.com/contribute/view/5675bf9fab9a4d27753784fd901df125073f I guess you can try to run your program yourself with that flag :P
reCurse: lol
ClockSort: my program makes a ton of garbage to collect because it makes gamestates and abandons them during the search
reCurse: Then you might want to fix that
ClockSort: what an interesting idea. Not creating garbage.
BrunoFelthes: I already did a thread about it... I just think that they dont care about novice players that dont know advanced code...
BrunoFelthes: there is a lot of things that they could do to avoid random timeouts, but they dont care about it...
reCurse: Because exposing a command line is novice friendly?
BrunoFelthes: they even discuss about it
BrunoFelthes: i'm not talking about it
BrunoFelthes: there are another solutions that could minimize the problem
BrunoFelthes: like time buffers...
reCurse: ?
BrunoFelthes: for example, if you do not use your 50ms, you can save up to 10ms to other turns...
FrancoisB: Maybe use pooling or other strategies to minimize memory usage
BrunoFelthes: or, during the entire game, you can use 10ms extras for 5 turns...
reCurse: That opens a huge can of worms asking for a reimplementation of their system
reCurse: This is no simple ask
BrunoFelthes: yes, but it will add a big increment at the user experience
reCurse: Debatable
BrunoFelthes: yes.. debatable...
BrunoFelthes: but, I'm here for 3 years, and they never talk about it...
BrunoFelthes: this platform is not noob friendly
reCurse: It's all about priorities
BrunoFelthes: sure
reCurse: There's a million things they can do to improve, everyone has an opinion
reCurse: Adding D support for instance
BrunoFelthes: noob is not a priority here, it is what I am saying
Bobbadillio: Yeah, I'd love to see a move to something docker-based that allowed you to run almost anything with whatever parameters you wanted in a container! A man can dream :)
reCurse: I think you're wrong
BrunoFelthes: There is a million things, and they do nothing
reCurse: Not true but ok you're entitled to your opinion
BrunoFelthes: list just one thing to increase the usage of javascript
dreadylein: i dont see how a timebank would realy help i mean .. in the end you would just obfuscate the problem with it ? Or do i miss something ?
BrunoFelthes: javascript is just a garbage here...
reCurse: Just a bandaid before complaining about the next thing
reCurse: Javascript will never be competitive in a realtime competition
dreadylein: true
Illedan: They do a lot, but they focus on what gives them, as a company, the most value I guess.
reCurse: Not a question of noob friendliness
reCurse: Use the right tool for the job
Illedan: ^
BrunoFelthes: @dreadylein, at list you will not have timeouts, javascript has a bad performance, and if you need to cap at 30ms, it is terrible
Illedan: It's more efficient for a dev to learn a new language than to optimize JS on the platform :P
dreadylein: but wouldnt you end up at the same point ? the other people would just exhaust the timebank
BrunoFelthes: @illedan, some people are here to learn things...
reCurse: It's a bandaid
reCurse: Then focus on learning instead of competing
BrunoFelthes: even for learn, cap the algo with 30ms is very bad
dreadylein: but its a massive overhaul for little gain
dreadylein: i understand the intention, but whats the difference in the end ?
BrunoFelthes: User experience
reCurse: Might not want to extend the lie that javascript is competitive in realtime
BrunoFelthes: just it... if the noob frustate at the first competition, he do not came back to the second
reCurse: That's doing a favor
reCurse: So you should be able to go 1st regardless of language?
dreadylein: but does he ? i mean if someone says 1 word, he will get explained whats causing it normaly
Bobbadillio: You just went there I think but recurse, when you talk competitive, are you talking about top of legendary league or difference between gold and legend?
dreadylein: and learning about the gc is pretty important
reCurse: If you're at the point you're frustrated at not getting more performance you're competing
reCurse: So adapt
Bobbadillio: I wouldn't be shocked if javascript could be made to run at high gold or legendary in most competitions
reCurse: If the game requires computation like this one, I would heavily doubt
Bobbadillio: Top javascript right now is Karang at 104, I think that's out of 3k in bronze, how many are likely to be in legend? is it usually a percent thing?
dreadylein: balancing the speed of different languages is basicly impossible, at least i dont see a way
reCurse: It varies
reCurse: They usually aim to have 100 in legend at end of competition but it's a huge guess
FrancoisB: And the people that maybe *could* get a top javascript bot probably go for another language anayway
BrunoFelthes: i just disagree about: "If you dont know how to increase the performance, you code will broke randomly, and if you dont know very advanced tricks, just get out of here"... Some people just want to have fun, with less knowledge
reCurse: Then please have fun
reCurse: If you worry about performance it's another story
BrunoFelthes: how to have fun if your code broke randomly with 30ms timeout
BrunoFelthes: it is not fun
reCurse: This conversation is going nowhere
FrancoisB: Are you doing some tree search Bruno?
FrancoisB: fixed length or dynamic?
reCurse: Please keep getting frustrated at eating soup with a fork
Westicles: Now let's move on and talk about how great genetic algorithms are
Illedan: :scream:
ClockSort: can I use c# using statements to trigger cleanup at the end of the scope?
reCurse: Yes
BrunoFelthes: @franoisB yes, but i'm changing the language again, because I'm a javascript dev now, I'm using codingame to learn more about javascript, but this site is not good for it
Marcelo-Hackerman: eai cade os br
BrunoFelthes: ta no canal pt :P
Marcelo-Hackerman: i, sabia n kkkkk
FrancoisB: These competition can be a bit rough for beginners but as far as I understand that's not really the target. They recommend practicing on the other problems
FrancoisB: :wave:
dreadylein: Hello, Bennjo
BrunoFelthes: @FrancoisB, in other words: if you dont know about advanced tricks, get out of this competition
FrancoisB: Not really what I said but be prepared to hit issues for the first time and spend time working around them.
Illedan: I find it better to try on this contest anyhow. More people talking about it, a lot of help to get, etc..
dreadylein: true
ClockSort: i make 30 moves and a certain portion of my code takes 3ms on average. Then on the 31st move it takes more that 14ms and makes me forfeit. is this really the GC collecting for the first time?!
reCurse: Maybe, maybe not
BrunoFelthes: it is really hard to avoid GC at javascript...
reCurse: Obviously this site fault
FrancoisB: I tend to have counters in my algorithm that count the number of loops/steps/... and often the the cause of these spikes is the algorithm
ClockSort: there is nothing in the values that should cause longer runtime
FrancoisB: That can help with troubleshootting
BrunoFelthes: no, the site could make it less painfull
reCurse: CG fix javascript plz
reCurse: Send PR to google
Westicles: Why is it not okay to post your code, but it is okay to stream it?
reCurse: The rationale is it's a lot harder to copy/paste
reCurse: But it is a fine line
Illedan: And it is recommended not to stream too strong bots
FrancoisB: I guess the stream is here to bring some engagement
reCurse: Pretty much
FrancoisB: and probably unlikely to make it into the top
GetSchwifty: do any streamers use sims?
Illedan: I wouldn't be able to code optimally on stream. Need that peace in mind to debug :P
BrunoFelthes: yes, they use
FrancoisB: I would probably be more conservative in my goals if I was live streaming haha
GetSchwifty: I've never dived into simulations, mostly because I got no clue how to start
dreadylein: the you are lucky, thats a good challenge for starting with it :)
reCurse: Streaming is a massive mental debuff, no idea how pros do it 14hr/day
dreadylein: *then
GetSchwifty: yea, maybe I should bite the bullet, but don't have much free time
GetSchwifty: might give it a go :)
dreadylein: try it, the game rules are pretty straight forward :)
dreadylein: hello hardstuck 500
ClockSort: ok it's definitely the GC. When I don't make a queue of 4000 game states, it doesn't happen (all else the same).
ClockSort: that's really annoying
ClockSort: can I just malloc and free this one thing? pretty please? :)
FrancoisB: What language are you using?
ClockSort: http://chat.codingame.com/pastebin/2a2cb784-c3c6-4617-be63-25a5fa67f062
ClockSort: C#
FrancoisB: What about pre-allocating 4000 game states and not needing to garbage collect anything?
ClockSort: :light_bulb:
Zenoscave: That's a common approach
Zenoscave: It works well
ClockSort: good idea, I'll try it
Zenoscave: Just make sure you keep parent refs and enough nodes to not run out
EladYaniv01: Anybody in wood league getting wrong inventory values ?
Bobbadillio: I had some really weird stuff happen when I didn't parse all my inputs right, but I can't say I saw anything like what you're saying, sorry
Kuraishi: Before I start refactoring my code, does anyone know if you can rename the Player class to something else, or does 'main' need to be defined in the Player class?
DaNinja: needs to be Player iirc
Zenoscave: It must be Player in java
Zenoscave: C# it doesn't matter
Kuraishi: Gotcha, thank you.
Zenoscave: yw
Bobbadillio: Alright, I've got a hacky bot that tries to maximize received points per turn with the 'standard' spells, but I'm thinking I'll want to build a bit more intelligently