Chat:World/2021-08-17
blakestone: Hello, is there a way to print/debug something without it registering as an output in the IDE? When I try to do this it's treating it as an output and failing to progress etc. Thanks.
blakestone: for Javascript
DaNinja: console.error("test')
blakestone: worked - thank you :)
xxd: getting closer and closer to getting this GA to work...
ProCoder03: how to floodfill @xxd ??
xxd: OH MY GOD
xxd: IM SO CLOSE TO GETTING IT WORKING I THINK
xxd: LOOK AT THIS SCREENSHOT
ProCoder03: dude is it Mars Lander 2 ??
xxd: wait let me try it on a harder one
xxd: yeah im doing mars lander
ProCoder03: wontonimo did it in just 19 lines !!!
ProCoder03: PIDs
xxd: yeah
xxd: but hopefully my method generalizes to all the Mars landers problems :)
ProCoder03: superb !!!
xxd: okay im doing a trick where i only check collisions every 12 moves and its biting me
xxd: xD
ProCoder03: Btw where did you learn GA ???
xxd: I learnt a lot of it from Di_masta's Mars landers post mortem
xxd: :pray:
xxd: its really good cuz he tells u exactly what he was thinking at each step. i stil had a bunch of questions tho which havent been answered yet
ProCoder03: welll, i read that my mind literally died !!
ProCoder03: GA is confusing:stuck_out_tongue_closed_eyes:
xxd: my code doesnt even deserve to work right now though... my fitness function is literally so bad
RightHandElf: use a genetic algorithm to make a better fitness function
ProCoder03: are there any pre requisite for GA ??
ProCoder03: I am just 15 and finding GA terrible hard ??
xxd: frik
ProCoder03: what's frik ??
xxd: cuss word
xxd: im gonna ask wonton if he ran two floodfills
ProCoder03: hi
HMS_123: hey y'all did the 'Coders Strike Back'? Can u tell me the answer for the code?
ProCoder03: you can't find it !!!
ProCoder03: you need to code it yourself
ProCoder03: hint: see the last line of the code !!
xxd: there's no answer
xxd: quite literally
ProCoder03: is there any string Contains method in C++
ProCoder03: ??
M1nerman: well, no, but you can work out whether a substring exists with the find() method
ProCoder03: Thanks , that's exactly what I want !!!
xxd: https://pasteboard.co/KgfZYrR.png
xxd: A:OIFJ:WOIEJF:WOIEJF:OIWHE:IOFJWE:OIFJ
xxd: alright
xxd: im making steady progress
xxd: look at that floodfilled beauty
xxd: i think wontonimo will be proud of me
ProCoder03: wow!!!
ProCoder03: really nice !!
ProCoder03: Mars Lander 3, right ???
xxd: yeah
xxd: i am like
xxd: pretty close i think
shashj: How is the lockdown treating you all??
xxd: badly
xxd: eh
xxd: my school year is starting in <36 hours
Westicles: lockdown? lol that was last year
xxd: so close yet so far
xxd: i need to mess with like 200000000 hyperparameters
xxd: wait. i completely forgot that each pair of parents makes TWO children
xxd: that is so not similar to real life
Westicles: Such a shame, Australia used to be such tough guys.
martinpapa69: they even won the great emo war
martinpapa69: emu*
RightHandElf: they very specifically did not win the great emu war
martinpapa69: ye, i just checked on wiki :D
martinpapa69: I thought it was only a meme
xxd: my GA was like sorta working, then i fixed some bugs and now its broken
RightHandElf: lmao
xxd: I feel like GA where genes are delta_angle and delta_thrust is just... odd
martinpapa69: GA too is just a meme algo
xxd: im starting to believe that
martinpapa69: there are better algos out there
Westicles: I feel like someone should tell him most ML2 solutions are 3-4 if statements
xxd: brb gonna write a GA to try all combinations of 3-4 if statements
ProCoder03: @xxd https://www.youtube.com/watch?v=CZE86BPDqCI
ProCoder03: this one is abt using PID controllers with GA !!
ProCoder03: *tuning a PID
xxd: thanks, will watch
Almin5k: Goodmorning everyone :))
Merfi: Goodmorning. If you’re changing the world, you’re working on important things. You’re excited to get up in the morning
Westicles: That's a poster on the wall in Taliban headquarters\
Merfi: nonononono. If opportunity doesn't knock, build a door
Merfi: And remember, if you want to be happy, be
Westicles: Remember, if you spout cliches, people will think you are vacuous
Almin5k: Fairy tales are more than true: not because they tell us that dragons exist, but because they tell us that dragons can be beaten.
kobebryant: curry when u want, curry when u need, curry in the morning curry on the beach.
kobebryant: curry when u want, curry when u need, curry in the morning curry on the beach.
kobebryant: curry when u want, curry when u need, curry in the morning curry on the beach.
kobebryant: curry when u want, curry when u need, curry in the morning curry on the beach.
ProCoder03: @kobebryant are you a foodie ??
peppers: what are u talking about?
Broski_974: hello
ProCoder03: hello @Broski_974
Merfi: Remember this everyone! Next to trying and winning, the best thing is trying and failing
kobebryant: what is a foodie??????
Westicles: Ain't no curry on the beach if they fine you $3700 if you go outside
kobebryant: curry when u want, curry when u need, curry in the morning curry on the beach.
kobebryant: curry when u want, curry when u need, curry in the morning curry on the beach.
kobebryant: curry when u want, curry when u need, curry in the morning curry on the beach.
kobebryant: curry when u want, curry when u need, curry in the morning curry on the beach.curry when u want, curry when u need, curry in the morning curry on the beach.
kobebryant: curry when u want, curry when u need, curry in the morning curry on the beach.
kobebryant: curry when u want, curry when u need, curry in the morning curry on the beach.
kobebryant: curry when u want, curry when u need, curry in the morning curry on the beach.
Broski_974: :zipper_mouth:
Merfi: Wise men speak because they have something to say, anyone else because they have to say something
Uljahn: guys please discuss coding related topics here, it's a warning
Merfi: ok, sry, im just trying to motivate my friend here. but i will stop now my friend, im sry :sob:
grindy: ok
Uljahn: Merfi: use DM, don't flood the channel
grindy: ?
Broski_974: x)
Broski_974: i'm still about shadow of the knight
Broski_974: :muscle:
Almin5k: which episode
Broski_974: 1
EthanLu34: lol
Broski_974: I understand, so i should write code
EthanLu34: curry=STEPH=GOAT🐐
grindy: curry, haha
Broski_974: curry <3
grindy: hi
grindy: i am back:)
grindy: me back
grindy: food?
grindy: ?
Uljahn: next time is ban
grindy: sorry i will stop
peppers: how can i see others code?
Uljahn: in clashes or puzzles?
Uljahn: solve it at 100% first
EthanLu34: hi
EthanLu34: clashes
peppers: u mean all problem???
EthanLu34: idk
Uljahn: no, solve the puzzle to see other's solutions
EthanLu34: how u kick people?"
Uljahn: with mod powers
EthanLu34: ???
EthanLu34: so u famous?
EthanLu34: also i followed u
EthanLu34: :happy:
EthanLu34: :grinning:
peppers: i just solve a problem but in the share web, everyone has a locked icon.. :joy:
Uljahn: is your result 100%?
peppers: yep successfully submited
grindy: i finish one :)
EthanLu34: gimme code
Uljahn: peppers: while being in the puzzle click results on the left, then click "Learn from the best coders"
EthanLu34: ...
Uljahn: giving a code is not encouraged here
grindy: me gots 100%
Westicles: I think it is... there is XP incentive to publish
peppers: @Uljahn see it, thanks.
Westicles: oh you mean on chat... sorry, I agree
peppers: aha if i submit with python . i cant see other language solution right?
Uljahn: ye
grindy: bye bye bye bye i am leaveing
Almin5k: Goodbye Grindy, if you’re brave enough to say goodbye, life will reward you with a new hello.
dotori: :grinning:
Panavia_tornado: anyone used bezier curves in coders strike back?
Uljahn: not reasonable
Uljahn: any collision will push you out of an optimal path
Panavia_tornado: i play at wooden league, no collision
Uljahn: seems like overengineering for a wood league
Panavia_tornado: I suspect here the main difficulty in the beginning is that I cannot instantly turn the car in the right direction
Uljahn: yes, there is a limit of 18 degrees per turn max
DJUndyingKnight_b8a9: any further hints for the ASCII art excercise? i don't understand how to transform a text input like 'E' to my program knowing its shape without hardcoding anything :<
Westicles: did you look at the hints?
DJUndyingKnight_b8a9: yea i saw that the shapes are given in input, my question was badly phrased. i guess what i don't understand is, how to use that input properly
Armin_programmer2010: hello every body
DJUndyingKnight_b8a9: like how to compare the asked letter "e" with the shapes given
KiwiTae: they give you the ascii version of the alphabet
Merfi: is there anyone else who has some difficulty with the weekly puzzle? becaus i have
Armin_programmer2010: hey guys
Westicles: which one is it?
Armin_programmer2010: how can i get the 100% of score in clash?
Merfi: it is called PROPOSITIONS IN FREGE’S IDEOGRAPHY, do you maybe have any tips/hints on how to do it?
Westicles: Not a very popular puzzle... I would ask on the forum
RightHandElf: I did it with recursion and python's eval function
RightHandElf: and then iterating over every possible combination of trues and falses for every token
Merfi: ok thanks very much, i will try to do that
LTims080913: I can't click on results to see solutions
LTims080913: I'm doing "temperatures"
Uljahn: you can see solutions until you 100% solve it
Uljahn: *can't
LTims080913: then how do I LEARN??? I want to be able to solve algorithms but can't seem to think correctly
Akshei: You try as long, to do it correctly, one way or another, or you can ask us for hints
Akshei: Getting solutions is not learning
LTims080913: Have you finished "temperatures"?
LTims080913: I know a condition needs to be written for the code to run correctly...but I don't know what or how to check
Akshei: Yup, they are pretty easy
Akshei: What inputs do you get in this exercise?
LTims080913: the number of temperatures to analyze (n)
LTims080913: and a string with the temperatures expressed as integers ranging from -273 to 5526
Akshei: And what output do you need to write?
LTims080913: I need to display 0 if no temperatures are provided. Otherwise display the temperature closest to 0
KiwiTae: if n = 0 return 0?
Akshei: And how can you check, what temperature from input is closest to 0?
LTims080913: idk
KiwiTae: is 199999 or 1 closest to 0?
Armin_programmer2010: how can i solve all of the clash of code reverse mode
RightHandElf: for CoC, you've just gotta be able to recognize the pattern
Armin_programmer2010: i mean how to enter the answers
TobiasA: or use openAI codex
LTims080913: 1
Westicles: You know guys, Forrest Gump got through his whole life without doing any programming, and he was happy. Just something to think about
RightHandElf: mama always said programming was like a box of chocolates
RightHandElf: [punchline]
LTims080913: lol
Akshei: How do you know that 1 is closest to 0?
Akshei: And what is closest to 0, 2337 or -1995?
Westicles: Akshei, have you ever played ping pong?
TobiasA: min(abs(2337), abs(-1995))
LTims080913: because it is smaller
LTims080913: and -1995
TobiasA: pong ping
peppers: who like pingpong?
peppers: :raised_hands:
TobiasA: me
TobiasA: want to play?
TobiasA: :ping_pong:
Uljahn: guys, join #pingpong gang, don't spam here
TobiasA: pingpong looks dead
TobiasA: i'll pass
Westicles: We were trying to gently suggest there are minimal mental requirements needed to program. Maybe something should be added to the FAQ?
Armin_programmer2010: hey how can i create a group in here?
TobiasA: there was a time i mistakenly pronounced FAQ as fack-que
RightHandElf: well fack que too, pal
TobiasA: brruh
TobiasA: frequently asked questions too you too
TobiasA: to*
Merfi: does anyone have tips for the spring challenge 2021? im stuck
derjack: use fertilizers
TobiasA: what league are you in?
TobiasA: i think you just have to harvest the trees
AntiSquid: i use this, it says you can dilute it into 300 L on the package : https://www.amazon.co.uk/Doff-F-JG-A00-DOF-1L-Tomato-Feed/dp/B004Z4UOBM Merfi
TobiasA: :joy:
Coder_noob001: any tips for increasing the difficulty level in private clash
derjack: make shortest mode in java only
Seahorse06: :D
UltraDarkCoder: how to increase thrust in coders strikes back ; help me please
TobiasA: step 1: increase thrust
TobiasA: literally
Uljahn: step 2: promote to higher leagues and use boost
Uljahn: UltraDarkCoder: how does your output look like?
Uljahn: should be 3 space separated numbers, third one is thrust, max thrust is 100 till legend
UltraDarkCoder: sorry about my grammer
Uljahn: no problem
KNTK: Is it okay to copy and paste code in CoC, such as predefined functions and data structures? I assume yes, just want to hear confirmation.
Astrobytes: Yes.
KNTK: Thanks
eulerscheZahl: paste all of your templates. especially for shortest mode
eulerscheZahl: did anyone solve a puzzle recently while having the auto-publish feature enabled in the profile settings? to me it looks like my published solution remains private
Westicles: which puzzle? I can check if I can see it
eulerscheZahl: i checked in incognito mode. but sure. this one for instance https://www.codingame.com/training/hard/adversarial-mate-with-rook
Westicles: nope, not there
Westicles: I know zeno was having problems with solutions auto publishing when he didn't want them to...
eulerscheZahl: https://www.codingame.com/training/hard/adversarial-mate-with-rook it says published. i guess i'll report it on discord
Wontonimo: i think anyone with an IQ above 80 can do some programming if they are patient and interested and we are liberal with the term "programmer" to include excel formulas and scratch.mit.edu
Wontonimo: oh, geez, sorry
Wontonimo: i guess my scroll didn't update. i was obviously looking at an old post by Westicles
Westicles: heh heh
eulerscheZahl: so this was not your reaction to me soling the adversarial mate?
Wontonimo: no no !
Wontonimo: West posted something around 5 hours ago, now that i look at the time stamp
MSmits: I don't think using excel is easier than some programming languages
MSmits: it's mighty unintuitive
MSmits: maybe this is because of coming from math/physics
MSmits: not sure
Westicles: the Bell Curve guy wrote you need 120 minimum to be a competitive programmer, but of course everyone thinks he is evil or whatever
MSmits: competitive is the operative word there
MSmits: you don't actually need to be competitive imho
eulerscheZahl: i facepalm every time a colleague wants to use excel for data entry and expects my program to extract the inputs and generate another excel from it
Wontonimo: it's the "new" normal average IQ 110 or 120 anyway.
eulerscheZahl: much less effective now that I work from home (and without a webcam)
eulerscheZahl: average IQ is 100 by definition
Wontonimo: if we are talking about IQ measuring abstract thinking
Wontonimo: average IQ *was* 100 at the time it was created
eulerscheZahl: so if you have an IQ of 100 today and later generations get smarter, your IQ will actually decrease without you doing anything
eulerscheZahl: https://en.wikipedia.org/wiki/Flynn_effect
Wontonimo: that's not how they do it in America iirc
MSmits: nah, they educate their kids worse with every new generation, just to make their IQ go up :P
martinpapa69: pretty smart of them
eulerscheZahl: and you are part of that system of bad education
Westicles: they play around with the standard deviation sometimes, it isn't standardized
MSmits: I am not American :P
MSmits: we have our own education problems
eulerscheZahl: we too. whenever a new Pisa study comes out *insert this-is-fine meme*
Wontonimo: I REALLY liked this ted talk (before ted talks became just product advertisements) https://www.ted.com/talks/james_flynn_why_our_iq_levels_are_higher_than_our_grandparents?language=en
MSmits: in my country it's mostly a matter of investment and making the job as a teacher more attractive
MSmits: it used to be a high status job, but not it's almost looked down upon in some circles
MSmits: that's not good for quality
Wontonimo: a great reminder that the last 100 years has been substantially different than the previous 100,000
eulerscheZahl: but not = now?
MSmits: but now yes
MSmits: The question that's sometimes asked:
eulerscheZahl: some people just see that teachers got lots of holidays
MSmits: Hey you got a university degree, why go into teaching?
eulerscheZahl: and don't see that you have to invest time outside of class
MSmits: they forget you actually *need* this degree to even teach the ages/levels i teach
MSmits: eulerscheZahl that too
Wontonimo: in North America, there used to be a saying "They who can do, those who can't teach", so yeah, there is certainly a lack of respect for teachers here
MSmits: if you go back 50 yrs or so, doctors, teachers and lawyers would have about the same status
Wontonimo: I love teaching, but my dad repeating that phrase when I was young really got me out of considering it
MSmits: yeah it's bad
MSmits: teaching requires actual talent beyond the subject you're teaching
Westicles: Yep. A=business owner, B=employee, C=teacher, D=government
eulerscheZahl: former chancellor Schröder called teachers "faule Säcke" (lazy *scumbags? - not sure how to translate best*)
MSmits: wow really
Wontonimo: Teachers in Canada make great money, on par with other trained professionals, and better benefits
MSmits: oh, we actually don't get paid that badly, most of us
MSmits: the weird thing though, is that all teachers more or less get paid the same if they teach the same level of education, no matter the subject
MSmits: so an English teacher gets the same as a CS teacher
MSmits: which makes it *really* hard to find CS teachers
eulerscheZahl: as industry pays much higher on that field
MSmits: yeah, if you're at all competent at it, that is
MSmits: so mostly what you see is the biology teacher doing CS on the side, because noone else is available
eulerscheZahl: my CS education in the school wasn't much better
Wontonimo: It's a fantastic career option in Canada. The pay is related to the number of core subjects you can teach (not the number you actually teach), if you can teach in English and French, and how many age group related specializations you have (children, teens, adult), and special needs certifications.
eulerscheZahl: but good enough to get my interested in that field at least
EngineHeart: can I join clashes only in one languiage ?
EngineHeart: cause Java is longer and slower to code :)
eulerscheZahl: you can switch the language above the code editor
EngineHeart: I can but I use Java only as primary language :)
Wontonimo: yeah, use python if you want to win clashes
eulerscheZahl: for private clashes it's possible to disable language selection
EngineHeart: my question is can I compete on speed only with Java
Wontonimo: yeah, that is true
Wontonimo: hey EngineHeart, have you seen any of the puzzles ? https://www.codingame.com/training
EngineHeart: so no way unless I find other Java dudes? that's kind-a weird
Wontonimo: you can use java there. There is no time limit
EngineHeart: sure I'm doing these as well
Wontonimo: and java does NOT put you at a disadvantage
EngineHeart: but wanted to getr chalaange on Clash (for fun)
EngineHeart: and the best so far is 1sec less the pyton (I shoulnd test all but just the first TC)
Wontonimo: well, if you are looking for fun, try out this bot battle https://www.codingame.com/multiplayer/bot-programming/botters-of-the-galaxy
Wontonimo: where your code battles other peoples code
MSmits: EngineHeart clash of code is to me, the least interesting thing on CG
Wontonimo: there are lots of other bot battles too.
Wontonimo: https://www.codingame.com/multiplayer/bot-programming
MSmits: or optimization arena's or practice puzzles
EngineHeart: true - I just wanted to win :) this is the interesting part.... the rets is within the other tasks
EngineHeart: I'm here cause of an interview where I times out
MSmits: ohh
MSmits: well
MSmits: i recommend just doing practice puzzles
MSmits: you'll get faster without a time limit also
Wontonimo: i second that recommendation
MSmits: why stress yourself?
EngineHeart: so no worries I just wanted to know if I can LOCK the lang to Java in the Clashes
EngineHeart: if not I'm moving on
MSmits: nope
MSmits: language remains a free choice
Wontonimo: EngineHeart , did they ask you to code in Java for the interview clash?
Wontonimo: Ni sasani
Wontonimo: *Hi
sasani: My friends, I am a newcomer
Wontonimo: I can tell :D
Wontonimo: (lack of profile pic gives it away)
sasani: Teach me someone who knows programming
Wontonimo: try some of these puzzles sasani https://www.codingame.com/training/easy
sasani: Do you have WhatsApp to talk to?
Wontonimo: no
Wontonimo: i'm too old for that
MSmits: for 2 yrs I thought whatsapp was an appstore
sasani: I want you to help me with programming
eulerscheZahl: we can. but not on whatsapp
Wontonimo: what programming experience do you have and what programming language do you know?
eulerscheZahl: i'm modern enough to have a discord account :muscle:
MSmits: discord confuses me
Wontonimo: lol
MSmits: I like it, in principle
eulerscheZahl: i muted most channels because there were always those unread notes
MSmits: I just get lost
sasani: I am a computer engineering student
MSmits: oh right, that's probably my problem too euler
Wontonimo: and what programming language do you have some experience in?
MSmits: when you have to go here to learn
MSmits: your professors might not be very good :P
MSmits: ask for refund imho
Wontonimo: no! not at all. You just may be keen
Westicles: You guys are so nice. I guess bringing up IQ and making comparisons to Forrest Gump is less friendly..
sasani: JavaScript and C # are basic
MSmits: python is like a box of chocolates
MSmits: you never know what it's gonna do
Wontonimo: sasani, you can select either Javascript or c# as the language you want to use in any of the programming challenges or multis here.
Westicles: All but one...
MSmits: C# is a great language to learn with
Wontonimo: If you want to learn the basics, like "if" "while" "for" and "arrays", this is not the place sasani.
eulerscheZahl: just don't try Pascal
MSmits: has a little bit of everything, yet easy to get into
jacek: kids these days... back in my days we were using irc
sasani: Well I do not know I do not want to help me if any programmer knows professionally
eulerscheZahl: i still know my ICQ number
Wontonimo: do you use it in your passwords?
MSmits: I never did
MSmits: I did use icq
TobiasA: what is irc?
jacek: oO
eulerscheZahl: kids these days
eulerscheZahl: chat protocol
Wontonimo: (╯°□°)╯︵ ┻━┻
TobiasA: irc is chat protocol?
Westicles: iirc
TobiasA: what is iirc?
Wontonimo: and i bet they also never had to use a tap drive as their only storage device (no hard drive or disk)
eulerscheZahl: https://en.wikipedia.org/wiki/Internet_Relay_Chat and iirc = if i remember correctly
sasani: Can anyone help you with your programming career?
TobiasA: check youtube sasani
AlirezaNum1: hi i need a friend who has started to learn programming recently(python)
sasani: I also need someone to teach me Python
TobiasA: what about one who didn't start recently?
AlirezaNum1: im not in high level to teach
sasani: If you have WhatsApp, give us a number so we can group there
TobiasA: so irc is just social media
MSmits: irc is like discord
MSmits: except more anonymous
MSmits: I think
sasani: Alireza is my name, Mohammad Reza
TobiasA: oh got it
MSmits: mmh sasani you just told a million hackers your name
AlirezaNum1: داداش ایرانی هستی؟
MSmits: jk
MSmits: there's only a few thousand at most
TobiasA: wen't from english to noodles quick
eulerscheZahl: oh I have something to contribute too ̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤
MSmits: pretty sure those are oware opening moves TobiasA
MSmits: I would start with move 5 though
sasani: برنامه نویسیت چه قدر قویه؟
eulerscheZahl: seriously: english or kick
TobiasA: that's a possibility:joy:
b0n5a1: please english
AlirezaNum1: دانشجوی سال اول علوم کامپیتر ام
b0n5a1: no need to speak arab to ask if others are from Iran...
eulerscheZahl: you have been warned
b0n5a1: stop
sasani: منم مهندسی سال اولم کامپیوتر
jacek: :upside_down:
TobiasA: what happened to whatsapp sasani
eulerscheZahl: he's gone
MSmits: it got taken over by facebook
MSmits: which is why you should be terrified of using it
MSmits: i can never get over the fact that they state in their terms of use that you have to be 16 or older (or is it 18?) and teachers let whole classes make whatsapp chat groups for 12 yr olds
MSmits: very irresponsible
jacek: you give idea for the kids to report the teachers
MSmits: they dont want to
MSmits: they all love their whatsapp
Westicles: reddit=CCP as well
jacek: like they 1-starred zoom/meet/etc so no lessons would be done
MSmits: we dont use zoom at my school
MSmits: MS teams + google
Wontonimo: oh, there is an interesting marking on the right side of the chat, starting with MSmits saying "pretty sure those are ..."
Westicles: that's was euler's contribution
MSmits: yeah, sometimes the chat wants to emphasize the good points i make
Scarfield: ̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤̤
MSmits: oh noes
MSmits: don't cross out
MSmits: my wise words
Scarfield: im emphasizing them :p
MSmits: you're doin it wrong :P
Wontonimo: no really, what is that from? Is that a mod feature to emphasize or mark part of the conversation?
Scarfield: weird unicode stuff, idk
jacek: its emergence from automaons
GroutchKeu: :o
TobiasA: :O
Wontonimo: I think it was right after "oh I have something to contribute too" eulerscheZahl
Wontonimo: what did you paste right at the end of that sentence ?
TobiasA: now my name is obiasA
Wontonimo: fun unicode stuff!
Uljahn: guess it's a char from zalgo font
TobiasA: probably the ending moves of msmits oware bot:joy:
eulerscheZahl: actually that long vertical line was "invented" by AutomatonNN
MSmits: it's emergent behavior
Uljahn: doubt it
eulerscheZahl: probably a bug
eulerscheZahl: Agade said it should not print non-ASCII characters. yet it did
MSmits: it also called you a noob
Uljahn: t̸̡̡̧̢̧̨̨̧̡̨̡̨̺̟͙̰̬͕̜̖̳͎͇̠̟̣͕̺͈̦̗̞̠͇̳͎͉̻͚̺̹̞͉͍͙̟͔̺̝̲̳͍͉̜̩̟̹̙͖͙͉̤̳͎͈̠͍͙̯̲͓̻̣͔̜̯̠̜̖̠̘̣̗͕̞͍̹̲̬͓̝̖͇͍̮͇̮͓̜͕͚̭̙͈̪̩̗̙̪͔̩̎͐͗͑̌̉͆̉̑̈́̂̓̀̓̈̾̓̉̅͒̇̒̀̀͗̎̚̕̚͘͜͜͝͝͝ͅͅͅ
martinpapa69: this stuff was a thing even on facebook
MSmits: well automatonNN is a lot like mark zuckerberg
MSmits: sometimes it almost seems human
Scarfield: with lizard features
TobiasA: :laughing:
T-riPheo: hi
jacek: ohai
michaellan: hi
michaellan: good morning
TobiasA: hi
Wontonimo: :wave:
michaellan: when I compile with sanitizers I get an error but when I compile normally it runs without error
michaellan: :rage:
ProCoder03: probably, your code is refusing it because it's already immune to COVID
jacek: :drum:
ProCoder03: @xxd are trying to compile natively on mac
michaellan: its fine i fixed it
michaellan: I just.. dont inherently get how a GA _would_ work for this problem
KalamariKing: what problem?
michaellan: Mars lander 2/3
TobiasA: you can do mars lander 2 the physics way
KalamariKing: yeah wouldn'
KalamariKing: t a traditional convolutional work beter
michaellan: tf
Scarfield: you make a "gene" out of the action choices you have (angle,thrust), a genome (a series of genes). Simulate how the pod would fly with the actions from a genome and evaluate.
Scarfield: have a population of many genomes, keep track of the best scoring ones, make crossovers and mutations, rince and repeat
michaellan: Yeah but crossovers ...
michaellan: like I'm at least doing d_angle and d_thrust, not angle and thrust
michaellan: because that's what di_masta did
michaellan: so at each point its [-15,15] and [-1,1]
Scarfield: thats fine, depending on the way you do it, you need to make sure that the genomes still work within the game rules after crossover.
Scarfield: iterate through them, if total angle or thrust is out of bounds, fix them
Uljahn: welcome to a local optimum, Automaton2000
Automaton2000: tell him to play csb
Scarfield: xD
Wontonimo: no, i disagree Scarfield. Don't fix the out of bounds. That could be a possible mutation to fix them, but don't always
Wontonimo: the bounds checking would be in the interpretation
xxd: I clamp them during simulation
Wontonimo: yeah, i'd go with that
xxd: my local testing looks really good but its not translating to CG :/
xxd: I think my physics sim might somehow be off
Wontonimo: do you have a print or something for local?
xxd: wdym?
Wontonimo: hey blaze
xxd: I generate it and print everything out in the first second xD
xxd: i should see if my local sim aligns with CG sim
Scarfield: im no expert, but it seems more reasonable to me to "fix" the genomes, to avoid them exploding
Wontonimo: and you have a solution in first second?
xxd: well i have one for at least one testcase
Scarfield: i fix/correct mine after mutation though
Scarfield: you could paste your sim here xxd, we can tell you if its wrong
michaellan: was thinking of doing that, going to refer to Post Mortem's first
michaellan: to make sure i didnt srew up
Scarfield: also, what is your pop size, gene count and how many generations do you get?
michaellan: 40, 40, 400
michaellan: OH GOD
michaellan: bruh
michaellan: wait lemme try smth
michaellan: basically i meant to have each gene last for 3 turns
Scarfield: 40 genes is too little, the maps take more turns than that
michaellan: but i realize I am applying the d_angle and d_thrust 3 times
Scarfield: ah
michaellan: when i mean to have it "hold" for 3 turns
michaellan: maybe that will help converg more sensibly
michaellan: alright, i can't find the post I used earlier, so here's the "next_move" function of my physics sim https://clbin.com/ipMx6
michaellan: oh originally i put the negative sign on n.a_x = -sinf(...
Scarfield: looks correct, its often the ½ * acceleration thats wrong, the only physics game on CG that works like that and not just adds the acc
Scarfield: what i mean is that people often doesnt multiply acc with ½, what you are doing looks good. dont take my word for it though, i suck at reading others code xD
Mocky-FS: Les code clash quand on débute sur python, c'est assez chaud x)
michaellan: i hate this
michaellan: OH MY GOD
michaellan: it worked on the first test case
michaellan: xD
Scarfield: :muscle:
michaellan: not sure if it's any good though.. i wanna compare it to someone else's
Scarfield: https://www.codingame.com/ide/puzzle/mars-lander
michaellan: https://www.codingame.com/replay/576031355
michaellan: what
Scarfield: there an optim version of mars lander 2
michaellan: yeah ik
michaellan: okay my thing is like broken
michaellan: its luck that it works on the first testcase :(
eulerscheZahl: pro tip: view settings => Audio => off
michaellan: UGHHH this is so infuriating
eulerscheZahl: makes mars lander much better
michaellan: my code is 600+ lines of spaghetti
Wontonimo: yikes
Wontonimo: spaghetti is no good
Wontonimo: 600+ lines though, that sounds about right
michaellan: spaghetti cuz all my debugging/visualizing code is coupled to the actual logic
michaellan: and I used copy paste like a madman instead of properly abstracting
michaellan: Also, was my assumption that the mars lander is a point incorrect?
Westicles: 600 lines? just as long as you know most solutions are like 40 or less
michaellan: thanks westicles
michaellan: :cry:
Westicles: I'm not sure why you are being steered into a complicated solution
michaellan: I want a solution that will automatically work for mars lander 3 and do well on the optim too
Westicles: ML3 also has short solutions with a few ifs
michaellan: crud
michaellan: this is so sad
brok_38383: alguien de latinoamerica
Wontonimo: brok_38383 english on this channel only
Wontonimo: there are other language channels brok_38383
Wontonimo: in spanish : inglés solo en este canal
michaellan: hay otros canales para otras lenguas
brok_38383: ai clearly says world without english chat so i am free to speak the language that sticks to me
michaellan: english is the language of the world
Astrobytes: No. It's a common channel for all nationalities, so they chose to use English in World.
michaellan: I'm gonna try to add more "biased" genomes at the start
brok_38383: algien que hable en español...
Scarfield: one thing i did today was to make the genomes more biased in the end, if a genome reaches the landing zone, change the angle to being upright at that point, instead of fully relying on the GA to find it
michaellan: yeah I do do that scarfield, thanks for mentioning that
Scarfield: okay, btw if your replay wasnt a lucky fluke, it was a pretty good score :)
michaellan: I think that replay was incredibly lucky, i thikn the spaceship was *accidentally* upright the moment it hit the ground
michaellan: :/
Scarfield: xD
Swyfti: good morning everyone
Scarfield: tipStrobytes :wave"
Scarfield: :wave:
Astrobytes: Scarfolomew :wave:
brok_38383: I already understood the world is the English chat sorry for the confusion and for interrupting your chat
Astrobytes: OK, cool
Swyfti: wait, are you guys saying that there are chats in other languages?
Swyfti: i never knew that existed
Swyfti: is there one for chinese
Astrobytes: Daniel probably knew about it.
michaellan: or maybe its daniel talking right now
Swyfti: guys chill its not
michaellan: omg i think i have a lead, my "left bank" and "right bank" genomes make 45-degree-angle lines into the ground instead of floating horizontally
Swyfti: wdym
michaellan: they dont float
Swyfti: there are many things that do not float
Astrobytes: But they all float down here :balloon:
Astrobytes: And you'll float too! :clown:
Scarfield: wdym by left bank genome?
michaellan: i took wontonimo's advice and added some intentional genomes in my initialization
TobiasA: *pennywise entered the chat*
michaellan: namely one that floats off to the left and one that floats off to the right
michaellan: i've fixed it, turns out it wasnt to do with my physics sim. so thats sad
Scarfield: ah, 21deg and 4 thrust or something close to it?
michaellan: close, 11deg
Scarfield: "close" :p
AllYourTrees: whoa royale causing big changes in c4 top
Scarfield: yea saw that too
AllYourTrees: thats crazy
michaellan: what did he do?
Astrobytes: NN'd it probably
Westicles: added cheese
TobiasA: caused big changes in c4
Scarfield: gotta try and join the NN club soon, and be part of the 0.5%
AllYourTrees: a bunch of players who haven't submitted moved around cause of him lol
michaellan: ah i see
michaellan: also, why is there only wood league for it?
AllYourTrees: :shrug:
Astrobytes: Community multis only have wood leagues
Astrobytes: Usually we have Wood 2 to get used to the game, and the boss filters out random bots so you get better quality in the top league
Astrobytes: (random as in just pick a random given move, no sim+search, no real bot)
xxd: gotcha
xxd: everyone's bitboarding for c4 right?
Astrobytes: About 98% of the community-made board games involve bitboarding
Scarfield: xxd if you want your pod to hover sideways, it should be 22deg and 4thrust, assuming you have no vertical vel
Scarfield: https://www.codingame.com/replay/576036849
xxd: oh, weird
xxd: okay let me change those
xxd: but i've been sufficiently distracted into c4 now
xxd: a basic MCTS doesnt seem that hard, bitboarding seems straightforward but i wonder if theres some fast bit operation to perform the move (i.e., "drop" the circle)
MSmits: |= 1 << index ?
martinpapa69: there is a template in c++ called bitset
TobiasA: yesh
xxd: i meant like, given you want to drop it in the 7th slot, which square does it end up in
MSmits: |= 1 << 7 ?
MSmits: no
xxd: huh
TobiasA: yesh
MSmits: |= 1 << 6 sry
xxd: do you not store the whole board in an int64 or something?
MSmits: if you're doing uttt, then mostly people use 9x uint16 for each player
Scarfield: depends on the way you "setup" your bitboard, bottom left, bottom right, top left, top right could all be set as 1 (and so on), different preferences
xxd: I"m talking about C4
MSmits: ohhh
xxd: sorry
MSmits: well then it's two uint64_t
xxd: yeah
MSmits: let me find out how i apply a move, sec
xxd: but im still talking about how you know where the circle lands
eulerscheZahl: "About 98% of the community-made board games involve bitboarding" that's 49 out of 50. There aren't even that many community games and I can easily tell you 2 that work without bitboards ;)
xxd: cuz the exact slot depends on how many previously have been dropped in that slot
xxd: and it can be done with a while loop but that sounds incredibly sloow
Astrobytes: eulerscheZahl: I stand corrected. Did you know that 75% of statistics are made up on the spot? :P
martinpapa69: including this one ?
Astrobytes: Yes.
martinpapa69: oh
eulerscheZahl: thanks for explaining the joke
MSmits: xxd I don't actually apply moves this way
xxd: :/
MSmits: I don't ever "choose" a slot
MSmits: I choose a square on the entire board and only consider the lowest ones to be valid squares
xxd: oh
MSmits: which may seem like it's the same, but it's a different approach
xxd: but that uses a lot more rng s
xxd: so its only valid if the square to the right is filled, basically
xxd: or if its the bottom one
eulerscheZahl: https://yare.io/ i wonder if i should get into this or not
MSmits: I'm trying to find a snippet of code i can share thats not completely obscure
eulerscheZahl: downside: it's javascript. and i'm not sure if there's an easy way to code offline
MSmits: xxd this is useful:
MSmits: http://chat.codingame.com/pastebin/4fe38c0b-50a5-4914-ac1d-fa5a95c63c97
MSmits: you add up both player boards
MSmits: p1 | p2
MSmits: and feed it to this function
eulerscheZahl: random match: https://yare.io/d1/lwegthe2dn2
MSmits: then it returns the valid squares you can play
xxd: i'm gonna need to ponder this for a while
MSmits: it works as follows
MSmits: (flipped ^ (flipped << 9))
andyescobar: Hello guys does anyone know how to translate this c++ code into java for(int j = 0; j < ((digits[i]) + (i == 0)); j++)
arrayB[numb6 | (j==6)] [numb8 | (j==8)]++;
MSmits: this compares each tile with the tile above
MSmits: if they are the same, it is 0, if they are different it is 1
MSmits: the places where it is different, is where the allowed move sits
michaellan: thats fucking genius
MSmits: struct came up with this one
eulerscheZahl: that part should compile in java too andyescobar, doesn't it?
Scarfield: MSmits the biz wiz
michaellan: i think you may need to cast if necessary andyescobar
MSmits: no no, not me this time
Swyfti: is there any real similarity between java and javascript?
eulerscheZahl: https://github.com/denkspuren/BitboardC4/blob/master/BitboardDesign.md
MSmits: xxd btw, if you calculate the "allowed moves" one time and just update it, it could be faster
eulerscheZahl: both java and javascript are somewhat based on C syntax
martinpapa69: https://en.cppreference.com/w/cpp/utility/bitset :/
michaellan: ah thats true, but its literally some bit operations
michaellan: no one likes bitset martinpapa69
Swyfti: C was my first computing language :sigh:
eulerscheZahl: as similar as "english and german use the same alphabet (mostly, german has äöüß)
MSmits: true
michaellan: so its like sacrificing another 8 bytes in your node, for a tiny speedup
michaellan: i'll try writing both
MSmits: wait, what is your node like?
michaellan: Wontonimo gave me a random_bit function that uses SSE instructions lol , i think i will use that here
michaellan: I havent started to write it, but just thinking about it it would probably have 2 int64s for the players, win/visit, parent pointer, heap array of children pointers
MSmits: http://chat.codingame.com/pastebin/f78ee5bd-96dc-4844-81ed-9de52458cd72
MSmits: this is all i have
michaellan: I might also remove parent pointer and instead do a thing with a path array
michaellan: ah you use the node pool as well
MSmits: no need for a parent pointer
michaellan: i think a lot of the top people do it
MSmits: and no need for a pointer to anything but the first child
MSmits: all of them
michaellan: is the node pool on the heap?
eulerscheZahl: you waste some space if you only visit the node once
Scarfield: thanks for the legal moves, i stole it :)
MSmits: it's a giant global array xxd
eulerscheZahl: and you store the full board in each node? not generate it again from the root?
MSmits: in this game i do eulerscheZahl, i never tried to do it otherwise
MSmits: in some games it's better to store on the node
MSmits: i coded this bot in a day
michaellan: Lol, the available moves is more advanced than what is shown in that github markdown file someone linked above
MSmits: you can be sure that if it comes from struct, it will be *very* hard to find better
michaellan: Is it sized at compile time? what happens if you run out of space? MSmits
andyescobar: hello guys does anyone know how to translate this code into java
andyescobar: for(int j = 0; j < ((digits[i]) + (i == 0)); j++)
arrayB[numb6 | (j==6)] [numb8 | (j==8)]++;
eulerscheZahl: it crashes
MSmits: it's sized at compile time or in the first second, not sure. But I reset the tree when i run out
michaellan: darn
MSmits: you can only run out if you reuse tree between turns
michaellan: is it like 1 million or something
eulerscheZahl: andyescobar i already answered you. why would this snippet not work in Java already?
MSmits: way more
MSmits: const int NODE_MAX = 25000000;
michaellan: 10m?
michaellan: wowzer
MSmits: it's almost all the memory you get
Scarfield: and you run out o0
michaellan: msmits thanks so much
michaellan: im gonna try writing it now
eulerscheZahl: just write (int)2.5e7
eulerscheZahl: much more readable
MSmits: i sometimes run out, but not so much in C4 i think
eulerscheZahl: or does C++ support 25_000_000?
MSmits: bandas is horrible for running out of nodes. Happens in oware too i think
MSmits: but you can just reset
MSmits: eulerscheZahl no idea
michaellan: does the global array also have a corresponding "end" pointer
MSmits: and yeah. I also still write some bit literals as decimals
Scarfield: sure, how many rollouts do you get you remember?
andyescobar: I was stuck in the program
MSmits: for C4 ?
MSmits: I can check
Scarfield: ye
michaellan: is the type of the global pool Node[] or Node*[]
MSmits: wait rollouts are meaningless because of how i rollout
MSmits: I rollout form each child
eulerscheZahl: how many single steps then?
Scarfield: after expansion, so do i actually
MSmits: http://chat.codingame.com/pastebin/fe628476-f0a4-422a-84f9-584120b1e591
MSmits: 4
MSmits: 3 million sry
MSmits: on first turn
MSmits: (steps
michaellan: holy
michaellan: thanks MSmits
eulerscheZahl: 600k here :(
MSmits: wait, no
MSmits: it's 3 million expansions I think
MSmits: children expanded sry
MSmits: so 3 million / 9 expansions
andyescobar: hello eulerscheZahl this does not work in Java it keeps showing an error of bitwise operator undefined
MSmits: 356k rollouts, a rollout being 9 children simmed to end of game, which means 3 million random rollouts
xxd: fix the error
Scarfield: if you rollout for each child, its also your rollout count i guess, im at 1.5mil
michaellan: why do you roll out each child
michaellan: i dont recall that being described in anything i read
MSmits: sometimes it performs a bit better
MSmits: you get less rollouts, but more statistics
michaellan: so u still backpropagate each rollout etc
eulerscheZahl: (i == 0) this should be (i == 0 ? 1 : 0) in Java
MSmits: this is worthwhile if your selection function is a bottleneck
MSmits: and in my case it is
Scarfield: there are many different ways to do it. i expand every child, rollout every child, instead of only expanding 1 child
michaellan: I see
eulerscheZahl: same for (j == 6) and (j == 8)
eulerscheZahl: == 8 )
michaellan: oh is it the rng thats the bottleneck?
MSmits: http://chat.codingame.com/pastebin/8e7b339c-984a-41ae-8e43-481523786b44
michaellan: or the UCT
MSmits: uct
michaellan: is UCT generally the bottleneck?
MSmits: xxd it depends on how expensive the random sim is and how long the random sim takes
michaellan: this pool method is so elegant
MSmits: near the end of the game, your selection tree is most of the tree and the random sim is very cheap
MSmits: in the beginning, random sim is the main bottleneck
michaellan: instead ofNode* you could also have used integer for index in node pool right, just confirming
MSmits: because it takes so long
Scarfield: yea i was thinking aplying some variable depth-rollout thing, but meh
michaellan: I see
michaellan: tree grows deeper
MSmits: yeah Scarfield things like that can help
MSmits: but my experience is that looking for improvements like that is really frustrating
MSmits: because most of the time it doesn't
michaellan: can re-writing it in C be faster
MSmits: only if you misuse C++
Wontonimo: xxd, if you rollout every node upon creation, then you don't have to account for zero visits in any of your UCB calculations
MSmits: thats true
michaellan: darn
michaellan: one less conditional branch damn
MSmits: and also you're supposed to pick the first child randomly according to basic mcts
michaellan: that prob makes a nontrivial difference
michaellan: oh
michaellan: i originally did that
MSmits: and if you just rollout from each, you dont have to worry about it
Wontonimo: pretty trivial difference
michaellan: but i watched a video that just said pick the first one
MSmits: mind you, i never pick randomly
MSmits: it's not really worth it
michaellan: and i did around the same
MSmits: yeah
Wontonimo: picking the first one is GREAT for debugging
MSmits: but when you rollout all children you dont even need to worry about the order
Wontonimo: so, yeah, do that until you work out all the bugs
MSmits: oh xxd, 1 piece of advice. When you create your pool, don't initialize the nodes
MSmits: so dont do "childcount = 0"
Wontonimo: very important
MSmits: otherwise you will be initializing 700 mb of memory
MSmits: and time out
Wontonimo: make a function called something like "init" that does it
MSmits: only when using the node
Wontonimo: ^^ that
MSmits: http://chat.codingame.com/pastebin/c5ff86e8-8128-40d5-a4e6-a5f7e7be84a7
michaellan: super confused
MSmits: we just mean the properties
MSmits: look at the node i shared
MSmits: none of the parts of the node have a value
MSmits: they are all unset
MSmits: well in fact they are set to whatever is in memory
darkhorse64: Another good reason to rollout every child is that near the end you get more terminal nodes and your solver performs better
MSmits: oh, yeah that's true
michaellan: theres too much info to take in.. i feel like i should be taking notes
AllYourTrees: lol
Wontonimo: holy cow xxd! you're 152nd in legend for UTTT !!!
Wontonimo: congrats !!
MSmits: yeah that's nicely done
michaellan: yeah... i told you a while ago
michaellan: thanks
AllYourTrees: smits when do you do solver stuff? didn't see it in the backprop fn you linked earlier
Wontonimo: i forget :sad:
Swyfti: :disappointed_relieved:
AllYourTrees: :eyes:
MSmits: separately AllYourTrees
michaellan: C4/UTTT/dumb bitboarding MCTS is more fun to me than hard physics problems :angry:
MSmits: if (finished) SolverPropagation(-bestResult); else MultiBackPropagation(startSign * rolloutWins, selectedState->childMax);
MSmits: bah no pastebin
AllYourTrees: ahh okay
MiyamuraIzumi: not yet write MCTS :(
michaellan: sorry MSmits but I still don't get what you mean by "MSmits> so dont do "childcount = 0""
Wontonimo: have you tried flat MC yet MiyamuraIzumi ?
MSmits: ok separate example xxd
MSmits: say you're creating a 2d vector
MSmits: struct Vector { int x = 0; int y = 0 };
MSmits: struct Vector { int x; int y; };
michaellan: ah
MSmits: this works too
michaellan: so latter here is better since it doesnt init
MSmits: but it doesnt set the memory to 0
MSmits: exactly
MiyamuraIzumi: I don't do any bot game for now
michaellan: gotcha
michaellan: so
MSmits: normally this is bad practice
michaellan: i put it in constructor instead?
MSmits: but we dont code normal here
MiyamuraIzumi: feel lazy :(
MSmits: no
MSmits: you dont construct
MSmits: you set by function
michaellan: OH
darkhorse64: We are fast and furious
MSmits: it's not a constructor
michaellan: i have a fake constructor
michaellan: that is never automatically called
MSmits: yeah
Scarfield: http://chat.codingame.com/pastebin/006b205b-6d85-4d30-b181-e0c3fa7a9214
michaellan: smart lads
Scarfield: this is what i do, and what you mean right?
michaellan: how 2 be more like u guys
MSmits: http://chat.codingame.com/pastebin/f5f263bd-2e26-4330-b755-388eaf0a0165
michaellan: yeah i think thats what msmits describes
MSmits: more info for you
MSmits: makes things more clear maybe
michaellan: why you call it setChild
michaellan: that seems like the wrong name
Wontonimo: i call mine "init"
MSmits: i am setting the node thats already there in the pool
MSmits: init is maybe better
MSmits: dunno
michaellan: true
MSmits: init has an issue though
MSmits: nodes can be reused
michaellan: when
MSmits: when your tree runs out
MSmits: and you start again at index 1
michaellan: 0*
michaellan: or 1?
michaellan: what
MSmits: well
MSmits: the root is 0
MSmits: the first child of the root will be 1
michaellan: but dont you set the root again too
MSmits: sure, i have a separate set root function though :)
michaellan: i see
MSmits: wait no i dont for this one
michaellan: o
MSmits: i have so many boardgame bots
michaellan: haha
MSmits: they are all slightly different
michaellan: by the way
michaellan: where do you teach computer science?
MSmits: in a highschool in my country
MSmits: 15-18 yr olds
shayah_goba: how do you make a string start with the letter 0 in python
michaellan: wow
michaellan: those kids are lucky
MSmits: i like to think so :0
shayah_goba: how do you make a string start with the letter 0 in python
Wontonimo: variable[0] = "O"
michaellan: nah you cant
michaellan: do that
Wontonimo: don't spam shayah_goba, just be patient
StevenV: only know Heuristic :)
shayah_goba: dam so i just gotta give up
michaellan: s = '0' + s[1:]
Wontonimo: thanks xxd
michaellan: (strings are immutable)
MSmits: aren't they in most languages?
michaellan: shayah_goba: are you in some dumb clash?
MSmits: C# has the stringbuilder
michaellan: yeah, not perl thoug
MSmits: strings are misleading like that as you generally do a lot of += on strings
michaellan: I've been using a separet State struct and a Node struct
MSmits: but you're making a new string when you do that
michaellan: but i dont think thats necessary now
michaellan: ya
michaellan: i think c++ might optimize it sometimes?
michaellan: not too sure about that
MSmits: no idea
MSmits: btw, every time someone says struct here, we're ping a guy named struct :P
MSmits: pinging
michaellan: isnt he taking a break from CG though?
michaellan: sorry struc-t
Scarfield: but hes not here(?)
michaellan: also MSmits do you use this:
michaellan: uint16_t random_bit(uint16_t available_moves)
michaellan: { return __builtin_ctzl(__builtin_ia32_pdep_si(1UL << randval(__builtin_popcountl(available_moves)), available_moves));
michaellan: oops i thought that would pastebin
MSmits: i use pdep yes
MSmits: http://chat.codingame.com/pastebin/17ac554f-fd37-49fa-becf-df0ddaa9e40c
StevenV: any good resource for learning those algorithms on CG bot game?
MSmits: we learned from chatting here and all over google
MSmits: google being synonymous with the interwebz
xxd: can i see your fastrand please? or is that classified
MSmits: but you can often find some tutorial somewhere
MSmits: not classified
MSmits: these are standard functions i usually have. I came up with none of them
MSmits: http://chat.codingame.com/pastebin/9c06f49c-4e37-4827-bc3f-a77dd5bf40f1
xxd: nice
MSmits: the xorshift isnt used in this c4 bot
xxd: astroconsultant showed me 3 of those
MSmits: but i usually use that for hashing
xxd: for UTTT
xxd: ah
xxd: wait why does the fastrand not do anything random anywhere :rofl:
MSmits: it's pseudorandom
xxd: i feel like im learning the dark arts
MSmits: it just makes a sequence of numbers
MSmits: that is sort of random
xxd: i see
xxd: like a merseene twister sorta thing
StevenV: any suggestion for fall-challenge-2020 ? I want to be in legend for this game
MSmits: exactly that yes
MSmits: its 2 to 5 times faster than normal c++ random
xxd: darn
MSmits: somewhere in that range
michaellan: probably even more of a speedup for me since i currently use uniform_int_distribution
michaellan: which probably has some overhead
Scarfield: but its 2-5 times less random
MSmits: never tried that
MSmits: oh yeah Scarfield it is that, but i did some tests and it had a good enough distribution
MSmits: karliso uses a way worse random in uttt thats even faster
Scarfield: xD i was just joking
xxd: Lols
xxd: how do you do faster than that
MSmits: i think karliso has a 255 sized array with numbers in there that he just reuses all the time
xxd: wait, the int Mod parameter is just the exclusive maximum bound right?
xxd: BRuh
MSmits: and if the number he finds is too high, he just caps it to the highest allowed move
Scarfield: yea
xxd: thats literally illegal
xxd: why does he not mod it intsead of something
xxd: or something*
MSmits: well in uttt you have 9 squares
MSmits: say 6 and 8 are taken
MSmits: then there are 7 moves left
xxd: oh thats true
MSmits: so if his random finds 7, it's too high
xxd: nvm
MSmits: so he'll just take the highest possible
MSmits: i was shocked to find he did that, but it works apparently since his bot is as good as the best NN';s
Scarfield: how do you actually determine if something is "random enough"?
michaellan: you click "Test in Arena"
Scarfield: xD
AllYourTrees: lmao
MSmits: well 1 thing you can do is just run it 100 million times and if you only have 9 possible moves you can see if they are equally distributed
MSmits: thats not enough of course
MSmits: I am sure there are other tests
MSmits: but i am no expert
MSmits: but if that test fails, you know your random sucks already
Scarfield: true
Scarfield: xxd are you a CS student/graduated, or just benefitting from eating avocadoes?
michaellan: i'm not sure how i'm supposed to pick from either option
michaellan: i like avocados and I'm a CS sstudent
michaellan: I don't like guacamole though
Astrobytes: Heathen1
Astrobytes: Heathen!
Scarfield: !
Astrobytes: avos were MADE for guacamole
Wontonimo: and toast with feta
Scarfield: xD
michaellan: MSmits: what is the point of xorshift?
Wontonimo: to solve the nintendo challenge
Astrobytes: https://en.wikipedia.org/wiki/Xorshift
michaellan: my bad, i thought "xorshift" was a made up term
Astrobytes: Nice and fast some of them
Scarfield: anyway, im off, enjoy your evening folks :)
Astrobytes: Later Scarfield, same to you :)
Scarfield: ty cya
MSmits: bye Scarfield
MSmits: xxd xorshift can turn your c4 boards into hash keys
MSmits: p1 ^ xorshift(p2) or use xorshift(p1) ^xorshift(p2)
MSmits: if you dont use it, you will get hash collisions
MSmits: especially since p1 and p2 are mutually exclusive, so when you xor them normally, you just get a lot of 1's where the pieces are
xxd: DAMN
xxd: i get what u mean
xxd: also by scarfield i wasnt looking at chat but hes probably gone now
xxd: bye*
MSmits: btw, I don't use hashing for C4
xxd: yeah idk why you'd ned it
xxd: oh
xxd: transpositions
MSmits: it's just those 5 lines are in each bot
MSmits: yes
MSmits: i use it for transpositions sometimes
michaellan: how does that work
michaellan: do you just link to the same node
michaellan: in the pool
MSmits: in mcts it is really really messy
MSmits: but yes, you set your childindex to the same node
MSmits: so they share children
michaellan: okok
MSmits: but i've never found it to work well in mcts
michaellan: also
MSmits: in minimax it's great
michaellan: why do you shift by 9
MSmits: thats a row
michaellan: wouldnt you shift by 8 to get the next
MSmits: 1 row up
michaellan: oh crud
michaellan: its 0-8 xD
MSmits: ye confusing sometimes
michaellan: wait so int64 is litearlly perfect
michaellan: for this
MSmits: i've had my fair share of bug do to that particular off by 1 error
michaellan: this couldnt have been a coincidence
MSmits: due to
MSmits: well
MSmits: 8x8 could have been chosen for c4
MSmits: but 8x8 is solved
MSmits: 9x7 isnt
michaellan: REALLY?
MSmits: yes
michaellan: i need to tell my brother tha
michaellan: i told him c4 was solved
MSmits: it is
MSmits: 8x8 and smaller
michaellan: huh
michaellan: oh ok
MSmits: normal c4 is 6x7
MSmits: easily solved
MSmits: btw, our version of C4 implements pie rule
Wontonimo: what that?
MSmits: player 1 starts and player 2 gets to decide to keep playing or take over p1's board
Wontonimo: oh, right
Wontonimo: i like that
martinpapa69: does that make it less-easily solvable ?
MSmits: yes
MSmits: far less
Wontonimo: i say we make that part of every board game
xxd: wait
xxd: taht seems overpowerd
MSmits: if re curse were here he'd say thats lazy game design Wontonimo
Astrobytes: :)
Wontonimo: i heard MSmits
Wontonimo: i say it's smart
xxd: wouldn't you always steal?
MSmits: no
MSmits: p1 will play a crap move if you always steal
MSmits: the corners are losing moves
xxd: oh
xxd: well this makes my implementation a bit omre complicated
MSmits: so he will play the most balanced move
MSmits: effectively auto-balancing the game
MSmits: if a balanced starting move exists
xxd: how do you add this in MCTS though
xxd: like
Wontonimo: you don't
xxd: the average?
xxd: the median child
martinpapa69: you check top players replay
Astrobytes: didn't you figure out the most balanced move MSmits?
Wontonimo: just hard code it in the first move with if statements
martinpapa69: and hardcode
MSmits: yeah it's 1 and 7 Astrobytes
xxd: xD okay bigbrain
MSmits: after 50+ million games simmed and many solved branches i am 99.7% sure that move 1 and 7 are solved as draw
Wontonimo: if you want to find the "bestish" first move, just run MCTS locally with 5 minutes of compute, copy the probabilities of the first move into an array and copy that into your game
Wontonimo: now you have a reusable concept for any game that has the pie
xxd: wait so if you "Steal", you basically switch sides on the table right
MSmits: yeah
Wontonimo: yes
xxd: why is the problem statement's explanation so bad
xxd: wait but in wood 2
xxd: should i just do best
xxd: and hopethey dont steal
MSmits: yeah
MSmits: 3 and 5 are best
MSmits: 4 is second best
xxd: oh seriously, not 4?
xxd: interesting
MSmits: nope
MSmits: probably both solved as win though
MSmits: if we were to solve them
xxd: is UTTT solved too
Wontonimo: yeah. wood 2 you can go middle, then random other than to prefer a winning move
MSmits: uttt is not solved, but i've done so much testing for that game that i am convinced that if you solved it, p1 would win
Wontonimo: without pie
MSmits: pie rule would make it a draw i think
MSmits: there are several bad starting moves that would lose the advantage for p1
MSmits: there;s 15 unique starters for uttt
michaellan: the pie rule is so interesting
MSmits: and only 1 of them has to be solved as a draw
MSmits: for pie rule to make the entire game a draw
michaellan: facts
MSmits: yeah pie rule is pretty neat
MSmits: do you know where the name comes from?
MSmits: say we have to share a pie. I get to slice it in half. You get to pick which half you get. I would be forced to slice it up exactly in the middle, or i get a smaller piece.
MSmits: they use this trick with children
MSmits: so they dont fight over dessert
michaellan: damn
michaellan: i watched a video where they explained how to do pie rule with 3 people
michaellan: it involved crumbs or something
MSmits: lol
MSmits: well thats too advanced for me
michaellan: https://www.youtube.com/watch?v=kaMKInkV7Vs
MSmits: jeez
MSmits: thats way too complicated!
michaellan: theres no cake for anyone at the end :rofl: all crumbs
YurkovAS: https://www.kaggle.com/c/lux-ai-2021/overview AI Challenge
eulerscheZahl: https://yare.io/ another one
eulerscheZahl: JS only
TobiasA: i like that second one i did the interactive tutorial
michaellan: wait
TobiasA: ooouuu the first one looks neat
michaellan: why are you guys using floats for win/visits
michaellan: larger range? more flexibility with scoring?
MSmits: so as not to have to cast when doing uct
MSmits: casting is expensive
michaellan: bruh im so dumb, how did i not think of this
michaellan: thx
MSmits: i spent months in real time on this :P
MSmits: it's not dumb at all
MSmits: we all run into the same issues
MSmits: we're just dumping all this accumulated knowledge on you all at once :P
michaellan: i think the way everyone has similar setups is almost like a GA
michaellan: everyone talks to each other = crossover
MSmits: yeah, thats true
michaellan: and we converge at the best most optimized solutions
michaellan: that is so satisfying to think about
MSmits: though, we also converge too quickly sometimes
michaellan: :thinking:
MSmits: if everyone tells you how to do something
MSmits: you dont try other stuff
MSmits: so sometimes someone stubborn comes in
MSmits: and teaches us all new things
michaellan: thats why we have mutations
MSmits: too much sharing can be harmful to creativity
michaellan: maybe one day i'll be a mutation
MSmits: right
MSmits: sure, you be a mutant, thats cool
MSmits: you already got two x's
michaellan: ha
MSmits: no u
MSmits: couldnt resist sorry
MSmits: Astrobytes
jacek: oO
tohshiiki: fihifhifowqfmifhcas
BlaiseEbuth: :popcorn:
michaellan: please stop
michaellan: ;-;
Wontonimo: keep the chat on topic and (mostly) code related or you will be banned
tohshiiki: i have no idea what this is tho
tohshiiki: i never even joined
michaellan: u can close it if you want
Wontonimo: you are on a coding site
MSmits: it's codingame world chat
Astrobytes: MSmits :D
tohshiiki: ik im on a coding website not the chat tho
Astrobytes: wanna kick?
BlaiseEbuth: ban
Wontonimo: i'm okay with one more strike
TobiasA: imagine getting lost on the internet and ending up here:joy:
MSmits: maybe he was looking for information about vaccines with fetus in them
michaellan: lmao what
TobiasA: :joy:
MSmits: hey that's a thing
MSmits: well, that people believe it, is a thing
MSmits: anti vax theories would be funny if they weren't also depressing
BlaiseEbuth: No more moderation on this chat...
MSmits: astro does fine i think blaise
Astrobytes: No it's true in some cases (I believe I explained this a while ago) in that fetal cells are used
Astrobytes: in some vaccines
MSmits: ah yes, i should specify
MSmits: they think it's aborted fetus
MSmits: from abortions
michaellan: that is weird
Astrobytes: well, cell lines derived from aborted fetus cells. Yes that's the case. From decades ago.
michaellan: ._.
MSmits: really? Thats interesting, it's not the covid vaccine though
Astrobytes: The cell lines are just cells grown from those.
Astrobytes: I think one or two companies use them.
BlaiseEbuth: That's like the babies foreskins used in moisturizer to make it more creamy.
MSmits: oh right, Johnson does apparently
Astrobytes: And I think those cell lines were grown from 2 fetuses
MSmits: it was my assumption that the idea was total nonsense
Wontonimo: I was curious about running out of nodes in my node pool. Just added output for that and I at most use 10% of my pool
michaellan: wow
michaellan: what is your size?
Astrobytes: there are a couple of others that are grown from the odd other fetus here and there but from a long time ago.
Ashishsr123: what is the code to print debug messages ?
Wontonimo: 30,000,000
xxd: just print to stderr
MSmits: wait, but there's no microchip right Astrobytes?
Astrobytes: The vaccine itself doesn't actually contain any of that though MSmits
MSmits: true
MSmits: it's used for production and testing
Astrobytes: But they are used to develop and test
Astrobytes: yes
xxd: but what about the 5G
xxd: do they put 5G in vaccines
Astrobytes: It's pretty standard practice MSmits
eulerscheZahl: no telemetry data for the producer?
eulerscheZahl: but MS does that too!
MSmits: I think G is part of rna/dna so lots of G's in mrna vaccine ?
eulerscheZahl: have you seen GATTACA?
MSmits: nope
Astrobytes: xxd: Of course! I'm streaming all my data directly to Bill Gates, Hilary Clinton and a secret cabal of baby-eating lizard-people
Wontonimo: xxd, instead of rolling out all children, I do 2 rollouts per child. It's a tradeoff that gave me 4 or so ranks
Astrobytes: GATTACA is one of my favourite movies
xxd: nice
eulerscheZahl: my favorite is probably Idiocrazy
xxd: is a 2^63 size win lookup table too big
MSmits: lol
MSmits: yeah
Astrobytes: Yeah, Idiocracy is up there for sure
xxd: so i gotta loop and stuff to find wins -_-
Astrobytes: back soon, cat just woke up
MSmits: my oware lookup locally is around 2^36
MSmits: and thats 57 GB
xxd: wtf
xxd: 2^36 bools?
MSmits: no bits
MSmits: 7 bits per state
xxd: i think my intuition is horribly off
MSmits: wait i think i am a power of 3 off
MSmits: 2 ^39
eulerscheZahl: 2^36 = 64GB
MSmits: yeah 2^36 bytes is
MSmits: i was thinking bits
MSmits: got confused
eulerscheZahl: ah
eulerscheZahl: only internet providers count in bits instead of bytes
MSmits: higher numbers = better
dmin: gotta pump those ads up
martinpapa69: brand new 2000ml coca cola!
eulerscheZahl: my physics teacher once told me that there's a difference between 2l and 2000ml
eulerscheZahl: it's the precision: 2l might as well be 1.6 or 2.4
Wontonimo: and my math teacher told me they are the same
Wontonimo: and my religion teach told me not to trust either because they can't agree
jacek: engineer would round down to 0
xxd: frick i got sniped
TobiasA: why?
xxd: MSmits: why do you set visits to 1 in SetChild
xxd: the backpropagate will set it again no?
xxd: i'm gonna set mine to zero cuz thats the way im used to it at least
MSmits: because i know i'll be rolling out from all o fthem
MSmits: that way i dont have to set the visits
MSmits: during the rollouts
MSmits: so only do this when you rollout from each child after expansion
xxd: so u just start from the parent of the node
xxd: when u backpropagate visits?
MSmits: i start at the root
MSmits: it's basically forward propagation i guess
xxd: oh i see
xxd: i just realize you dont store a "player" variable and its not necessary
MSmits: doesnt really matter if you start at the root or the leaf, as long as you get the sign correctly
xxd: like the current player
MSmits: yeah thats not necessary
xxd: made things eaiser when i was learning it at first
MSmits: selectedcount & 1 tells you the player
MSmits: even or odd
AllYourTrees: finally cleaned up my solver backprop to not have to visit all children every time
MSmits: all children?
AllYourTrees: when i backpropped before i scanned all the children of each node to check if they were all solved or not
AllYourTrees: but now im just tracking best found so far and number of solved children
MSmits: why do you need to track the number?
AllYourTrees: to know when all of them are solved?
MSmits: hmm
MSmits: so you're keeping this number on the node?/
AllYourTrees: for losses don't you need to know all children are proven losses?
AllYourTrees: http://chat.codingame.com/pastebin/da53dddb-35b0-42f9-b060-9b0266168dd0
MSmits: i never even considered that
AllYourTrees: requires you never visit a solved node though
MSmits: I just loop over all children and if i encounter a nonsolved node, i stop solving
AllYourTrees: ya thats what i did before
MSmits: is your way better?
MSmits: your new way
AllYourTrees: bumped up a couple of ranks on clobber
MSmits: thats a very bad test though
AllYourTrees: whats a good test
MSmits: leaderboard is very unreliable
MSmits: a performance measurement i guess
AllYourTrees: yeah it was a performance boost for me
MSmits: well thats all i need to know because then it can only be an improvement
AllYourTrees: well
AllYourTrees: performance is kinda inconsistent when i play in ide
MSmits: yes
AllYourTrees: haven't tested locally or anything lol
AllYourTrees: either way i feel better about doing it that way so im keeping it :P
MSmits: if you do it locally, you would need to pick a state thats solvable and solve it with both methods and time it
MSmits: it's a cool find
MSmits: never heard someone mention this
AllYourTrees: :scream:
MSmits: so 2 extra bytes?
YurkovAS: store bestSolved and numberSolved in parent node?
MSmits: yeah
AllYourTrees: ya to both
martinpapa69: i keep a bitset<children_count> unsolved_children; on nodes
MSmits: never used bitset
martinpapa69: so i can avaoid messing up my count, if i accidentally visit a solved child
martinpapa69: int8_t then
martinpapa69: whatever
YurkovAS: bitset is slow
martinpapa69: i do actually visit solved children
MSmits: I completely abandon those children
martinpapa69: thats not a good idea
martinpapa69: you can overestimate nodes
MSmits: I don't want to waste an entire selection iteration just to end on an already fully explored branch
aayux: i am new to c++ need help where should i stary
MSmits: i started c++ by starting at C# :P
MSmits: has similar syntax, but doesnt turn you off programming entirely like C++ frustration can do :)
martinpapa69: the paper actually mentions solved children nodes
AllYourTrees: i vote rust
AllYourTrees: :D
martinpapa69: https://dke.maastrichtuniversity.nl/m.winands/documents/uctloa.pdf
MSmits: yeah, i know it
martinpapa69: you should never just "abandon" the,m
MSmits: their code is bad
MSmits: i just mean i dont visit them
martinpapa69: ye i dont down ther on a solved branch
martinpapa69: i stop at the last nonsolved node
martinpapa69: and sometimes backprop solved children
MSmits: ok let me put it this way
MSmits: do you always expand something, when you go down the tree
martinpapa69: no. if my ucb selects a solved node, i backprop it
MSmits: ah see, i feel thats wasteful
MSmits: you're all the way down there, why not explore a bit further
martinpapa69: i use alpha zero tho. 80% of the cpu time is NN
MSmits: you can always decide to backprop the solved node anyways
MSmits: but still explore something else
martinpapa69: its just make my mcts more accure with a small waste
martinpapa69: accurate*
YurkovAS: i'm ignore solved in ucb selection
martinpapa69: dunno if its a good idea never tried.
MSmits: well i tried in uttt to select solved draws but wasnt better
MSmits: i also tried to some tricks to pick nonsolved nodes and reduce the bias
MSmits: but it was usually a small performance hit and no real gain
MSmits: so i just select nonsolved nodes now and accept having the bias
martinpapa69: one thing that bothers me more is node duplicates
MSmits: what do you mean
MSmits: transpositions?
martinpapa69: ye
MSmits: it's really difficult to deal with those in mcts
MSmits: never seen it work in a cg bot
martinpapa69: i wont to link them to the same node somehow
MSmits: well
MSmits: it worked for me 1 time
MSmits: in yavalath, to solve sooner, but in early game it is costly
MSmits: what i do is i share the same childindex to the node pool
Wontonimo: if it's all pointers and no pooling, then it isn't an issue. if you've got pooling and you allocate the children in a block, it is a little more tricky
MSmits: yeah you can hash the childindex
martinpapa69: pooling is necessary
MSmits: oh and put the childcount in there too
MSmits: or you will have to re-expand to find out
martinpapa69: or make children a smart pointer, with ref counter
Wontonimo: why ref counter?
martinpapa69: oh nvm im talking about children node invalidation
MSmits: martinpapa69 i use this in yavalath:
MSmits: http://chat.codingame.com/pastebin/86f85041-36ff-4490-92fc-e336d0a6a62c
MSmits: value being poorly named, it's just the childindex
MSmits: the child count isnt needed in yavalath as its just the number of empty spaces on the board
MSmits: when i expanding i first check if the state is in the unordered set
MSmits: if so i take the information from there and keep on selecting
MSmits: not expanding at all
MSmits: it might be better to create your own hashtable, unordered set is slower than most (this is an old bot)
martinpapa69: I always use std stuff, when there is one for my problem
martinpapa69: its better to have a clean code than to gain 5% performance
martinpapa69: imo
Wontonimo: if your clean code means 5 fewer bugs, absolutely
AllYourTrees: even if you pointed things properly your backprop would have to be a BFS instead of a single line
AllYourTrees: cause now there are multiple parents
AllYourTrees: ^ re transposition
AllYourTrees: but i feel like bfs would be expensive
martinpapa69: i dont have pointer to parants
Wontonimo: the transposition is really for the benefit of that one branch and balancing it with the UCB calc
martinpapa69: and i dont have a separate backprop function
martinpapa69: if "backprop" with the return value of the recursive playout function
Wontonimo: i don't think it would be bad to only backprop the path taken and skip all related parents
michaellan: oh i completely forgot about backprop wrt transposition
martinpapa69: ye i dont think so
MSmits: AllYourTrees, about BFS, this is not really doable
Wontonimo: if you wanted to use the sum of the child visits instead of the parent visits, that would "correct" your UCB calculation
MSmits: Wontonimo even that is incorrect
Wontonimo: do tell
MSmits: well, I am thinking. I considered this before and dismissed it. trying to think of why
MSmits: if you keep a visitcount on every node
MSmits: but the real visitcount is the sum of child visits
MSmits: which is it then?
MSmits: the children also have children
MSmits: do i use their visit count, or the sum of the granchildren
michaellan: :mindblown:
MSmits: a child may have a grandchild that has been updated, but it's not reflected in the visitcount of the child
michaellan: what about some sort of lazy propagation
Wontonimo: -inception- ! i accept that it isn't "pure", but I attest that it is practical and
michaellan: where you have a flag that tells is it up-to-date
Wontonimo: keeps true to the spirit of UCB
MSmits: yeah, it's probably a first order correction that works Wontonimo
MSmits: but i generally just ignore the issue
MSmits: and accept the massive bias :P
MSmits: btw
MSmits: oware has loops
MSmits: think of the vicious circle of visit corrections you could get :)
martinpapa69: ye you need to hash turn too
MSmits: yep
MSmits: btw, my local meta mcts for oware hasnt found a single loop yet, with selection branches going 40 deep
MSmits: 14 million selections so far
MSmits: i have it set that when it encounters the same state twice during selection, it backprops 0
MSmits: because in that case, both players agreed on a draw, sort of
MSmits: a seed-draw that is. No more seeds captured after this point
MSmits: (there may have been captures before)
MSmits: but i cant debug it, because it doesnt happen =/
martinpapa69: in meta mcts yo ujust precalculate the ucb tree locally and hardcode it ?
MSmits: hmm not entirely
MSmits: my nodes are all in a dictionary
MSmits: a massive one thats persistent (memory mapped)
MSmits: the state hashes to the right node
MSmits: so when i select, i generate all children and find them in the dictionary
MSmits: then select one and do it again
martinpapa69: ahh okay
MSmits: transpositions are automatically handled this way
MSmits: but yeah i suffer from the backprop and selection bias
martinpapa69: that would definitely improve my nn bot
MSmits: how do you mean
martinpapa69: some precalculation of the nodes locally
AllYourTrees: i wonder if you could pay for expensive transposition tables/bfs backprop while training the NN, and then on CG just do normal uct
MSmits: do you mean an opening book?
martinpapa69: ye something like that
MSmits: thats what i am using it for
MSmits: and maybe for training later
MSmits: not sure yet
MSmits: the 48-37 seed region will never be exact. The mcts value is an estimate
AllYourTrees: martin what game are you working on
martinpapa69: oware
martinpapa69: but im basically working on my alpha zero framework not the game itself
AllYourTrees: :thumbs_up:
martinpapa69: MSmits btw. what if your book says that one note is a +4 for player 0
martinpapa69: but player 1 have 23 score
martinpapa69: and the node results in a series with 1 seed for player 1
martinpapa69: then 5 seed for player 0
martinpapa69: so i say its not enough to know the endresult of a node, you need to know every seedgain
MSmits: back, let me think martinpapa69
MSmits: I think it's a misconception that the game ending at 24 (or 25) seeds makes a difference
MSmits: the only reason the game ends is that the other player cant win anymore
MSmits: so you migth as well keep playing
MSmits: it doesnt matter
MSmits: so if it doesn't matter, why should I bother taking the issue into account?
MSmits: maybe i misunderstood your question/comment though
martinpapa69: (i thought game ends at 24 seed)
MSmits: well if you have 24, you can still draw
MSmits: or win
martinpapa69: so if player 0 have 23 seeds
MSmits: there are 48 seeds
martinpapa69: and seeds a +2 node
martinpapa69: sees*
MSmits: then he won
martinpapa69: ye, true. player1 cant get any seeds in that case
MSmits: but the move that has the biggest net seed gain at the end of the game is always the best move in my way of looking at it
MSmits: no matter what the current score is
MSmits: ofc when you have 23 points, you can take a quick 2 points and win the game
MSmits: or play longer and win the game by a larger margin
MSmits: but you're not going to lose by picking the move with a greater net gain
MSmits: thats impossible
martinpapa69: ye, you are right
MSmits: so this way i can ignore score and have a simpler gamestate for the NN. Might not help at all, but i like not having score as input
martinpapa69: maybe i can integrate this thing into my AZ. hmhm
MSmits: I have no idea if that's easy to do
martinpapa69: can i actually just drop the score input ??
MSmits: I am training my nn to output something thats easily converted to a net score, so i can add it to the current score
MSmits: well i am not there yet, but this is the plan
MSmits: so my values are not estimates of win chance
MSmits: but estimates of net score gain
MSmits: no idea how this goes together with a policy and such
martinpapa69: ye
MSmits: I am a big fan of using as much domain knowledge as possible and focusing the NN to just the thing that is hard to figure out for humans
MSmits: taking the score out fits with that idea
MSmits: azero is supposed to be generating its own domain knowledge
MSmits: so maybe not do that :)
martinpapa69: I always belived in giving NN the as raw input as it makes sense
martinpapa69: and let it do the job
MSmits: there is something to that
MSmits: but remember the xor example
MSmits: what if you can replace the entire NN with a single ^operation
MSmits: no need to do things needlessly
MSmits: there is irony in that last line btw
martinpapa69: ye sometimes it makes sense to transform the data
GeorgeDzigo: cout << "Hello how are y'all doing" << endl;
MSmits: hi GeorgeDzigo
GeorgeDzigo: sup
GeorgeDzigo: how are you?
jacek: how may we help you, Sir/Madam
MSmits: i'm fine GeorgeDzigo. Just chillin'
AllYourTrees: i like making input as small as possible for NN. they can fit anything so may as well save computation
MSmits: recur se said he makes small networks
MSmits: but that migth not refer to input
MSmits: maybe just few layers/nodes
michaellan: since I'm using a global selected/path array, should I have my rollout return from the perspective of the root player?
michaellan: i'm currently returning from the perspective of the node's player
michaellan: i thikn the answer is yes but i am not 100% sure
AllYourTrees: i think either way works, just changes where you place your negative signs
michaellan: thank
michaellan: what do you use?
jacek: depends on selection
AllYourTrees: perspective of current node
MSmits: xxd yeah, unfortunately i do this in all possible ways across my different bots
MSmits: when i do a random sim, some of my bots return 1 if the current player wins and some return 1 if the root player wins
michaellan: so many possibilities for off-by-one-player erros
jacek: if white wins in rollouts, add score to white's nodes and minus score to black's nodes
AllYourTrees: jace what do you mean?
michaellan: lol
AllYourTrees: ahhh
michaellan: yeah but i iterate from root downwards now
michaellan: so i thought that might be eaiser
MSmits: i do something silly
MSmits: i let the input format decide for me
MSmits: some games give you a player id
jacek: AllYourTrees well you can have score in node from its perspective or global perspective. you just need to adjust the selectio then
AllYourTrees: ahhhh i see
MSmits: and in some games you're always player 1 from your own perspective
michaellan: ok never shoulda asked now im 10x confused
AllYourTrees: lol
MSmits: you're supposed to be, this is literally the hardest part of mcts
MSmits: the sign errors
michaellan: i do think root is just easier in general though
MSmits: figuring out if something needs a - or not
AllYourTrees: i find node value relative to node's player the easiest to remember
MSmits: yeah but does the root value need a - or not? when flipping signs in backprop, do you do it at the beginning of the loop, or at the end?
AllYourTrees: then in selection, use -child value, and for rollout make score relative to current node
MSmits: so many places to flip signs
michaellan: ; - ;
jacek: i dont have 'root' node, just list of children at the top hmm
michaellan: MSmits: do you think of the "player" at each node as the player who just moved, or the player who is about to move?
MSmits: who is about to move
michaellan: goddamnit
MSmits: so my root node belongs to the opponent
MSmits: and the first child is my move
michaellan: the other ppl i asked do it the other way
MSmits: this is not the only way to do it
AllYourTrees: isn't that the other way?
martinpapa69: the "official" way is to backprop fro mthe prespective of the leaf node.In official i mean, it is used in papers and popular implementations on github
MSmits: there are many ways to do this
MSmits: just be consistent with yourselrf
AllYourTrees: ^
michaellan: yeah but i was just wondering if one way is easier
AllYourTrees: do whatever makes sense and what works lol
michaellan: none if it makes sense
michaellan: of
michaellan: i'm just trusting my gut now
MSmits: it makes sense once you found one way and used it a lot
MSmits: i wasted a lot of time, rewriting bots and doing it a little differently each time
MSmits: confusing myself
martinpapa69: i like it when i calculate the ucb scores i dont have to *-1
MSmits: darkhorse made a template for mcts he uses across all his games
michaellan: smart
michaellan: i wanted to do that but i got lazy and started coupling game logic and MCTS logic
MSmits: martinpapa69 yeah i dont do *-1
MSmits: and if i had to, i'd just take the minimum instead of the maximum
michaellan: why do you need *-1?
martinpapa69: because you messed up the signs
MSmits: if you backpropagated everything wrong :P
michaellan: breh
AllYourTrees: if node's score is for itself, then best child is -1 * child value
AllYourTrees: if node's score is for parent, then best child is child value
martinpapa69: the node's score is from the parents perspective
MSmits: xxd nothing we say about this is gonna make it more clear. You need to draw pictures on paper and such :)
MSmits: also, I am ashamed to admit i sometimes just coded a thing, flipped a couple of signs in various ways until it got into the top 10 :P
michaellan: ah i see what you guys mean now, but i will have to think about it more to actually udnerstand it
michaellan: urgh
martinpapa69: but ye i spent hours, if not days to just change signs everywhere and to hope it works
MSmits: haha thats what i just said
AllYourTrees: its a rite of passage
MSmits: it helps to minimize the number of signs required
MSmits: if you see somewhere you're doubling up on signs, eliminate both of them
michaellan: :bigbrain:
jacek: MSmits this is what i do with inputs. sometimes board is flipped and/or mirrored vs my representation, so i brute force changes until it works
MSmits: ohh yeah boardflipping makes everything worse :)
AllYourTrees: oh ya true lol
MSmits: also using solver does too
MSmits: more signs
AllYourTrees: :scream:
Astrobytes: it really is a minefield of sign errors, or a signfield of mine errors...
MSmits: my professors at the uni told me the biggest difference between math and physics is that the signs are really important in physics wheras in math they are... meh
MSmits: is true for coding as well :)
RightHandElf: why is my chat scrolling itself
MSmits: no idea, it happens to me as well
Astrobytes: it's extremely annoying
MSmits: well the auto scrolling is not as bad as the fact that it locks everything up
MSmits: you cant do anything
MSmits: until its done
Astrobytes: Yeah, that too
martinpapa69: it only happens to me when i have multiple cg tabs open
Astrobytes: There are not many days when that is not the case for me lol
RightHandElf: I only had the one open but I did leave it up overnight and I might've had another open when I opened this one
Astrobytes: if you leave the chat minimised I think it's OK, even with multiple tabs
Astrobytes: iirc
martinpapa69: there were crazy memory leaks on abandoned cg tabs back then
martinpapa69: like one cg tab consumed 10's of gigabytes
Astrobytes: Certain games if I remember rightly
AllYourTrees: so any tricks to speed up NN computations? i tried simd but it was slower :scream:
jacek: get faster cpu
AllYourTrees: on CG i mean
AllYourTrees: has anyone tried batching multiple node evaluations?
jacek: sponsor faster servers for CG
AllYourTrees: LOL
jacek: have you tried nncache
AllYourTrees: whats that
AllYourTrees: just a cache for computations?
RoboStac: have you tried a less rusty language? :)
AllYourTrees: :scream:
AllYourTrees: how dare you
jacek: like transposition table, but you put state - nn eval
jacek: depends on how transposity is the game it may speed up considerably
AllYourTrees: this is C4
AllYourTrees: so probably a lot?
jacek: so, quite
AllYourTrees: kk wish me luck
jacek: are you doing policy as well
RoboStac: yeah, nncache is very good on c4
AllYourTrees: ya policy & value
jacek: everyone doing policy but me :(
AllYourTrees: :shrug: we are just about even now that royale blew up the ranks
michaellan: whats policy
AllYourTrees: a distribution over children nodes
AllYourTrees: theoretically allows mcts to focus in certain parts of the tree
michaellan: interesting
michaellan: Do i need to worry about this? warning: comparing floating-point with '==' or '!=' is unsafe [-Wfloat-equal]
michaellan: if (n->visits == 0)
brooklyn76: Hi umm what do we do on here im new and just joined??
RoboStac: probably not for a visit count, you aren't doing anything that could cause decimal places (it's only an issue if you are hitting accuracy limits which you won't do with full numbers until about 16 million)
michaellan: I see
michaellan: thanks robo
michaellan: i guess i can make it < 1
MSmits: policy predates nn's i think
MSmits: there are mcts enhancements that use something like a policy
MSmits: explore high valued children sooner
MSmits: (this assumes you have mcts with eval)
MACKEYTH: I read a paper recently that suggested eval functions are best employed to terminate rollouts early, with each rollout still judged as a win or loss
Astrobytes: EPT, yes. Early playout termination
MACKEYTH: Once you start giving children values other than win/loss, doesn't that throw off the exploration constant in the UCT function?
RoboStac: only if the values are outside the range
RoboStac: it's normal for a node value in uct to be between -1/1 as it's averaged over all visits
reCurse: You just need to scale the constant accordingly
reCurse: There's nothing special about the range
Astrobytes: You can either adjust your exploration constant or scale your eval score
MSmits: it's funny to assign 117 as a loss, 118 as a draw and 119 as a win value
MSmits: you can use the same exploration param for that
MSmits: and your bot plays the same way
MSmits: because an additive constant changes nothing, the addition being 118 here
reCurse: Well
reCurse: Guess I'm going to be that guy
reCurse: You lose a lot more precision at 117
MSmits: hmm sure i guess so, mathematically it's the same, but yeah 32 bit floats and all that
michaellan: MSmits:
michaellan: the FastRand function is defined on ints
MSmits: oh yeah, it's only for integers
michaellan: but in even the first iteration
michaellan: mcts_c4.cpp:20:50: runtime error: signed integer overflow: 777778 * 214013 cannot be represented in type 'int'
michaellan: is it *meant* to overflow?
michaellan: I have a flag that crashes my program on these erros
MSmits: probably yeah
michaellan: ok
MSmits: I did not design it
michaellan: aight aight
MSmits: i just use it
MSmits: funny that it tells you this
RoboStac: it probably shouldn't be signed though
MSmits: i must be having my VS setup poorly, i never saw any errors
RoboStac: whats the function?
MSmits: inline int FastRand(int mod) { g_seed = (214013 * g_seed + 2531011); return (((g_seed >> 16) & 0x7FFF) * mod) >> 15; }
michaellan: unsigned integer is UB
michaellan: unsigned integer overflwo*
RoboStac: no, unsigned is ok, signed is bad
MSmits: you mean the seed?
michaellan: oh, i swore i saw the opposite somewhere
michaellan: yeah you're right
michaellan: inside the function, where there's 214013 * g_seed
MSmits: yeah?
michaellan: that sub-expression is larger than signed integer max size
MSmits: ok
RoboStac: probably all 3 (seed, mod, return value) should be unsigned
MSmits: ah, i just took it off stack overflow at some point I think
MSmits: it works, but maybe it could work better
MSmits: are you sure the overflow is not a feature?
michaellan: i thikn its meant to be
michaellan: but i'm too dumb
michaellan: so i'm gonna not use it for now
MSmits: ah, i sometimes use stuff i dont know how it works
MSmits: like fast sqrt and such
MSmits: i do check it to see if it does what it's supposed to
michaellan: omg
michaellan: wait MSmits
michaellan: you said 3 and 5 are best, and 1 and 7 are most equal?
michaellan: and 4 is second best
MSmits: yes
michaellan: i think im getting there!
michaellan: close to coding up the basic part of it
MSmits: most good mcts bots will find 3 or 5 as best move on turn 1
MSmits: you dont need a local meta mcts with millions of games simmed, to find this
michaellan: whats the best second move/reply to 3/5
MSmits: in terms of winrate on meta mcts, i it's more or less 40% - 50% - 60% - 70% -60% for the first 5 moves from left to right
MSmits: the other 4 are symmetric
michaellan: mhm
MSmits: reply hmm
MSmits: the best reply is to steal it :P
MSmits: i cant get to my meta mcts program atm. It's big and i transfered it to my slow HD
MSmits: running oware now
MSmits: but whatever the reply is, it's a losing move
michaellan: okay
MSmits: i can tell you all the best moves for oware any time you want though :0
michaellan: ._.
andyescobar: anyone knows why I keep getting an unalitialized numb6 variable
andyescobar: http://chat.codingame.com/pastebin/cf8868bb-76f5-4e33-aa29-125845728577
MSmits: int numb6,
MSmits: it has no value
MSmits: int numb6 = 0 works
MSmits: you are assuming they are both set to 0 on that line of code
MSmits: but they aren't
andyescobar: MSmith I added a value to numb6 along with numb8
MSmits: nope
MSmits: it's uninitialized
MSmits: you just set numb8 to 0
Astrobytes: donno if that works in java
andyescobar: int num6, numb8 = 0;
Astrobytes: What MSmits said
MSmits: the error tells me it doesn;t work
MSmits: so i dont need to know about java
MSmits: not much else can be wrong
MSmits: it can only be uninitialized if it was never initialized
Astrobytes: No shit!
andyescobar: I am transitioning from C++ to java
MSmits: :poop:
andyescobar: and its killing me not really but some syntax is a bit different
MSmits: cool, yeah c++ lets you do lots of stuff that's a bad idea :0
Astrobytes: It's a completely different 'experience'
andyescobar: Yeah thanks a lot btw
michaellan: why dont they put PIE rule in UTTT
michaellan: oops idk why i capitalized pie
MSmits: they just didn't when it was created
MSmits: pie rule was first used in Yacalath
michaellan: they can add a patch
MSmits: c->v
michaellan: or not
MSmits: it would be too damaging to the bots already submitted
Astrobytes: I kinda like Yacalath. When struct comes back you can suggest that to him.
MSmits: lol
MSmits: pie rule would definitely fix the imbalance in uttt, but would add some more complexity. If you just view uttt as a new player mcts practice tool, then it's not worth it
MSmits: near the top the imbalance really hurts the game
michaellan: true
michaellan: when i run out of space do i just ditch everything and restart?
MSmits: when two bots are clearly not near in strength, the imbalance doesnt matter
MSmits: node pool?
michaellan: yeah
michaellan: i dont think it'll matter in the real thing
MSmits: i have a buffer. If I get near 90% of the node pool being used, I drop the tree. This is very easy as you just set the first node as the root and treat the root as not expanded
michaellan: nice
MSmits: whatever old data is still in the tree is just as ignored as if it were uninitialize
MSmits: d
MSmits: there is a riskier thing you can do
MSmits: you can also keep the whole tree but just set the index back to 0
MSmits: and hope none of the overwritten nodes are still being used
MSmits: in uttt this is safe to do
Astrobytes: it can go very badly wrong though
MSmits: yeah, the more performant your bot, the more likely it does
MSmits: there are many games where i dont even use 10M nodes, let alone 25
MSmits: but some are really cheap to sim
michaellan: the method described in the github markdown page earlier to determine winner doesnt seem to work
michaellan: it made sense in my head
MSmits: sorry i dont use that method
michaellan: i used a method that trys to check for ALL verticalss at once
michaellan: and ALL horizontals
michaellan: but like it can wrap around incorrectly
michaellan: i think
MSmits: yeah those are complicated things
MSmits: the main thing is to keep everything as simple as possible. Dont worry about optimizing
michaellan: do you loop?
MSmits: do that later
MSmits: i dont wincheck
xxd: wtf
MSmits: i calculate all winning moves for the opponent
MSmits: then make sure i dont play under them
MSmits: if no such moves exist
MSmits: i lose
Astrobytes: Wrap around as in bitboards? Just mask the areas you don't wanna go out of bounds from
MSmits: i never win
MSmits: (in the sim)
xxd: http://chat.codingame.com/pastebin/454da757-c377-4731-bb8a-3d02dfa9a2ab
xxd: this is probably very very buggy
xxd: because of the wrapping around
xxd: oh wait theres a typo in there
xxd: too
MSmits: yeah wrapping is annoying
michaellan: i underestimated C4
MSmits: c4 is harder than uttt sim-wise
Wontonimo: really?
MSmits: but not terribly hard compared to some games
Wontonimo: i found c4 way easier
MSmits: well maybe it's harder because of simd being usable
Wontonimo: but then again, i had a lot of practice before c4 and little practice before uttt
Wontonimo: okay, you are 2nd and i'm 19th
Wontonimo: so, yeah, it's easier if I don't rank as high lol
Wontonimo: true skill difference is 46.24 (u) vs 32.62 (me)
michaellan: I havent been able to complete anything for a couple days now, im sad
Wontonimo: where as for uttt 29.89 (u) vs 24.54 (me) I still sometimes win against you when I play first
reCurse: Relying on CG scoring is a fatal mistake
reCurse: Unfortunately they killed benching so competitiveness on CG may now also be a fatal mistake ;)
Astrobytes: reCurse: come now, it's all about 'fun' and happyhappy joyjoy, not competitiveness :P
**Wontonimo wonto checks pulse
reCurse: Killing benching was the last straw for me
reCurse: I don't care anymore :P
reCurse: Just mentioning
reCurse: Delta score is bad
Astrobytes: Absolutely mind-bendingly peculiar decision
Astrobytes: (CG I mean)
michaellan: is benching sitting out or something?
Astrobytes: CGBench, you could benchmark against other bots in the leaderboard by connecting via the 'CG API' and running IDE matches to gather stats
xxd: oh bench as in benchmarking
xxd: i mean i can see why they removed that
xxd: when did they remove it?
Astrobytes: Have you tried tweaking parameters in the IDE and doing a few plays? (not even submits)
xxd: yeah it takes long time
Astrobytes: You reach the play limit *very* quickly.
xxd: oh theres a limit
Astrobytes: The only solution is offline self-play, or replay downloads (which is also, I presume, heavily affected by this)
CaptainDrewBoy: Hi everyone! New to CodinGame
Astrobytes: But yeah, I'm chill on the situation. It's sad but life goes on.
Wontonimo: hey CaptainDrewBoy ! Nice pic
Astrobytes: Hippie too, I dig.
Astrobytes: Anyway, night all
Astrobytes: afternoon, whatever
michaellan: gn
peppers: hi everyone
MSmits: Wontonimo it surprises me not at all you sometimes beat me as p1, even with 5 rating difference
MSmits: c4 is different because it's balanced
MSmits: sorry for late reply, gonna get some sleep now :)
Wontonimo: gn
Wontonimo: hi peppers
peppers: :smiley:+
ja_fica: C4 is one of the best games to try simulation AI's
ja_fica: For me is the best option to learn from bitboard to minmax to montecarlo tree search
ja_fica: also AVX instructions work well in gere
ja_fica: *here
xxd: i think the is_win function is harder for C4 than for UTTT
xxd: granted, someone generously spoonfed me the "fast" way to check is_win for UTTT
michaellan: ja_fica: where do you use AVX? for checking win?
michaellan: I'm trying to use the num_selected value (how many nodes in the current path) to determine who the current player is but its definitely not working...
michaellan: need to think this thorugh
xxd: i hate how i went from "decent-ish" code to global-variables-everywhere
xxd: so hard to reason with
ProCoder03: in UTTT bronze if the board to play as per last move is already captured, when can we play in random boards ???
Wontonimo: yeah, that's when
ProCoder03: interesting, i just need to fix it !!!
grindy: Im back
grindy: :grinning:
michaellan: i feel like if you didnt account for that in the beginning, there may be a chance you will have to make some annoying changes to your code
michaellan: like bitset/int sizing etc
kresteodymium: asdasad is cool
ProCoder03: @xxd is it for me ???
kresteodymium: everyone go follow him, he's really good :D
asdasasd: kresteodymium won IOI
michaellan: lmao are yall 9yo
peppers: 안녕
asdasasd: hello krish wants ioi medal
kresteodymium: thats what jinha wants
xxd: shut up cringe USACO people
xxd: heavy light decomp
xxd: blah blah blah some more algos no one cares about
xxd: using ll = long long;
kresteodymium: macros are good doe
xxd: u guys on the usaco discord?
asdasasd: functional graphs UwU
xxd: CHT or convex hull
xxd: CHT is cute
xxd: i wrote a li chao tree once for a CF problem, still timed out, and i didnt bother again
xxd: i also stole the li chao tree part from eric zhang's library repo
xxd: so i guess im just dogwater
kresteodymium: so youre USACO too i suppose
asdasasd: have you tried network flow probs
xxd: nah
kresteodymium: imagine being camper
xxd: i dont really do usaco much anymore
xxd: never that good
kresteodymium: asdasasd is camper
xxd: proof?
xxd: aight cap
xxd: what are you guys working on, if anything
asdasasd: lagrangian relaxation cute
kresteodymium: i tried eulerian tour stuff on a dmoj problem
kresteodymium: but it died to mle
asdasasd: when ur main programming language is javascript
kresteodymium: imagine being python and going to usaco camp
xxd: sorry cant hear you over the sound of my bugs