Chat:World/2020-11-14

From CG community
Revision as of 11:55, 15 June 2021 by Chat Log (talk | contribs) (Created page with "<img src=/a/5338452207730> NinjaDoggy: tomatoes why did you lie to me :( you do 9 learns <img src=/a/16732569385856> Zenoscave: I have some bug where my bot thinks it can't c...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

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: :(

Default avatar.png 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

Default avatar.png guspihl: I just faced a reverse mode i couldnt figure out, which is bugging me

Default avatar.png guspihl: and noone shared their code

DaNinja: thats the stock and tomeStockGain in the referee?

Default avatar.png 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

Default avatar.png Zuciso: All the best

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

Default avatar.png 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 :)

Default avatar.png lowzhao: D:

Marcelo-Hackerman: is this website good for practicing?

Default avatar.png lowzhao: I try my best

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

Default avatar.png 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

Default avatar.png 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

Default avatar.png lowzhao: score change?

Icebox: yes

Default avatar.png lowzhao: damn so crazy

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 :)

Default avatar.png lowzhao: thanks Icebox

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

Default avatar.png 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

Default avatar.png ChenHuang96: alright, thanks

Default avatar.png Rodrigo_the_coder: lol

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?

Default avatar.png 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?

Default avatar.png 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?

Default avatar.png 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

Default avatar.png 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

Default avatar.png xylorg: Those are taxes

struct: you will get 2 blue ingredients

struct: yes

struct: When you learn that spell you get the tax

Default avatar.png 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

Default avatar.png 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

Default avatar.png 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

Default avatar.png 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

Default avatar.png 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

Default avatar.png 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:

Default avatar.png ehamza: Hi all

dreadylein: hi

Default avatar.png ehamza: who's new here

Default avatar.png ehamza: like me :D

struct: plenty of people Im sure

Default avatar.png ehamza: :D

Nerchio: I'm new here playing since 1 year

Nerchio: :joy:

zapakh: I've been new forever

Default avatar.png ehamza: :D

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

Default avatar.png offroff: you need to pay the blue ingredient corresponding to tomeIndex (if tomeIndex is 0 it's free)

Default avatar.png 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

Default avatar.png 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

Default avatar.png 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

Default avatar.png offroff: k, thx

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

Default avatar.png 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

Default avatar.png TheExtremeHacker: hi

Default avatar.png whensday93: hi all

tomatoes: hi whensday93

Default avatar.png TheExtremeHacker: .

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

Default avatar.png 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

Default avatar.png Amitos: oh cool

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

Default avatar.png 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

Default avatar.png 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

Default avatar.png 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

Default avatar.png 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

Default avatar.png 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

Default avatar.png Bobbadillio: legit! :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

Default avatar.png Bobbadillio: Yeah, some of it's pretty new, and the library ecosystem is definitely not fully mature/complete

Washier: true that

Default avatar.png Bobbadillio: The ML/Data Science stuff for example is pretty rough

geppoz: yeah it is, i'm having depth 7 in python

Default avatar.png 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

Default avatar.png Bobbadillio: jUliA

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...

Default avatar.png 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..

Default avatar.png 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)

Default avatar.png SujalAI: oh

Default avatar.png 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

Default avatar.png 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

Default avatar.png ProMikeSundays: i have a problem that i cant maximize the editor

Default avatar.png meh1001: try a different browser, or disable plugins at least and see if that helps

Default avatar.png ProMikeSundays: but this problem only arrived when i started using this chat feature

roglemorph: u refresh right?

Default avatar.png Panagis: does java assist work?

Default avatar.png ProMikeSundays: ´what is java assist?

Default avatar.png ProMikeSundays: and yes i have refreshed, but thanks for the info roglemorph

Default avatar.png 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

Default avatar.png 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.

Default avatar.png DanTheMan832: ok thanks guys

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?

Default avatar.png 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

Default avatar.png 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?

Default avatar.png 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

Default avatar.png 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:

Default avatar.png 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?

Default avatar.png 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

Default avatar.png 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

Default avatar.png G_Gre: hello

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()

Default avatar.png nurit: what happen in a tie?

Default avatar.png nurit: in the fall challenge

Xenoid: Ties are ties

sirsatan: both 1st places

Default avatar.png nurit: ok thx

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

Default avatar.png 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

Default avatar.png 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

Default avatar.png xSkyline: Thanks, I'll check it out

Default avatar.png xSkyline: mindless prototyping in a single file gets old really quick.

Default avatar.png 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: https://tech.io/playgrounds/17144/parallelism-on-single-core-with--net-c-and-simd-avx--first-example-

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:

  1. pragma GCC optimize "O3,omit-frame-pointer,inline"
  2. 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

Default avatar.png 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?

Default avatar.png 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 :)

Default avatar.png xSkyline: Thanks !

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

Default avatar.png 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")

  1. pragma GCC option("arch=native","tune=native","no-zeroupper")
  2. 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

Default avatar.png 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

Default avatar.png Good_Coder: ...

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?

Default avatar.png Good_Coder: What do you put in your Generated stub?

Default avatar.png Good_Coder: ??????????????????????

struct: what do you mean Good_Coder?

struct: the default code?

Default avatar.png Good_Coder: Stub generator inpuy

Default avatar.png Good_Coder: input*

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

Default avatar.png totorroto: totorroto has not provided 1 lines in time. totorroto was disqualified.

Default avatar.png 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

Default avatar.png 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

Default avatar.png 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

Default avatar.png Topjimmies: yes

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?

Default avatar.png Topjimmies: 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

Default avatar.png Bennjo: Hello, World!

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 :)

Default avatar.png Topjimmies: I'm hardstuck 500

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

Default avatar.png 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