Chat:World/2021-06-16
Codify: Hey Westicles! I resemb..er...I resent that remark!
micheealjackson: hey, i want to remind you your yogurt isn't tasty at all
derjack: :upside_down:
sprkrd: guys guys guys
sprkrd: I know this isn't practical for codingame
sprkrd: but wouldn't it be fantastic? https://www.kfchess.com/
sprkrd: :joy: :joy:
ableflyer: that's a pretty interesting idea
ableflyer: ngl
derjack: nice
sprkrd: now that i think about it, it could be practical :thinking:
sprkrd: maybe at some point i'll dust my java compiler and create a multi during the summer, could be fun
derjack: dont dust your compilers
sprkrd: why not?
Haramaru: hello
5alid.js: Hi
5alid.js: is there anyone who knows javascript and wants to play coding escape with me?
5alid.js: https://escape.codingame.com/game-session/LMT-F1j-zAs-Lnp
5alid.js: https://escape.codingame.com/game-session/LMT-F1j-zAs-Lnp/in-game
5alid.js: this one: https://escape.codingame.com/game-session/GyB-ulW-5ta-cYn
DarkLord__28: :smirk:
AntiSquid: that's quite a bit of spam mate, you probably have more luck going to discord in the escape room channel and ask there 5alid.js
AntiSquid: but then again you'll have an easier time with friends
PanGami: :smiley:
Hackercodehp: hi
Hackercodehp: Guys
FallenWings: @5alid.js are you planning to start this session?
5alid.js: which one?
Hunter64TheOne: #fr
Hunter64TheOne: #jn
Hunter64TheOne: #jp
kyoya34: hello guys
theonlyjt: #Clash
Wontonimo: hey sprkrd, i don't know how your could implement chess without turns in CG, but you could play around with something like energy point budget per turn and a limited ability to accumulate unused energy
derjack: there are simultanous games on CG no?
Wontonimo: yes there are simultaneous games. is that all kfchess is? I thought it was more than simultaneous, it was free-for-all
derjack: i think this could be made as simul game with multiple possible moves per output
derjack: and cooldown lasting for few frames
Wontonimo: that sounds good
Wontonimo: i have no idea what algo would work well with that. the branching factor would be super high
Wontonimo: all pieces not needing cooldown could move at once
eulerscheZahl: let's call them pseudo-simultaneous. The bots are still executed in sequence, even if their actions are applied on the same turn
MiyamuraIzumi: don't understand what game are you talking about?
MiyamuraIzumi: a new idea?
Wontonimo: it's not a game yet. just an idea
derjack: :panda: :cheese:
MiyamuraIzumi: oh
MiyamuraIzumi: I see
derjack: https://www.kfchess.com/
derjack: how this could work on cg
Wontonimo: sprkrd mentioned he's interested in implmenting https://www.kfchess.com/
eulerscheZahl: Kentucky Fried Chess?
Wontonimo: yeah, pretty much
MiyamuraIzumi: this is greate
Wontonimo: the pseudo-simultaneous is a good hack ontop of the turn-based CG platform to make games seem simultaneous
AntiSquid: the king can completely ignore the check status and step right into it ?
derjack: probably
AntiSquid: playing the campaign
AntiSquid: https://www.kfchess.com/game/QYKD0T?key=c32ab046-f203-4cbf-bc8c-8e11adf60170 heh
Chonapatc: ้ร
Chonapatc: hi
Wrinklycow: Can someone help me with my code on the "Coders Strike Back" game?
Uljahn: does it bite you?
Wontonimo: yeah, sure Wrinklycow, I'll DM you
ahmd66699: hellol
AntiSquid: was that talking with an accent or spam?
AntiSquid: typing with an accent *
CircuitKid: Hello
CircuitKid: anybos
CircuitKid: d
CircuitKid: I mean anybody wanna be friends
TobiasA: :raised_hand:
sprkrd: yo
sprkrd: actually I thought about something simpler
sprkrd: (regarding kung fu chess)
sprkrd: A simultaneous game in which you can move any piece that is not in cooldown every turn. Obviously, you can spend some turns without doing anything
sprkrd: A piece takes as many turns to move to its destination square as the distance from source to destination
sprkrd: and once it reaches its destination, the cooldown begins
sprkrd: logically some rules have to be defined regarding what happens if two pieces land on the same square on the same turn
sprkrd: and yeah, there are no checks, the game ends when the king is captured
sprkrd: and I guess it would be a draw if both kings are captured at the same time
Wontonimo: no draws plz. Make something else decide, like piece count, or piece worth count
Wontonimo: so, first to kill king, or if that happens at the same time then piece count
sprkrd: To avoid draws, I'm thinking it could be a battle to the end
sprkrd: Because if it's just piece count, it can end in a draw too
sprkrd: So it can be until the opponent has no pieces at all
Wontonimo: also keep track of total time used by each player, the one who uses the least ms wins
sprkrd: That's the only way I can think of avoiding draws entirely
sprkrd: That hasn't been done before, and I think it'd be dangerous
Wontonimo: danger ! danger !
sprkrd: Normally people use their entire time budget to calculate
sprkrd: factoring that into the winning condition can be troublesome
sprkrd: Anyway, if I happen to work on that, it'll probably be later in the summer. Currently I have a deadline and I won't be able to spend much time with personal projects :(
struct: beware that cg sdk doesnt support mirrored games
struct: so you either make them play 2 games
struct: in the same replay
sprkrd: what do you mean exactly when you say it doesn't support mirrored games? :thinking:
struct: on cg games you get 2 matches
struct: against the same player
struct: one has player 1 and one has player 2
struct: with sdk this isnt possible
struct: but you can do what re curse did for chess
sprkrd: ah, i understand
sprkrd: but in the case of chess it makes sense because it is not symmetrical. My intention was to work out a way of making the two players exactly equal, with no advantage whatsoever
struct: ah
sprkrd: Does it still make sense to do two matches?
struct: then it should not be needed
elisaado: doe nog een ballontje of twee
elisaado: bokke 8
AntiSquid: your explanation still sounds like kung fu chess sprkrd
jacek: tracking time is unreliable
sprkrd: yeah...? that's what i'm seeking to implement?
jacek: im not sdk expert. you want to track total time used by player?
sprkrd: time is quantize into CG turns, there's no way around that, and in each turn a sliding piece moves one square closer to its destination. Of course, the bot cannot move a piece while its en route
sprkrd: no no, sorry jacek, I was replying to AntiSquid
jacek: ah
sprkrd: I don't want to track total time
sprkrd: I think that'd be troublesome
jacek: eeyup
jacek: whats with that aversion to draws
sprkrd: In each turn each player can move any piece that is not already in movement or in cooldown
sprkrd: So there would be many turns in which the players wouldn't be doing anything at all, until the pieces complete their movement/cooldown
sprkrd: I think this is one of the few sane ways of implementing this
jacek: implementing chess isnt sane
struct: yeap you cant really track time
Marchete: https://distill.pub/2017/momentum/
Marchete: wow, an interactive way to understand some hyperparameter
Marchete: it's kind of cool
BlaiseEbuth: distill... pub... :beer:
BlaiseEbuth: Very disapointing link... :(
Marchete: why?
BlaiseEbuth: No beer
jacek: because its distilled
BlaiseEbuth: Right... But there's no whisky either...
nulte: my bot must be drunk
Marchete: it's still 2nd, doesn't seem drunk...
jacek: youre 2nd, go home
nulte: no i can improve it
nulte: https://i.imgur.com/PQKgTGU.png
nulte: as you can see its bugged
nulte: i found the win on turn 35
nulte: something must be messing it up
jacek: w00t
nulte: 36*
Marchete: well, there are plenty of bots with bugs around there
Marchete: :sweat_smile:
Marchete: my oware never gives the last move
Marchete: I have an ugly hack
nulte: yeah ill just hack it too
nulte: if has winning move play it
nulte: :p
nulte: I think its because I didnt add the move to the tree
nulte: yeah that must be it
Marchete: probably I have that kind of bug, an isEndGame before expanding or smth
dbdr: wow, connect4 grew quickly
Wontonimo: Hey nulte. I see you are new here, have you tried CSB?
Wontonimo: lol
nulte: yes, we even have a random on rank 2
Wontonimo: yeah, i know who you _actually_ are
dbdr: 200 players in wood 1. need more leagues
nulte: Maybe my first bot version can be the boss
nulte: oh wait
kovi: dice dual is not a duel any more...gg dbdr
dbdr: it's a trial? ;)
nulte: is Dice duel also bit board friendly?
kovi: not really
nulte: oh :(
AntiSquid: try to think of how you'd implement bitboard for it
Runner87: I accidentally opened it today
nulte: I dont know, im not that good with bitboards
AntiSquid: you can do bitboard for dice duel, but ... at what cost?
Runner87: coincidence?
jacek: and it didnt crash your gpu?
Runner87: move STEAL is a rule of the official game?
dbdr: no
AntiSquid: it's to balance player 1 advantage supposedly
jacek: 9x7 size isnt official neither
jacek: but memes are official :smirk:
Runner87: :grimacing:
dbdr: kovi back to invicible? :)
kovi: found a bug..,but now timeouts...
Marchete: what game?
kovi: dice duel
jacek: should get into it one day
nulte: oh grats on rank 1 btw dbdr, only saw now
YurkovAS: :tada:
YurkovAS: smart rollouts not working for me in c4
YurkovAS: or it stupid rollouts :smile:
nulte: nooo you pushed me down :(
YurkovAS: oh, i'm resubmit 1h later
jacek: :scream:
Marchete: :cold_sweat:
uiyhacan: guys
uiyhacan: can we filter the clash code
uiyhacan: like
uiyhacan: I just want to compete with those who are using C
uiyhacan: can I adjust it
jacek: only private clashes
AllYourTrees: what NN structures are people using for C4?
MSmits: not sure what jacek and robo are doing
AllYourTrees: bigger networks i get way less nodes searched but they can fit value function better
nulte: MSmits is your bot stronger than darkhorse without the book?
MSmits: thats always the case
MSmits: it is similar nulte, but very hard to test as even without a book, these bots get pretty deterministic
MSmits: so you will see a lot of the same games
nulte: I see
MSmits: but my bot is definitely not better than his
AllYourTrees: what is your bot in C4 doing MSmits?
MSmits: it's just that I added 10k hardcoded moves, calculated locally
AllYourTrees: ahhh
MSmits: mcts with smart rollout AllYourTrees
MSmits: and simd
AllYourTrees: oooh gotcha
AllYourTrees: how many rollouts do you get first turn?
MSmits: depends on your definition of a rollout
AllYourTrees: nodes searched?
MSmits: we do multiple random playouts for each selection + expansion
MSmits: each time we expand, all children get their own rollout
MSmits: it's 30k of these iterations on turn 2
AllYourTrees: gotcha
MSmits: which is probably around 200k playouts
MSmits: turn 2 that is
AllYourTrees: is that so all the children are next to each other in your node list?
AllYourTrees: memory wise
Marchete: *and 40billion opening moves
MSmits: well not necessarily, i could do 1 playout and still have them next to eachother
MSmits: (just 10k )
nulte: So many games vs you...
PatrickMcGinnisII: 10k is only like depth3 with some winners noted on depth 4 me thinks
MSmits: AllYourTrees when selection and expansion become somewhat bottleneckish, it can simply help to do more than 1 random playouts
MSmits: PatrickMcGinnisII not exactly
MSmits: if you play poorly vs me, it's around depth 3 or 4 yes
nulte: I think this bot is a bit better
nulte: but hard to say
MSmits: but the better you play, the deeper the bot goes
nulte: I only added reuse
MSmits: book that is
MSmits: it prefers good branches
MSmits: can sometimes go to ply 20
PatrickMcGinnisII: how did you fit 72 bits in 64 bits tho?
MSmits: what do you mean 72 bits?
MSmits: 9x7 = 63
jacek: my NN for C4 is just pieces MLP
Marchete: pieces?
jacek: inputs
PatrickMcGinnisII: well the quick bitwise math online shows an extra line of 0 bits for it to work correctly
MSmits: just the disks
jacek: eeyup
MSmits: PatrickMcGinnisII that just depends on how you do your bitboard
Marchete: no jacekmax?
jacek: PatrickMcGinnisII you can use mask
AllYourTrees: are you doing -1 for opponent jacek?
AllYourTrees: in your input i mean
jacek: Marchete it is used either for jacekmax or mcts-ept. mcts-ept in C4
MSmits: the search probably matters a lot less than the nn structure
MSmits: you could do ab minimax with it
MSmits: eval = everything
jacek: no, one-hot everything. 3x63 (x2 for side to move) possible inputs, where exactly 63 inputs are activated
AllYourTrees: whats the 3rd channel? valid moves?
jacek: channel?
MSmits: nulte, your bot might be better with tree reuse but still end lower, a submit is a poor statistical test
AllYourTrees: err the ->(3) x63
AllYourTrees: i have 2x63 so i'm wondering what the 3rd one is
jacek: each square is either empty, red or blue
AllYourTrees: ooooooooh
PatrickMcGinnisII: I'm only getting depth 4 with some 7380 nodes (full tree) with evals, it sucks
MSmits: if you want to have a good benchmark, play games vs your old bot and give both bots a small random variation
jacek: and x2 for side to move, so basically i double the possible inputs
Marchete: kind of one hot
Marchete: each cell has 3 states
nulte: I guess ill just submit on struct
nulte: and then improve it from there
Marchete: better do it
jacek: 1st or delete
Marchete: I don't understand the alt accounts
MSmits: ohh, so you are struct, I wasnt sure
MSmits: makes sense
PatrickMcGinnisII: i guess the bit shifts would auto fill the 0s, hmmm
MSmits: Marchete me neither
MSmits: i one time used an alt account because CG bugged my main account and i couldnt use IDE
jacek: shadow ban eh
PatrickMcGinnisII: no they wouldn't
MSmits: some people use alts to not publicly fail at anything
MSmits: but thats not why struct does it i think
AllYourTrees: ty for details jacek!
struct: I was getting spammed on pms
MSmits: everyone can see me fail at sht, i dont care
struct: by a guy I banned
PatrickMcGinnisII: smh, yall must be doing 9 bit shifts after isolating the column, is that right?
struct: So i was on the other account
MSmits: ahh ok, good reason struct
MSmits: PatrickMcGinnisII yeah 9 bit shifts happen
MSmits: several places
MSmits: but we use simd so it's all pretty weird code
Marchete: yeah, good reason for alt account
PatrickMcGinnisII: the memory usage isn't that bad, so I just store each column
AllYourTrees: only 9 bit shifts?! i'm doing 12 :O
MSmits: yeah there's 2 reasons to use bitboard. 1) for faster board manipulation with simd and bit ops and 2) in case you store the board on your nodes
struct: 12?
Marchete: 12? I'm doing 34!
AllYourTrees: don't you need 3 for each {vertical, horizontal, d1, d2}?
MSmits: no he means you shift it 9 places for a row
struct: 9 vertical 1 horizontal then 10 and 8 for diagonals
MSmits: thats what i assumed anyway
AllYourTrees: oh
MSmits: we check 4 directions at the same with simd, in this case you need the 9,1, 10, 8 shift amounts
struct: mine was based on this function
struct: http://blog.gamesolver.org/solving-connect-four/09-anticipate-losing-moves/
struct: But now is quite different
struct: I do the same number of shifts thats in that example though
Marchete: this is like connect 4's bible, isn't it?
MSmits: well your bot is very similar in strength to darkhorse's and mine
struct: Yeah I just need to fix my expansion
struct: and add the smarter rollout
MSmits: whats wrong with it?
struct: its kinda messy
MSmits: ah
struct: Due to the solver
MSmits: what is your rollout doing now?
struct: I need to fix some things
MSmits: is it just fully random?
struct: It still checks for win
struct: no
AllYourTrees: what are the hardcoded opening moves again? only on 1 or 7 if first, and if you're 2nd then steal anything else?
MSmits: ohh ok
struct: It blocks opponent wins
MSmits: no, dont steal corners AllYourTrees
struct: but the block can still create a win for opponent
MSmits: steal the middle 5
AllYourTrees: kk ty! MSmits
struct: I have new rollout that fixes that
MSmits: 2,3,4,5,6,
MSmits: play 1 or 7 at start
struct: But im not using it yet because I want to update the expand function
MSmits: dont play nor steal 0 and 8
struct: Also when I solve a node im still creating a child despite not needing to
PatrickMcGinnisII: php on CG only just recently upgraded to 64 bit ints, so I'm trying to figure it out, c4 wasn't as friendly with only 32 bits
MSmits: ahh ok
struct: lots of small things
MSmits: i tried to think of ways to early-solve with lookups
MSmits: doing pext and then lookup the remaining two columns
MSmits: but there are too many possibilities
struct: yeah
MSmits: you get 24 bit arrays or so
MSmits: too slow
MSmits: millions of possibilities
struct: Do you store the state on node?
MSmits: i do, but i did not try otherwise
MSmits: i generally do this when the state is < 128 bit
struct: mine is 16 bytes + current player
MSmits: so not for uttt
MSmits: why store current player?
struct: I dont need I guess
MSmits: nope
MSmits: you just do selectedCount & 1
MSmits: and you know which player it is
MSmits: or if you dont safe state on node you can just do player ^= 1 all the time
MSmits: save
struct: I will check
MSmits: possibly you wont see a difference in performance whether you save state on node or not. It's probably not a bottleneck
MSmits: especially when you do like 7 or 8 rollouts at once
MSmits: then selection is not going to be very expensive
MSmits: i just find it convenient. It simplifies things
struct: jacek bot also is quite strong
struct: at least vs mine
MSmits: he's strong
MSmits: but it's a nn, so hard to compare
struct: Maybe he is weaker vs weaker opponents
MSmits: yeah that's the annoying thing with nn's. That often happens. Depends on what kind of states it encounters during training and how well it generalizes
MSmits: seems like C4 was a good addition to CG
struct: yeah
MSmits: and well chosen size of 9x7. I have a hard time solving this thing locally. Not even close
struct: Its just a bit hard the start of the game
struct: its a bit random
struct: hard to make a mistake early
MSmits: I mean it's not hard to find likely good branches, but solving is another thing entirely
struct: easy*
MSmits: yes, i suffer a lot less from that problem
MSmits: complexity seems similar to uttt and such
MSmits: maybe somewhat simpler
MSmits: but same branching
MSmits: solves a bit sooner
struct: maybe
struct: also more friendly for begginers
MSmits: hmm, well it's friendly in the sense that people can see when their bot does good moves
MSmits: i think the simulation is not a lot simpler. Uttt is also quite simple to sim
MSmits: you just dont know when your bot is doing good moves
PatrickMcGinnisII: branching factor would determine c4 is simpler me thinks
PatrickMcGinnisII: anyone beam search c4?
PatrickMcGinnisII: I gove for now
PatrickMcGinnisII: er give
PatrickMcGinnisII: up
jacek: oO
PatrickMcGinnisII: my eval would work for alpha beta instead of win/loss
jacek: you have eval?
PatrickMcGinnisII: I just add the current token move to the score, it's additive but it works. win determination is easy too, but I have to make it faster
PatrickMcGinnisII: bonus for open ends
BugKiller_328: Is there a way to chat directly with specific user ?
PatrickMcGinnisII: '/msg
jacek: or click their names
BugKiller_328: '/msg jacek
PatrickMcGinnisII: no '
BugKiller_328: sorry I've tried to test..
jacek: oO
BugKiller_328: I want to chat with someone I'm following. he's not here though
PatrickMcGinnisII: glhf
struct: is he following you back?
BugKiller_328: no, I think..
jacek: do you have button private message on their profile page
BugKiller_328: I don't have :(
BugKiller_328: I wanted to know how to use opponentX, opponentY in bot programming called 'Coders Strike Back'. I'm in bronze league now but I have no idea.
Wontonimo: ah
Wontonimo: I can give you a hand
Marchete: noice I trained from scratch and in 3hrs it can win top 10 players
struct: which game marchete?
Marchete: oware
struct: grats
struct: How long did it took before?
Marchete: a lot :D
Marchete: because I was tweaking too much at the same time
Marchete: I'll release it on github
Marchete: only without the train/weights
Marchete: neither the exact model
Marchete: that's why I wanted to retrain from 0
Prensapjaimo: hey how yall doin?
struct: could be better if I was .04 points higher
MSmits: Marchete let me completely remove book so you can see if you beat all non-NN's yet
MSmits: it doesnt help me anyway
MSmits: i have the same rank with or without
Marchete: no
Marchete: http://cgstats.magusgeek.com/app/multi-oware-abapa/Marchete
MSmits: you dont want me to remove?
Marchete: I already did
struct: you are very close to the other NNs
struct: good job
MSmits: oh, then i should remove
Marchete: remove what?
MSmits: because you are facing a deterministic bot now
MSmits: the book
Marchete: ahh
Marchete: then no, don't remove it :D
Marchete: anyways that was the original training
MSmits: just temporarily, see what happens :)
Marchete: not the last 3hrs training
MSmits: o
Marchete: I think my submitted bot was "blind"
Marchete: on some positions
Marchete: esp. against Agad_e
Marchete: many moves with 0% tree reuse
MSmits: just be careful about drawing any conclusions from this. Agade always plays the same moves
Marchete: i.e. I didn't see it coming
MSmits: well almost always
MSmits: jacek is the only fairly random NN
Marchete: it's "irrelevant"
Marchete: I mean that his moves are unknown to my bot
Marchete: so it struggles
MSmits: sure but it may just hinge on 1 decision somewhere
MSmits: it was like this for me
Marchete: it's self-trained
MSmits: sometimes i added just 1 move
MSmits: and it went from 0% to 50%
MSmits: or something
Marchete: so I'm trying to add more diversity before turn 15
Marchete: but nothing specific
Marchete: just "expand more"
MSmits: ah
Marchete: my goal is zero domain knowledge
MSmits: mmh not sure thats a good goal though
Marchete: full self train
Marchete: why not?
MSmits: well if your intent is to make the strongest bot i mean
MSmits: of course if it's just about learning, then thats different
struct: does it have 0 domain knowledge atm?
Marchete: pure self learning bot
Marchete: it only have a minimal knowledge
Marchete: I'll show it
MSmits: strongest bot should be a strong nn, but also use as much domain knowledge as possible
MSmits: like endgame db
Marchete: http://cgstats.magusgeek.com/app/multi-oware-abapa/Marchete
Marchete: lol
Marchete: not that
Marchete: wrong copy
MSmits: just dont let the domain knowledge be restricive
Marchete: Score = -0.85f //BASE_WIN_SCORE - (float)(MAX_TURNS - turn) * 0.0006f //Estimated range 0.85 to 0.97 - 0.0026f * (float)score1 + 0.0020f * (float)score0;
Marchete: that's the most domain knowledge
Marchete: "win faster"
Marchete: "get more score"
MSmits: well thats not really domain knowledge
MSmits: all games have a turn limit
MSmits: on CG at least
Marchete: it knows that there is some kind of score
Marchete: and 200 turns
Marchete: other than that
Marchete: only gamestate and legal moves
Marchete: I think
struct: very nice
MSmits: submitted bookless, just to see if this version of your bot still gets 100%
Marchete: well Smits, with these premises it can win some top 10 players...
Marchete: I doubt
MSmits: well it should, i mean the other bots also lack domain knowledge mostly
MSmits: the nns i mean
MSmits: so that should work
MSmits: i am just saying they would be better if they had endgame books for example
Marchete: probably
Marchete: you can "skip" learning that
Wontonimo: I applaud the purity of your bot Marchete !!
Marchete: but then
Marchete: you need to invest human time on that
MSmits: yes
Marchete: pure selfplay don't
MSmits: thats why i said, if it is a learning exercise for you, anything goes
Marchete: thanks Wontonimo :D
MSmits: you did well in any case. Do remember that these other nn's had several iterations also
MSmits: jaceks and robos have been much weaker in the past
Marchete: learning but at the same time it went top 6th
Marchete: so I won't say it's a bad thing
Marchete: I'll put it in github/tech.io
MSmits: nooo
Marchete: and I'll accept PR and changes
MSmits: not the full thing
MSmits: or everyone will steal
Marchete: steal is a bad wording
Wontonimo: haha ... MSmits is sweating
MSmits: :)
Marchete: you need to setup a sh*tload of things
MSmits: he already shared mokka which is a treasure
Marchete: I had a bad time trying to understand that ML jargon
Marchete: it's not easy at all
MSmits: there's a lot of it
Marchete: or even plain wrong in some cases
MSmits: yeah, as long as you dont make it too easy, it's ok to share a framework.
MSmits: not the full bot with weights ofc
Marchete: of course not!
Marchete: well
Marchete: the bot yes
Marchete: but not the NN model
MSmits: thats the weights right
Marchete: nor the weights or anything
Marchete: no
MSmits: you mean the layers then?
Marchete: the NN design
Marchete: yes
MSmits: ah ok
Marchete: also it's probably "subpar" to ML standards
Marchete: I did my "way"
MSmits: no bot is perfect
Marchete: mine gives "no move" on last move
MSmits: why is that?
Marchete: so I tweaked it
Marchete: to give one
Marchete: dunno
MSmits: what is last move btw?
Marchete: never wasted time on that
Marchete: at turn 200
MSmits: oh ok, thats an off by 1 error somewhere
Marchete: probably because I don't expand or smth at turn limit
Marchete: yes
MSmits: off by 1 errors are the worst
Marchete: the worst?
MSmits: even if you do it correctly, you're always worried you did it wrong
Marchete: no no no
Marchete: the worst for me was
Marchete: the whole oware rules
Marchete: then the whole sign on evaluations
MSmits: ah well yeah the signs are always annoying
Marchete: dunno why, but I had a hard time
MSmits: for simple mcts it is the same
Marchete: like root node in MCTS
MSmits: yea
Marchete: it should be -sum(children)?
Marchete: or sum(children)?
MSmits: root should have a minus sign
MSmits: because your first move is one of the childrne of the root
MSmits: and those have a positive score, because they are your moves
Marchete: but it's not the turn of the enemy
MSmits: no but the children are the moves
MSmits: the root is not
Marchete: yes
Marchete: but as I needed some score for a gamestate
Marchete: for the NN thingy
Marchete: what I put?
Marchete: -(sum)?
Marchete: +(sum)?
MSmits: not sure why you sum btw?
Marchete: it was a mess for me
MSmits: why sum anything?
Marchete: what's the score of the root?
MSmits: well i am thinking of basic mcts here
Marchete: like, how good is that state?
MSmits: and then its just a backpropagated value
Marchete: imagine you have a sure win
Marchete: all children are +1.0
Marchete: then your root is -1.0
MSmits: why all?
MSmits: only 1 needs to be
Smelty: hmm
Marchete: just for the sake of vanilla mcts
MSmits: ok
Marchete: or just 1 children
Marchete: with +1.0
Marchete: your root is -1.0?
Marchete: then that gamestate is the worst?
MSmits: what do you mean the worst?
MSmits: there is only 1 root
Marchete: a sure loss
MSmits: sure
Marchete: no
Marchete: it's a sure win
Marchete: because any move you do (a single possible move)
MSmits: if one of the children is a sure win, then the root is a sure loss
Marchete: leads you to a win
MSmits: the root is always an opponent move
Marchete: because you assume the root as the opponent
MSmits: yes
Marchete: but Alphazero needs a score for the current player for the current gamestate
MSmits: well then you just negate
MSmits: everything
MSmits: seems easy to fix
Marchete: I did that
Marchete: weirs minus signs
Marchete: weird*
Marchete: until it worked out
Marchete: but it wasn't trivial to me
MSmits: well it's really just a matter of definition. I am sure you could code azero the other way around if you wanted to
MSmits: convention. I should say
Marchete: wow you beat Agad_e really easily
MSmits: 88% and 0 games vs you Marchete
Marchete: I'm seeing that :D
Marchete: finally one
MSmits: my bot tends to gather up a ton of seeds in a single pit
Marchete: and I lost :(
Marchete: the it was due to the book
MSmits: ah well, i wont end above you thats for sure
Marchete: that was more repetitive
Marchete: hence the 100% winrate
MSmits: might be. Books make my bot deterministic and it already has the tendency to be deterministic due to fixed eval, no random
MSmits: i play poorly vs royale
Marchete: so my bot isn't that bad \o/
MSmits: its great
Marchete: to be the only and first one I did it worked out :D
MSmits: thats why you start with oware. It's doable :)
MSmits: though probably not easy
Marchete: that's why I didn't want to go "easy" mode
MSmits: the only people that tried are good at this stuff
Marchete: like supervised or anything else
MSmits: well, in my case the nn part of that is indeed easy mode
MSmits: getting the data is a huge undertaking
MSmits: still working on book 34 :)
Marchete: you are mad
MSmits: yes yes
MSmits: you know what it is with my bot. It does ok vs agade and recurse probably ok vs yoiu
MSmits: but those NNs get nearly 100% against lower ranked
MSmits: and mine does not
MSmits: better with book, but still not nearly 100%
Marchete: I almost achieved that
Marchete: 100% except top4
MSmits: yeah
MSmits: I only have 9 params or so
MSmits: and those are fitted to do well in pro-play or whatever you call it
MSmits: with weaker players, they make my bot act overfitted
Marchete: I have 24,759 + 30 more :D
MSmits: yeah
MSmits: well i had a couple thousand with book i suppose :P
MSmits: but i doubt you can call them params
Marchete: only 1 match against me
Marchete: how?
MSmits: but as you see, book or not doesnt matter for my rank
MSmits: random i guess
Marchete: well
Marchete: you lose like 2-3 pts
Marchete: you were 40
MSmits: yes, but the distance between the bots is too great to matter in terms of rank
MSmits: the nns are soooo much stronger
Marchete: the NN wall :D
MSmits: exactly
Marchete: but you were above all heuristics
Marchete: by a big margin
MSmits: yeah
MSmits: book does help
MSmits: though it would never beat robo and jacek without serious cheesy counterbooking
Marchete: will you resubmit the original?
MSmits: if you want me to, sure
MSmits: i dont mind either way
Marchete: at some iterations I got like 50% vs robo
Marchete: but it was probably some luck
MSmits: robo is super easy to counterbook usually. I did not do it on this version, because i stopped doing that
MSmits: he's very deterministic
Marchete: jace_k is the one that adds noise
Marchete: I did it too for the selfplay
MSmits: yeah, robo did too at some point i think, but i never saw that much variation
Marchete: I noticed it ended playing the same again and again
MSmits: jace k has a ton
Marchete: very low diversity
MSmits: takes me like 500 hardcoded moves, maybe 1k, to get 50% WR
Marchete: maybe it's due to the bot nature
MSmits: could be
Marchete: so you can beat all of them?
MSmits: right now? No, jacek and robo are new
MSmits: but re curse and agade, sure
MSmits: should be good
MSmits: unless re curse also has a new version
Marchete: from march
MSmits: march this year hmmm, that seems new yes
MSmits: i havent touched it for a while
MSmits: so just agade then, but the book is not just cheesy counter stuff. It is also just good openings in first 10-20 plies
MSmits: but your bot may be able to counter those which is why you get 100%
MSmits: let me submit my old version, should push you again
Marchete: I won't move in rankings
Marchete: like you
MSmits: you might
MSmits: depends on how many games i get vs agade/re curse /you
MSmits: robo and jace k dont matter in this, they'll wreck me anyways
MSmits: oh, a draw
MSmits: and another vs re curse
MSmits: 3 draws in a row :)
Marchete: draws are counted?
Marchete: moves the score?
MSmits: yeah, it does
MSmits: by a small amount
MSmits: you have red downward arrow
MSmits: because of draw
Marchete: I see it
MSmits: oo i won vs robo
MSmits: rare
MSmits: yeah, book is pretty strong when i look at the games now
MSmits: a lot more wins
Marchete: 1 vs robo
MSmits: loss streak now
Marchete: top3 players mostly
MSmits: yeah, with those huge ratings, a loss barely matters
MSmits: it;s like losing to a grandmaster :)
MSmits: royale did really good on this multi
MSmits: the top 10 put a lot of effort in their bot to try and beat nn's. Not easy to do well in oware
Marchete: yes, but yours is better
MSmits: it's one of the bots i spent a huge amount of time on though, like uttt and yavalath
Marchete: I spent weeks trying to get all the pieces together
Marchete: bugs, sign errors etc
Marchete: also the NN are resilient to many bugs
MSmits: next game will be easier
Marchete: so it seems to "work" but it doesn't
MSmits: the other guys had those issues too. It has been several times that re curse said here that he found a bug after using a version of his nn for months
Marchete: I don't understand most of the stuff
MSmits: like what?
Marchete: the cpuct coeff
Marchete: it's like the coeff for the UCB1 formula
MSmits: mmh but thats not nn stuff
MSmits: is it?
Marchete: also batch normalization
Marchete: what the hell is a minibatch
MSmits: thats a small batch
Marchete: regularization losses
Marchete: etc etc
MSmits: thats just a consequence of you trying to eat the whole pie in one bite
Marchete: temperature on move selection
Marchete: I don't know
Marchete: a lot of stuff
Marchete: I've been eating it for literally years
Marchete: the forum post of Agad_e, pb 4 and fenri_r ?
MSmits: what smaller nn projects have you done?
Marchete: I don't understand half of it
Marchete: MNIST :D
MSmits: but you can do mnist in a week or two
MSmits: afaik
Marchete: 10 minutes on jupyter notebook
MSmits: i mean including the understanding of it
DomiKo: talking about NN I got top150 with NN on CSB :D
MSmits: gj DomiKo
struct: nice
Marchete: congrats
struct: two runners?
Marchete: what kind of NN?
MSmits: i dont think nn is that easy in csb
Marchete: neither me
DomiKo: simple blocker :D
DomiKo: CSB is more about RL
BlaiseEbuth: Good. Now give us back AutomatonNN DomiKo. :rage:
DomiKo: :crying_cat_face:
DomiKo: one day I will try doing some board games too
MSmits: you mean with nn
DomiKo: yeah
MSmits: because last time i checked you're in several :)
MSmits: Marchete book does not seem great at all. It's probably got something to do with you being part of the list of opponents now
MSmits: gives me motivation to turn it off entirely
Marchete: :(
Marchete: sorry?
MSmits: no no, thats fine
MSmits: I dont like using it in oware, it's tainted by cheesiness :)
Marchete: imo sometimes the NN get some weights that are perfect counters to your moves
MSmits: yes
Marchete: so win/draws always
MSmits: makes sense to me
Marchete: change some slight thing and you'll turn tides
Marchete: like Agad_e
Marchete: I never ever win once
MSmits: while running meta mcts, i did find some plays that went like 100 plies deep and solved as draw vs re curse for example and i never found alternative moves that were better
Marchete: like perfect plays
MSmits: yeah it seemed like that
Marchete: you just need to find it
MSmits: but if a player deviates from this, in one of the 100 plies, my bot would be back to relying on its 9 params
Marchete: the perfect win
Marchete: :D
Marchete: I'd like to be able to do that
Marchete: being able to analyze that way
Marchete: I have no clue what my bot does
Marchete: I only have a % of tree reuse
Marchete: if it's near 0% that's a bad thing
MSmits: well i have no clue why some states are good or bad, i just have statistics that say they do and a good solver
MSmits: because you get so much rollout and solving with a good c++ bot and a game with such a small branching factor, it becomes easy to analyze some states, provided you have some serious calc time
MSmits: nn's are not that great for this
Marchete: how many rollouts do you have?
MSmits: lemme check
Marchete: my NN does the incredible of
Marchete: 5000
Marchete: more like 4500
MSmits: 50k times x children (5 on average?), so i guess 200-300k at turn 2
MSmits: this is mostly because no random playout
MSmits: so i should say 200-300k evals
MSmits: and 50k backprops
Marchete: two lines of the NN takes like 70% of cpu time
MSmits: I went nuts trying to mini-bitboard this. I fit everything in 64 bit
MSmits: (except score)
Marchete: I have 2 uint64_t
MSmits: yeah most people do
Marchete: nothing fancy
MSmits: I use 5 bit per pit and then the last 4 bit is a single 31+seed overflow
MSmits: because you only ever have 1 pit with more than 31 seeds
Marchete: have you tested the seed count?
MSmits: what do you mean
Marchete: like seeing in real games what is the real limit?
MSmits: i did go over 31
Marchete: in your metamcts
Marchete: yes?
MSmits: yes
MSmits: in one pit
MSmits: rarely though
Marchete: that's a problem for me
MSmits: my game would crash because i used 5 bits
Marchete: I only have a limit of 27
MSmits: so i added the overflow thingy
Marchete: or 24?
Marchete: I think 24
MSmits: it does not matter if you only use it for eval
MSmits: but if you have a limit in sim, it could be bad
Marchete: so if you achieve 24+ it will probably fail
MSmits: what will fail? the eval or your sim?
Marchete: I have a NN limit
Marchete: the eval
MSmits: ahh that might be ok
MSmits: robo has his limit at 31
MSmits: you should just clamp it
MSmits: or cap it, or whatever
Marchete: I do that
MSmits: I might do that in my supervised learning thing
MSmits: varying data labels between -48 and +48 might not be good
MSmits: probably will do -31 and +31
Marchete: I'm doing what I understood from jace_k
Marchete: one-hot encoding
Marchete: from 0-24 to cells
MSmits: yeah that works well, as confirmed by robo
Marchete: and 0-27 score¿?
MSmits: but robo made a really strong bot without it
Marchete: something like that
Marchete: yes
MSmits: 0-27 seems somewhat arbitrary
MSmits: unless it's a fitted param
MSmits: why not 0-25 or 0-29
Marchete: completely invented
MSmits: yeah i guess so
MSmits: also, isn't it -25 to +25?
MSmits: oh right, it doesnt use relative score
MSmits: personally I would use relative
Marchete: no, for each one
MSmits: dont see why you would input two values
MSmits: when only the difference is meaningful
Marchete: 20-20 is like 0-0?
MSmits: 20-20 is like 0
MSmits: 24-20 is like 4
Marchete: 25-20 is like 5?
MSmits: yep
Marchete: but with 25-20 I win
MSmits: that doesnt matter
MSmits: you could keep playing
MSmits: the only reason the game ends is because there is no way to catch up
MSmits: that should not matter for the nn
Marchete: 24-20 == 4 but 25-21 != 4
Marchete: I don't know
MSmits: hehe i remember having this discussion with you before :)
Marchete: yes
Marchete: so I won't do it again
MSmits: hehe its ok
MSmits: it's a subtle argument
Marchete: I won't change the inputs anyways
MSmits: nah no need
MSmits: if it works, it works
Marchete: I truly hate that game
Marchete: at the same level than PCR,CSB and UTTT
MSmits: i have no strong feelings for it one way or the other, but i dislike the 200 turn ending
MSmits: it feels messy
Marchete: it is
MSmits: it makes the entire game different
Marchete: sometimes you get the seeds (no available moves)
MSmits: and makes ingame end books really complex
Marchete: then on 200 you don't
Marchete: dunno
MSmits: i literally have a different value for looking up with 1 turn left or with 20 turns left
MSmits: or 100 or whatever
MSmits: all the way up to 185
MSmits: (since i assume games wont get that low in the first 15 turns)
MSmits: my old meta mcts does this too, being turn sensitive
MSmits: my new one for supervised learning will ignore turn limit
MSmits: makes you have 200x less unique states
Marchete: I hope you make it work
MSmits: i am pretty sure it will work to some extent
MSmits: just dont know how far it goes
Marchete: good to be that confident
MSmits: well the hardest parts are the things i always managed to do
Marchete: I had 0 (nein, none) expectations to be able to make it top20
MSmits: i already managed i mean
MSmits: i was pretty confident you could do it
Marchete: if I do something is because I kept trying for months
Marchete: when others did in a couple of dayts
MSmits: you did some hard stuff for CG before and most people that tried oware NN succeeded. So if i see someone else smart try it, I will assume they succeed
MSmits: now try convolution and stuff
MSmits: and do some othello :)
Marchete: :scream:
struct: I doubt others did it in a couple of days
MSmits: no they didnt
MSmits: they all spent months
struct: maybe I could do it in 1 day /s
MSmits: you said you write 1 function in a day
Marchete: it took me like 1 full week to have a sim on the last challenge...
struct: my c4 didnt take much
struct: like 4-5 days
Marchete: you had it in 2 days, top
Marchete: I remember it
MSmits: mmh that sim took me a few hrs only
struct: even with simd?
MSmits: no i had no simd for the last contest
MSmits: my c4 bot including simd was less than a day
MSmits: wrote meta mcts the next day
struct: tbf i also waste a lot of time in pre optimization
struct: The first thing I did was rollout
MSmits: well i think i was lucky on c4, generally these things take me a week
MSmits: because of bugs
JimmyJams: anybody here know how to code a hentai girlfriend? asking for a friend
struct: Marchete I was beta tester for the contest
MSmits: I spent most time in last contest just trying different things for beamsearch
struct: sim was quite simple yeah
MSmits: glad i got to legend with that, but wasnt a huge success
MSmits: i am proud of the sim verifier i wrote though
MSmits: sim was perfect, but my beamsearch had a huge bug for half the week :P
MSmits: something was wrong with nth element
Marchete: do you ppl have some ELO tool
Marchete: ?
MSmits: no, re curse uses one
Marchete: or a way to simply calc that?
Marchete: I remember
struct: no
Marchete: but it was like a complex tool
struct: my elo tool is an excel spreadsheet
MSmits: no i have never tried. This should be google-able though I think?
Marchete: I did
Marchete: it was just in case you had some single function
Marchete: or smth
MSmits: nope. I usually just test only 2 bots against eachother and just calc WR
MSmits: super simple
MSmits: but i guess with NN you want maybe 10 versions and do an elo thingy
Marchete: I'm trying to have 2 "best" models
Marchete: to compare against
Marchete: the last two
MSmits: ah ok
Marchete: to avoid overfit
MSmits: more is better
MSmits: but takes more time to check
MSmits: when i find articles they usually do some huge 20 x 20 table or something
MSmits: with a lot of versions
MSmits: might not be practical
Marchete: well, bed time
Marchete: it's kind of late
Marchete: cya
MSmits: yeah. same here
MSmits: gn!
struct: gn
Risheq12: i am new here is this really helps?\
struct: depends
struct: new to programming?
Risheq12: not really i am 3rd year software engineer
Risheq12: but i found some of these games hard
cho_q: Has anybody done coding assessment in this website?
struct: Risheq12 it can be a bit overwhelming at the start
struct: UndyingScone_406b no but it should be in https://www.codingame.com/work/
struct: They recomend doing easy puzzles to practice for it iirc
struct: just to get an idea on how the site works
Wontonimo: hey Risheq12, these games ARE hard
Wontonimo: wow, i've been on this site for 8 months and I've not seen https://www.codingame.com/work/ until today
struct: need to fix my expansion
struct: but my brain cant click
struct: oh my
Wontonimo: oh what?
Wontonimo: my brain hasn't clicked for about a month
struct: I forgot to change current player
struct: before i started the rollout :D
struct: So same player would be making 2 moves in a row
struct: now I must find if this was a feature
struct: :)
Wontonimo: resubmit and find out
Wontonimo: i really can't imagine that bug improving your code. i'm really surprised you got to 3rd with that bug
struct: same
struct: But I checked and it was happening :p
struct: but I think I created another bug
struct: but will see
Wontonimo: y u go mak bug?
struct: mak?
struct: make
struct: ah
Wontonimo: not a single loss so far
struct: not looking bad
struct: how did this bug
struct: made to 3rd and 2nd is ridicolous
Wontonimo: the rest of your code is just that good
struct: omg
struct: i beat msmits 2 times
struct: o.o
Wontonimo: yeah, i see that
Wontonimo: you are pulling down his trueskill score
struct: I need to improve next thing now
struct: :)
Wontonimo: i don't get it. how did this bug even let you get into the top 10
struct: well the solver was saving me
Wontonimo: but the solver assumes you get 2 moves in a row at the beginning, which is wrong
struct: no
struct: the rollouts does
Wontonimo: oh
struct: I would apply the move
Wontonimo: it's just in the rollout
struct: and then rollout without changing the player
struct: its still a big bug
Wontonimo: okay, yeah, that wouldn't kill your bot, just make it underperform
struct: yeah
struct: I knew I should have an applyAction function
struct: :p
Wontonimo: basically hurts your probabilities in the beginning
struct: yeah but the beginning is very important
struct: imo
Wontonimo: oh, i saw your bot jump to 2nd a couple times
struct: yeah I just need to pray to get p2
struct: player 2*
Wontonimo: praying wont help. Hold a cup of coffee over your computer and threaten it instead
struct: now msmits is taking his revenge
struct: 3 matches in a row vs him
struct: :(
struct: Same rank
struct: .04 points exactly the same difference
Wontonimo: very interesting
struct: but now it never loses in under 40 tunrs
struct: before it did
Wontonimo: nice! The MCTS solver is slick
struct: My next version should solve sooner
Wontonimo: i remember when i added it to my UTTT bot it made quite an improvement
Wontonimo: how is it going to solve sooner?
struct: because currently I dont do 1 check
struct: if I do a move and opponent could win after i made that move
Wontonimo: ah
struct: Like he could place a piece on the top of the one I played
struct: To win
struct: I dont take that into account
struct: But I have function for that now
Wontonimo: so, a 1 move minimax
struct: yeah but is actually like 2 moves
struct: mine and opponent
Wontonimo: 1ply
Wontonimo: and are you planning on doing that on every Node ?
Wontonimo: to reduce the branching
struct: yeah
Wontonimo: oh neat.
Wontonimo: there will be a computation tradeoff
struct: yeah I get slightly less rollouts
Wontonimo: and i'm interested to see how it works out
Wontonimo: cost/benefit
struct: because I also added this to the rollout
struct: Also with this you dont need to check for a win
struct: because you know every outcome from your moves
Wontonimo: wow, you already do that in the rollout! How many rollouts are you doing in 100ms?
struct: not in this rollout but this rollout is also smart
struct: 1 sec
struct: after fixing the bug I get slightly less
struct: but is around 285k now
struct: on 1st turn with 99ms
struct: but I rollout for every expanded child
struct: So it gets a bit more
struct: But I expand less
Wontonimo: why wouldn't you rollout for every expanded child?
struct: Some people select a random child and rollout only that one
struct: the still create the others
struct: but dont do rollout
Wontonimo: oh
Wontonimo: got it
struct: it makes it so it expands the tree more
struct: Its good for solver
struct: Maybe I can try it after N turns
Wontonimo: and do you use parent->parent->score to init the score of of a Node?
struct: the child?
struct: after i expand all the childrens start at 0
struct: or w/e the rollout score was
struct: -1,0,1
Wontonimo: ah. So, like the UCT score (regret), there was this paper I read where they also added a grandparent factor
struct: But do you add it to all the children?
Wontonimo: the idea is that a new nodes score is probably going to be very close to the grandparent.
struct: I see
struct: because the distance of the diff from -1 to 1 is greater than 855 to 857 with uct
struct: right?
struct: if node had 2 childs
Wontonimo: no, but it is in the equation. It's something like + grandparentScore / visits^2
struct: hmm, i dont quite get it why it works
Wontonimo: sorry, i should have said grandparentAvgerageScore
Wontonimo: so, imagine the grandparent (the previous move for this player) has been doing really well, with an average score of -0.7
Wontonimo: sorry +0.7
Wontonimo: the children will LIKELY also do well
struct: yes
Wontonimo: hmm ... as i'm thinking it through, i'm questioning it... let me check my UTTT code and see if I even use it
struct: ok thanks for taking the time to try and explain
Wontonimo: yes, i do use it and it made a difference
Wontonimo: okay, so here is the second attempt at trying to explain it (it's a bit fuzzy in my head)
Wontonimo: The regret term UBC1 is there to encourage exploration, but ... ah, i don't know why I'm having trouble explaining it. maybe i don't get it
Wontonimo: let me see if i can find the paper
struct: its fine
struct: dont stress about it :p
Jakaria: hey guys
struct: hi
Jakaria: so, i was doing clash of code
Jakaria: it was shortest mode
Jakaria: so, this chinese dude wrote code in chinese, then encoded in utf-16
Jakaria: which saved him like 10 characters
Jakaria: just, wow
Wontonimo: ah, so in a nutshell, if the Node is initialized with nearly the correct win/loss, then your regret term does not have to be a big, and since it doens't have to be as big, you go deeper with the same sim count
struct: hmm, yeah
struct: I kinda have to agree
Jakaria: still could beat me XD
struct: so you must have a regret term per node?
Wontonimo: no, why would you need a regret term per node?
struct: ah so the regret term is based on the parent
struct: ?
Wontonimo: the regret term is UCB1.
struct: ah
Wontonimo: just regular old UCB1
struct: im sorry, im not really familiar with the terminoligy
struct: i never read mcts paper
Wontonimo: sorry, i read it somewhere where it was called that. i don't know if it is "the name" for it, but it sure makes a lot more sense to me so i use it
Wontonimo: yeah, so my constant for UCB1 is "lower" than normal because of the initialization
Wontonimo: mind you, you destroy me in UTTT, so maybe it's a bad thing :D
Wontonimo: good night
struct: gn
struct: and thanks
nuggetbucket54: how do you guys feel about encoding code to get better results for code golf
nuggetbucket54: it seems so broken
Jakaria: yeah man
Jakaria: i got a dude who used encoding 2 games earlier
JohnCM: should ban encoding code, cause we won't learn anything from it
Westicles: you learn how to win
JimmyJams: misses the spirit of code golf
gon: wtf is encoding the solution legal
gon: just lost a golf to this exec(bytes("㵉湩異ੴ㵮湩⡴⡉⤩愊䤽⤨戊䤽⤨椊╮㴲ㄽ映牯椠椠慲杮⡥ⰱ⭮ⰱ⤲猺⠽⥩⼯㬲牰湩⡴⩢⭳⩡⭩⩢⥳攊獬㩥 潦湩爠湡敧渨ㄫ〬⤲猺⠽⭮ⴱ⥩⼯㬲牰湩⡴⩢⭳⩡⭩⩢⥳","u16")[2:])
Jakaria: :)
gon: pretty annoying :c
Jakaria: there's no way to counter it except doing it
gon: is there like a built-in report system?
Togarashiiii: gon is being a sore loser
JohnCM: if i see exec(bytes(<nonsense>)) in a code again, probably going to ban that person
JohnCM: lol.. but i can't ban oh well
Jakaria: haha
JohnCM: but it's ok, rarely see those ppl anyway
JohnCM: most ppl play fair
Togarashiiii: to you what is "fair"
Togarashiiii: to me it sounds like "fair" is just an imaginary standard you setup
Westicles: Yep. These godless kids these days are all screwed up when it comes to differentiating right from wrong