Chat:World/2021-07-06

From CG community
Jump to navigation Jump to search

Default avatar.png test00: Good afternoon,

Default avatar.png test00: is there any way to get input data by file ?

KiwiTae: ya

Default avatar.png test00: because I hope to run my code locally but difficult to copy input data from log screen

Default avatar.png SuryaTheOP: hloo

KiwiTae: test00

KiwiTae: std::ifstream in(YOUR_FILE);

   std::streambuf *cinbuf = std::cin.rdbuf(); //save old buf
   std::cin.rdbuf(in.rdbuf());

KiwiTae: in cpp

Default avatar.png test00: oh,, even it's run online, can save data in my local file ?

Default avatar.png test00: let me try :)

KiwiTae: no lol but you can download game in/out stream with CG tools I forgot where to find those

BlaiseEbuth: https://www.codingame.com/forum/t/community-resources/187070/4

BlaiseEbuth: Pin it. Like an owl on a door.

Default avatar.png test00: ok just pin it

derjack: spin it

BlaiseEbuth: (╯°□°)╯︵ ᔭ/0ㄥ0ㄥ8Ɩ/sǝɔɹnosǝɹ-ʎʇıunɯɯoɔ/ʇ/ɯnɹoɟ/ɯoɔ˙ǝɯɐƃuıpoɔ˙ʍʍʍ//:sdʇʇɥ

derjack: now i can read it clearly :upside_down:

BlaiseEbuth: :thumbsdown:

Default avatar.png SuryaTheOP: i got a fastest clash which gives a range of numbers and we have to find how many number of divisiors for each of number. i got it and while testing it it saying that process has timed out.

Default avatar.png SuryaTheOP: is there any way to correct this

BlaiseEbuth: Yeah, optimize your code, it is too slow.

BlaiseEbuth: Probably a mathematical trick.

Default avatar.png SuryaTheOP: the clash is over

Default avatar.png SuryaTheOP: but i don't get it

Default avatar.png SuryaTheOP: https://www.codingame.com/contribute/view/64019a6ded4ae1f1c40a5103fe583425638d

Default avatar.png SuryaTheOP: anyone can explain this

BlaiseEbuth: Explain what ?

Default avatar.png SuryaTheOP: how the code work

Default avatar.png SuryaTheOP: it got solution in c++ but i am python learner

BlaiseEbuth: The solution you mean ?

Default avatar.png SuryaTheOP: yess

Default avatar.png SuryaTheOP: i dont know c++

BlaiseEbuth: I'll take a look

Default avatar.png SuryaTheOP: thanks in advance

derjack: helpful mod is helpful

BlaiseEbuth: :thinking:

Default avatar.png SuryaTheOP: @BlaiseEbuth you can DM me

derjack: puzzle of the week about :cheese: eh

derjack: whenever i see oware something is happening

Default avatar.png tree.png: hey guys, how do you switch Test Cases in Clash of Code?

Zedogx: use setting then custom\

Default avatar.png tree.png: no like when you're in a round, you do the first test case, right?

Default avatar.png tree.png: how do you switch to the next one to keep progressing?

Zedogx: oh

Default avatar.png tree.png: i'm sometimes finished with the first test case.. idk how to move to the next one though

DaNinja: ctrl+Enter

Default avatar.png tree.png: thank you!

Default avatar.png tree.png: hmm.. it didn't seem to work for me

Default avatar.png tree.png: i'm on mac if that has anything to do with it

Default avatar.png tree.png: Ctrl + Enter doesn't seem to do anything but Cmd + Enter did something, didn't switch to the next test case though

DaNinja: ctrl+shift+enter

Default avatar.png tree.png: i'll try that.. thanks!

DaNinja: not sure if its Option or Cmd on Mac

BlaiseEbuth: Is that OK tree.png ?

Default avatar.png c0nc4c: i solved there is no spoon kekw

Default avatar.png c0nc4c: pogger

derjack: :tada:

Default avatar.png tree.png: BlaiseEbuth, i think i misunderstood what i was supposed to do because i thought that the test cases were seperate tabs instead of just being in one script

BlaiseEbuth: That's wath I supposed. ^^ Yeah you have to write one program able to solve any test.

RitamChakraborty: Hopefully those who are from US had enjoyed the fireworks to the fullest on 4th July.

BlaiseEbuth: :tada:

derjack: yeah, happy treason day

Default avatar.png juice0: it's only treason if you fail

BlaiseEbuth: Yeah. Same for crimes against humanity.

BlaiseEbuth: :speak_no_evil:

derjack: like javascript

BlaiseEbuth: It's javascript only if you fail? :thinking:

Westicles: what's the shortest way in sh to read a line you don't want to use?

Default avatar.png juice0: no idea here

dbdr: Westicles: read

Westicles: that works in bash, but in sh it gives me an error without a variable (read n). thought something else would be shorter

dbdr: ah, you're still golfing

Westicles: I'm pretty much done. I don't have any good ruby/perl/bash ones to start with, so I just filled the holes where you didn't bother

derjack: somethings new marchet?

Marchete: nope

Marchete: do you think royale is NN?

Marchete: I think is book

Marchete: but dunno

Marchete: I mean, Smits isn't first because he doesn't want to

Marchete: he can counterbook all NNs

Marchete: in no time

Marchete: it's just he doesn't want to

derjack: _Royale? hmm. could be also leaderboard instability, only 2-3 people spam submiting lately

princess_of_zeal: what are you working on?

derjack: and smits couldnt counterbook my bot muchly. i have more some randomness in my search

derjack: Automaton2000 who is princess_of_zeal

Automaton2000: nah, i just like it

Marchete: most NN except jace_k are too deterministic

Marchete: like changing 0.01 some parameter it goes from all losses to all win/draws

Marchete: my last NN weights don't lose a lot, but it draws a lot

Marchete: like http://cgstats.magusgeek.com/app/multi-oware-abapa/Marchete

derjack: oh my

Marchete: drawing isn't good for scoring

Marchete: esp. against top3+

Marchete: I was giving some slight bonus to drawing, like 0.01, maybe that's not good

Marchete: drawing=tie

derjack: if a player already has 24 seeds, he could later treat the draw as lose

Marchete: I think it should be more as player position

Marchete: if p2 would be a proven loss

Marchete: then make a bonus

Marchete: but I don't know if there are proven win loss per position

Marchete: I hate this game

Marchete: 1 star

RED_X000: Ayo Mr. White, I got the drip!

Marchete: you see the 1 star rating? it's mine

derjack: in oware?

Marchete: yeah

derjack: oO

Marchete: 93% winrate, each enemy >60% winrate, no even 2nd place

Marchete: that's fine

derjack: is this love-hate reliationship

derjack: like rebless and uttt

Marchete: more hate-hate-anger relationship

dbdr: not enough matches maybe?

Marchete: too many draws

dbdr: that's a problem with commu multis

derjack: and you pushed royale to 4th

BlaiseEbuth: o/ dbdr

Marchete: but it's disheartening a 93% winrate and being 3rd

dbdr: \o

BlaiseEbuth: How's your massage room?

BlaiseEbuth: :p

dbdr: Marchete, activate " Count draws as half-win "

dbdr: BlaiseEbuth, it's gone (I hope!)

dbdr: at least from the public eye ;)

BlaiseEbuth: :fingers_crossed:

derjack: welp he still has green bars against top players

Marchete: ahh :D

BlaiseEbuth: I prefer Irish pubs to green bars...

TipuTare: guys

TipuTare: can i add a number to a list

TipuTare: like

TipuTare: list = []

TipuTare: list = list + a where a is a string or a number

Uljahn: don't use keywords as names

TipuTare: im just asking

Uljahn: you can do lst += [a]

TipuTare: oh ty man

BlaiseEbuth: He's a cat

Astrobytes: instead of asking all the time, it's often better to try it and see what happens

Default avatar.png progamego: i dit it al rong):

Astrobytes: then look at the documentation

BlaiseEbuth: :ear_no_evil:

TipuTare: imma just ask for now :)

BlaiseEbuth: :hear_no_evil:

derjack: who needs to read docs or statements

Marchete: read documentation is for weak

Marchete: weaks

Marchete: first code, then get bugs and search on stackoverflow

BlaiseEbuth: Asking too.

Default avatar.png placez: if I don't run the tests but the code is working then it'll show 0%?

BlaiseEbuth: No

dbdr: Marchete, you were awesome to write the cgzero article!

Marchete: I hope it's useful to someone :D

Marchete: at least jolindie_n was able to reproduce some good results

BlaiseEbuth: jolindien?

Marchete: 8th in leaderboard, it was 4th not long ago

dbdr: definitely. the whole pipeline is big, it's great to have a working one to start playing with and understand progressively

dbdr: my bot submitted right now is cgzero

Marchete: with some improvements I was able to get 5th place in 1 hour of training

Marchete: ahh

Marchete: noice

Marchete: it was hard to setup?

derjack: how long did you train

Marchete: wait

Marchete: Rust?

Marchete: Oo

dbdr: it's my rust packer

derjack: :unamused:

Marchete: ah

Marchete: you are fast

dbdr: 2 hours of training maybe

Marchete: nice

Marchete: the bot is very sensitive to MCTS rollout count

Marchete: the more rollouts the better

Marchete: top 10 in 2hrs training, not bad

dbdr: by the way, the model fitting is a small part, so I don't think GPU matters a lot, right?

Marchete: I haven't used it

dbdr: the rest is CPU, selfplay and pitplay

Marchete: in fact I tested it and didn't notice any perf improvement

Marchete: I used 6 threads for CGZero

derjack: can GPU exploit the fact of one-hots in first layer?

Marchete: the rest was for gaming while it trained :D

dbdr: the model.fit should be faster, but it's less than 10% of the time, so does not really matter

Marchete: so I prefer to keep GPU free

RoboStac: gpu's about twice as fast on the training for me, but the training is a tiny part of the overall time

dbdr: exaxctly

RoboStac: if you do conv stuff it starts to matter a lot more

Marchete: you can improve a lot the first layer

Marchete: I did

Marchete: and it's noticeable

Marchete: also in Conv2D

Marchete: I added Conv2D in Mokka

dbdr: compared to your published version I suppose?

Marchete: https://github.com/marchete/Mokka

Marchete: yes

BlaiseEbuth: Mokka is a f*****g good cake... :yum:

Marchete: but it's not that far from published

Marchete: also a Coffee

derjack: mokka? isnt this coffee?

dbdr: so https://github.com/marchete/Mokka is optimized, just not included in https://github.com/marchete/CGZero?

Marchete: yeah, as I was inspired by a NN repo called "Latte"

Marchete: you know, Mokka as a derived work

Marchete: not exactly dbdr,

Marchete: latest CGZero had one-hot improvements for Dense

BlaiseEbuth: Yeah, but also a cake with coffee.

Marchete: Mokka repo just added Conv2D

dbdr: ok, nice

Marchete: it's irrelevant for CGZero that part

Marchete: except on future uses, like for Connect4 and such

dbdr: yeah, not for oware

Marchete: I think I added a performant Conv2D too

dbdr: I got a gen winning only 28% to the previous one, that was unusual

Marchete: also can be improved/cached much more

dbdr: most improve, or at least 45%

Marchete: not for me dbdr

Marchete: I also saw those massive drops

dbdr: that looks suspicious to me, no?

Marchete: probably

Marchete: that's why I don't always train with latest

dbdr: will need to play with hyperparams to compare the results

Marchete: and keep 2 bests

dbdr: happy to have a working base now :)

Marchete: cpuct

Marchete: that's a mess for me

dbdr: yeah, I did not optimize cpuct

derjack: so many things to tweak

Marchete: also dbdr read on tech.io the final words

Marchete: here I put some info about uncommited changes I did

dbdr: ok

dbdr: I pushed you #2 I think :)

derjack: :rage:

Marchete: but overall you get to top 6th in little time

dbdr: what's wrong derjack

derjack: nothing~

dbdr: I started yesterday

Marchete: I think it learn fast, so it seems the pipeline is correct in most parts

dbdr: had to fight with a tensorflow packaging bug in nixos

derjack: welp, if 20 more ppl will start suing cgzero, you might not get into top6 that easily

Marchete: obviously

dbdr: and learning the pipeline, but the notebook was super useful

derjack: using even

Marchete: but I think it's OK to have some basic framework about how an AlphaZero work

Marchete: I struggled a lot

dbdr: sure, will need to improve it

Marchete: so many sh*tty repos on github...

derjack: yeah, NN is just small part of it

TipuTare: what is the fuction to eliminate an elemnt from the list?

Marchete: if you improve something dbdr, I'd like to learn

TipuTare: pop() right?

derjack: yes

dbdr: ok. one thing I was thinking of, the pitting against best2 could be skipped if win against best1 is low. but it's used to decide the proportion of selfplay

dbdr: thoughts?

Marchete: exactly for that reason

derjack: pop() will remove last element, pop(index) element at index

dbdr: I'm not sure it's worth it

Marchete: to get proportions

Marchete: probably not

dbdr: anyways it's only when progress is becoming rare that it matters

dbdr: maybe with better hyperparams there should be more constant progress

derjack: in pitting, do you stop early if you know its not gonna reach 55%?

Marchete: no I don't stop

TipuTare: so like if alice is the list

TipuTare: alice.pop(index)

derjack: [2,3,5].pop(1) -> [2,5]

Marchete: I also lose a lot of time in the Samples processing

**BlaiseEbuth slaps TipuTare with a large python documentation.

Marchete: probably having the whole selfplay + sampler in one daemon process can be better

dbdr: NNSampler? looked pretty instantaneous to me

Marchete: at all

Marchete: once it's "filled", ordering samples by count is expensive

Marchete: 6th place, not bad

dbdr: that was my gen 23

Marchete: gen depends a bit on match count, EPOCHs etc

dbdr: right

Marchete: I reached it in about gen 11

dbdr: then progress stopped?

Marchete: top 3 in like 36 with a lot of restarts :D

Marchete: and tweaks

Marchete: it reaches some nash equilibrium

dbdr: top N is not a stable metrics ;)

Marchete: hard to improve or improvements are overfitting

Marchete: so in arena are worse

dbdr: there is a nn_1="gen0242" nn_2="gen0239"

Marchete: also self winrates aren't a 100% sure metric

dbdr: in the notebook :D

derjack: add submitting to CG as pitting. [solved]

Marchete: 242? lol that was from previous versions

dbdr: might slow down things *a bit*

Marchete: but yes, I've restarted a lot of times

dbdr: Marchete, putting the pitting result in the file name is ... interesting :D is it for debugging convenience? using ls

Marchete: yeah, to open a folder and see winrat3es

Marchete: at some point I can pick a gen with 50+ , even if it isn't 55+

Marchete: to test in CG

Marchete: but I did that since ever, on CGBenchmark and similar

Marchete: also as an added tip/info

Marchete: if you have traindata samples

Marchete: you can create a different model and retrain with those samples

Marchete: it's faster sometimes than start from scratch

Default avatar.png DevilJamJar: My CoC was printing the last character of a string 🥲

dbdr: ah, because the samples only depend on the input and output shapes, not the inner layers, right?

Marchete: yes

dbdr: so if you had valid moves as input, you can't do that :D

dbdr: *add

Marchete: I think I can

Marchete: well

Marchete: if you only change hidden layers

dbdr: yeah. nice tip

Marchete: if you cahnge inputs then no

Marchete: maybe valid moves as inputs is a nonsense, I don't know

dbdr: my intuition is it should speed up training

Marchete: I noticed that

Marchete: but only useable on games with little valid moves

derjack: depending how you save game position. if its just game position (not inputs) and the policy/result then you can train anything on the samples

AllYourTrees: openai 5 did this thing where they dot product valid moves vector with intent vector output from the network https://neuro.cs.ut.ee/the-use-of-embeddings-in-openai-five/

AllYourTrees: but not sure that how would work for games with smaller action space

dbdr: intent is policy?

AllYourTrees: dot(intent, valid moves) is policy

AllYourTrees: they called it "intent" but its just the last output from the network

AllYourTrees: cause they had 170k possible actions, but the last layer was much smaller than that

dbdr: I think that's always cone one way or another. no point playing an invalid move

Marchete: yeah I thought about feeding valid moves input layer right before the policy part

dbdr: *done

Marchete: invalid moves have 0 policy

Marchete: so in the end the NN tends to give 0 as it trains

Default avatar.png Raffix: moin

TipuTare: can u sort a string?

Uljahn: nah, in python strings are immutable, but you can convert string to list, sort it and join

TipuTare: ok

Marchete: any NN expert? I'm trying an Hex filter for Conv2d

Marchete: I think that this constraint:

Marchete: class HexGrid3x3(tf.keras.constraints.Constraint): http://chat.codingame.com/pastebin/66232a01-45bb-48ab-adbb-7458e0fd488a

Marchete: and this:

Marchete: model.add(layers.Conv2D(filters=5,kernel_size=(3, 3),kernel_constraint=HexGrid3x3(),strides=(2,2),name='Conv1', activation='relu', input_shape=(28, 28, 1)))


Marchete: kernel_constraint=HexGrid3x3()

Marchete: could work

Default avatar.png Dukat: In code clashes, java code is always so long. so always auto lose?

dbdr: Dukat: yes. use the right tool for the job

RoboStac: Marchete - whats the stride for? Your constraint looks like you are doing the none-sparse layout that recurse used, but the stride suggests you are trying to do the sparse version (which stride won't work for as you are still using every row / column)

Default avatar.png Dukat: ok thanks

Wontonimo: Marchete, that hex constraint looks like it should work.

Wontonimo: you can verify that it enforces the constraint by checking your kernel after training to see that values on the forbidden region are unchanged

derjack: hex conv :thinking: i bet its for Yinsh

Wontonimo: I approached hex a little differently, before there was a kernel constraint in tensorflow. https://colab.research.google.com/drive/1wPRcxwGcQR7ORGdepeDTYAfot0nMc7cB

ja_fica: MSmits did you just added a counter book in C4 for roboStac xD?

derjack: oO

struct: no one will code a NN for yinsh derjack

derjack: unless it becomes another potw

Marchete: weights seem logical, zeros on corners

Marchete: stride is just for testing it

Marchete: it should be 1 always

BlaiseEbuth: Yeah! Zero on corners! With a donkey hat!

Marchete: Smits don't add countebooks anymore

Marchete: afaik

ja_fica: He might just have updated the book but it sure worked, from 50% win to 90% to robostac

darkhorse64: He pulls a spell on you with his grimoire

MSmits: i did not

MSmits: i just went from 45 million to 65 million games played

derjack: back to meta mcts eh

MSmits: just until i am ready for the oware one

MSmits: but got back into D&B for a while

MSmits: jrke's fault

MSmits: he found a bug in my solver and it took me 2 days to fix it. Then I was hooked again :P

MSmits: I feel 99% sure C4 move 1 is a draw now btw

ja_fica: you use single thread?

MSmits: 10 threads

ja_fica: you join maps after?

MSmits: when it's exploring a particularly deep branch that solves to draw, it plays 100 games/second

MSmits: oh D&B?

MSmits: i thought you meant c4

ja_fica: i mean C4

MSmits: what do you mean join maps?

ja_fica: where you store the state-move results

ja_fica: not in a transition table?

MSmits: ohh, the meta mcts tree, yeah

MSmits: the tree has transposition tables

MSmits: the games that are run from the leafs dont

MSmits: in fact the tree is a giant dictionary

MSmits: so basically a perfect TT

ja_fica: I guess you dont use transposition table in the C4 submition

MSmits: nope

MSmits: well

ja_fica: its not worth it

MSmits: the book does

ja_fica: yes

MSmits: but the search doesnt

MSmits: book has 25171 moves in it

ja_fica: unordered_map are much faster but even then it is not worth it because the keys requires to be at least 72 buts

ja_fica: *bits

derjack: buTTs

Marchete: butts :D

MSmits: why 72?

Marchete: so you are near to solve C4, Smits?

MSmits: no

ja_fica: 63+9

Marchete: why didn't you use an standard solver?

MSmits: might not be possible with my setup

Marchete: like pons or fhourstones88?

MSmits: oh, this way i also have an opening book

derjack: do they work for 9x7?

ja_fica: 63 for player0 players 0 for the next move

MSmits: mmh

ja_fica: *9 for the next move

MSmits: not sure how that math works ja_fica

ja_fica: it is enough to represent a unique state

MSmits: my naive expectation is you need 3^63

ja_fica: all you require is p0 board | possible moves

MSmits: oh right, because the rest is filled

ja_fica: yes

MSmits: I store it in a 128 bit datatype

MSmits: you dont need to know who's turn it is btw

MSmits: you can just flip

MSmits: so that it's always player 0's turn

ja_fica: yes, i do that as well

ja_fica: Im trying to compress keys in 72 bits to be able to store more moves

MSmits: btw there are some tricks with TT i could use that I am not

ja_fica: what is TT?

MSmits: transposition tables

ja_fica: Oh, using indexed memery in array is better

Marchete: books are cheating :P

MSmits: for example, if a cell can no longer be part of 4 in a row

MSmits: I counter with: nn's are cheating :P

Marchete: :rofl:

MSmits: say you invent a 3rd type of color

MSmits: "black"

MSmits: all cells that can no longer be part of 4 in a row are black

MSmits: then it doesnt matter which color they really are

MSmits: so you have less possible states

ja_fica: I'm really having trouble to transfer data to CG environment using base 65536

Marchete: why?

ja_fica: You are right

MSmits: I am thinking of redoing my c4 at some point to include black

ja_fica: If well performed it may be possible to fit on a 64bits

MSmits: well i dont know if it will be possible ot do that

MSmits: but you will for sure have less states

Marchete: I use base16k instead of base65536, it seems better

MSmits: that doesnt mean it can be efficiently stored though

MSmits: Marchete sometimes base 65536 is conveneint

MSmits: i can use a single character to store 10x bandas endgame result

MSmits: 3^10 < 65536

Marchete: I assume you seend a binary file, no matter what's inside

MSmits: nope

Marchete: ahh then no

MSmits: i dont even know how to do that

MSmits: i just take out invalid characters

Marchete: for binary base16k compress better for CG

MSmits: during conversion

MSmits: Marchete why is that?

Marchete: empirical tests

MSmits: i didnt mean i didnt believe you

derjack: because family

MSmits: i just meant why :P

Marchete: https://github.com/Agade09/CG-Send-Binary/tree/base65536

Marchete: compressed less than mine

Marchete: because unicode it seems

Marchete: maybe CG treats some codes differently

MSmits: no idea... but that agade thingy is linux only :(

Marchete: maybe it wasn't an extensive test

Marchete: WSL is your friend

MSmits: definitely not messing with VMs if i dont need to

ja_fica: MSmits dont like linux?

Marchete: it's not a VM

Marchete: well it is

Marchete: but it's seamless

MSmits: hmm

MSmits: well i'll check it out at some point maybe

Marchete: just install and it's like a cmd window

Marchete: ezpz

struct: I would try it

struct: my c++ code even runs faster there

Marchete: use WSL2

MSmits: ja_fica i have no preference, but i know windows and i dont feel like devoting any brainspace to learning other operating systems

Marchete: it seems better

struct: so you probably can play more games per sec

struct: faster book

Marchete: yeah, and faster than VS C++

MSmits: how much faster is this?

RoboStac: yeah, a lot of base65536 characters count as 2 on cg because it's utf-32 and cg is utf-16

ja_fica: I never use windows, you can acess bots file and reinstall OS in minutes without losing any files

Marchete: it's more typing typing typing

Marchete: no mouse and such

ja_fica: I have windows because video editing and Visual Studio is a must

MSmits: i like my mouse :)

ja_fica: you have microsoft mouse?

MSmits: yeah VS for sure

MSmits: just a mouse

Marchete: I imagined that, Robo, that's why I always check on codegolf for new encodings

MSmits: It's just that I had to use a ubuntu VM for a class i was doing

struct: hard to say how much faster it is

MSmits: that completely turned me off from VM, what a horror

Marchete: WSL is a breeze

Marchete: trust me

struct: also now with wsl you can have gui

AntiSquid: what did you use MSmits ? running VM every day ...

struct: if you are dont want to do everything from the console

Marchete: heresy!!!!

MSmits: dont remember, it was just crap

MSmits: the university shared some stuff we had to install

Marchete: :cross:

AntiSquid: stopped using wsl, just because i use mainly linux

Marchete: https://docs.microsoft.com/en-us/windows/wsl/install-win10

AntiSquid: i don't run win10 though

ja_fica: Yes, it is linux on windows, it is not as good but problaby is as fast

AntiSquid: is there a LSW ? something better than wine ? :P

AntiSquid: occasionally having headaches with compatibility

Marchete: better than wine? win10 with WSL2

ja_fica: wine is bad

AntiSquid: that complicates things, i rather look for software alternatives

Marchete: I prefer beer, yes

ja_fica: only thing that worked was league of legends and photoshop xD

AntiSquid: anyone heard about win11 btw ?

Marchete: :beers:

BlaiseEbuth: Proton!

AntiSquid: they try to take a bit from every other OS / platform and bring it to windows

AntiSquid: though 10 was supposed to be last OS they release

BlaiseEbuth: Yeah. But they HAVE to put another layer of shit on it.

MSmits: wait what, no more windows after 10 ?

MSmits: that would be so awesome

BlaiseEbuth: That's what they said at 10 release...

BlaiseEbuth: But 11 incoming

AntiSquid: https://www.microsoft.com/en-gb/windows/windows-11

AntiSquid: they went back on their word MSmits

MSmits: :rage:

AntiSquid: why mad? now you can play android flappy birds on your pc without emulator, sort of

MSmits: why would I want to do that

MSmits: mobile games are crap

AntiSquid: and chat on whatsapp with your students

MSmits: it breaks my heart to see how young people "game" now

MSmits: no quality

AntiSquid: and enjoy the limited split screen functionality which is totally not inspired by linux

MSmits: stupid pay to win microtransaction game

MSmits: games

MSmits: it's sad that people prefer free over good

AntiSquid: https://www.theverge.com/2021/6/15/22535123/microsoft-windows-11-leak-screenshots-start-menu

MSmits: it already has leaks?

AntiSquid: probably intentional who knows

struct: even the iso was leaked

AntiSquid: https://www.youtube.com/watch?v=qFCeCPpfnhQ

eulerscheZahl: old story

MSmits: AntiSquid why do you know so much about windows 11

AntiSquid: 1 week = old ok

dbdr: just fork the repo and start creating your own OS: https://github.com/microsoft/Windows11

AntiSquid: not much at all

eulerscheZahl: is that the new "training/easy/Nintendo"?

ja_fica: MSmits, you use uint128_t, tuple, or pair in the keys?

dbdr: it's the new "why would I want to run a secret program as my OS"

Marchete: magic leprechaun bits

MSmits: locally for my meta mcts i dont even use c++ for the meta tree. I use C#. I run C++ processes from the leafs

MSmits: the meta tree can be slow, so i just went for convenience

MSmits: I use a Guid datatype, which is basically just 128 bit

MSmits: as dictionary i use persistent dictionary, which is a really simple option

MSmits: max 2 billion items, but I am no where near that.

MSmits: mmh what is the quickest way to check if 2 binary files are completely equal in c++?

BlaiseEbuth: ==

Astrobytes: OldJohn: Your move sir ;)

BlaiseEbuth: 'Quickest'?

derjack: hm?

MSmits: easiest I guess

BlaiseEbuth: To write

MSmits: but not too slow preferably

BlaiseEbuth: Not to run

derjack: hash?

MSmits: I mean, I dump 1 million integers in a file

MSmits: or maybe 1 billion

MSmits: then i generate them again

MSmits: i want to check if they are the same

AntiSquid: check sum

MSmits: what does that do exactly?

BlaiseEbuth: Yeah probably

Marchete: no

Marchete: don't wait until end

AntiSquid: hash yes whatever you want to call it

MSmits: it cant be approximately the same

Marchete: ifstream A and B

MSmits: it needs to be 100% sure

Marchete: start reading char arrays from both

Marchete: cancel if different

MSmits: they will mostly be the same though

MSmits: if all goes well

AntiSquid: why would you use anything else ? you use checksum to make sure the file you downloaded is the one you intended to and not some modified one

Marchete: or easy mode as AntiSquid says

Marchete: delegate on some hash

Marchete: and check that

Marchete: is slower thought

MSmits: no idea how that works, what you just described is easy mode to me

MSmits: reading from the file and check for equality

Marchete: certutil -hashfile <file> SHA512

Marchete: it seems google says that option

AntiSquid: it's definitely slower to compare every bit

dbdr: it's slower to compute a hash/checksum

MSmits: but if you dont compare every bit, how do you know if every bit is identical?

dbdr: exactly

AntiSquid: really dbdr ? maybe depends on use case

Marchete: https://stackoverflow.com/questions/15118661/in-c-whats-the-fastest-way-to-tell-whether-two-string-or-binary-files-are-di/15119347

Marchete: or stackoverflow

dbdr: comparing is the fastest, esp if they are different, since you can stop early

Marchete: the source of copilot's code :D

Marchete: first check file size

Marchete: as someone suggests

dbdr: hash will use additional math operations, which are slower than a comparison

MSmits: file size will always be the same

Marchete: or not

dbdr: then assert file2.size() == file2.size()

MSmits: I am randomly generating 1 million D&B boards, solving them and then running a solver with pruning, to check if the pruning doesnt change the value

dbdr: well, with file1 too :D

MSmits: it's sometimes hard to see whether the pruning is "lossless" in D&B

MSmits: stuff gets complex

dbdr: D&B is a perfect game to lose your mind ;)

MSmits: yeah

Marchete: I started it

Marchete: with a lot of graph magic

MSmits: you did the functional programmign version

Marchete: loops chains, etc

MSmits: seemed interesting

Marchete: then got bored and never finished it

MSmits: i stopped when i beat the crazy remi

Marchete: my hash was from functional

Marchete: so it accepts rotation, mirror

Marchete: or anything that doesn't change graphs

derjack: youre still 2nd

MSmits: yeah

MSmits: i know what the nr 1 does

Marchete: what he does?

derjack: meth

MSmits: to beat everyone yes

Marchete: beat everyone else?

MSmits: he;s counting chains

Marchete: that's all?

MSmits: which is a much cheaper way to guarantee winning nim game

Marchete: pfff

MSmits: but he loses sometimes still

MSmits: because its not a perfect way to play

MSmits: makes some assumptions

MSmits: https://www.codingame.com/replay/529653167

Marchete: like what kind of assumptions

MSmits: he thinks he won this, but thats because he won the chain counting game (nim), but not the box game

MSmits: the larger the dimensions, the more important nim game becomes

MSmits: 7x7 is pretty large

MSmits: you get long chains and such

dbdr: D&B 3D?

MSmits: so it almost always works

Marchete: my graphs did pretty well with long chains

Marchete: but too lazy

MSmits: yeah to solve it, but he does some kind of search

MSmits: maybe mcts

MSmits: like randomly finish to endgame and then count chains

MSmits: or something

Marchete: mcts until you reach a count chain game I guess

MSmits: yes

MSmits: this would increase the likelyhood of you getting a favorable endgame

Marchete: but I disagree about "randomly"

MSmits: it's like competing with mcts vs mc

Marchete: there are rules

Marchete: like chain length etc

MSmits: well random while avoiding loony moves is all

MSmits: dont give away boxes for no gain

Marchete: if you categorize some chains

MSmits: yeah I know. I use these simple 1's:

MSmits: http://chat.codingame.com/pastebin/4f48e23c-2c5d-4314-8bfa-e47d6b1b0891

MSmits: and then for complex structures i have a uint64_t box map

MSmits: this is basically a graph

MSmits: i disconnect and reconnect stuff while solving with ab minimax + TT

MSmits: well the boxmap corresponds to arrays of strings and joints too

MSmits: (strings are non-grounded chains)

MSmits: so much D&B lingo, it's even used differently between papers, quite confusing

dbdr: it's a conspiracy

MSmits: sometimes a long chain is 3+, sometimes 4+, sometimes a loop is a closed chain

MSmits: etc.

dbdr: long long chain ;)

MSmits: or that

dbdr: long_chain_4_t

Marchete: some example of my chains output

Marchete: http://chat.codingame.com/pastebin/11351ff2-fe16-46cb-b9d1-dc36f55a0a40

MSmits: is this exactly like the FP paper in Haskell?

Marchete: I can't remember

Marchete: I categorize by ground chaing, loops, 3 way, daisy? or whatever was called

MSmits: http://chat.codingame.com/pastebin/e3ee47e1-9b88-4177-bddd-0da68c6248d7

MSmits: a link is a connection between joins and a join has at least 3, sometimes 4 links

MSmits: i dont have any of the simple objects in my graph, they are just a number

MSmits: so like I have 2 3-chains or 5 long chains

Marchete: I also remember I had some autocuts for reduce intermediate steps that are just "free" for one of the players

Marchete: and such

Marchete: but still not a search

MSmits: btw if the map has only simple objects you dont even need a search

MSmits: you can just calculate the value

MSmits: and the best move

Marchete: I don't have it yet

Marchete: I need that calculation

Marchete: but I know it can be done

MSmits: I dont mind sharing that, it's a bit complicated though

Marchete: share then :D

MSmits: allright, sec

MSmits: https://pastebin.com/EZmnSumD

MSmits: mind you, only 0,3% of all endgames contain only simple objects on a 7x7 map

MSmits: so 30 out of 1000 ( i tested)

MSmits: what i do is, i search until all complex objects are gone

Marchete: I know

MSmits: and then i lookup using this function

Marchete: yes, it's for that point

MSmits: the comments "corollary" refer to the paper i dug through

MSmits: i used the resulting formulas

MSmits: so you can check it yourself with the paper

MSmits: it makes no sense from just the code

MSmits: and even with the paper it will not make much sense, but at least you can check it :P

Marchete: I've read all these papers

Marchete: I just didn't coded the simple object solver

MSmits: I checked the formula from hundreds of games on the leaderboard, predicts perfectly

Marchete: nice

Marchete: thanks!

MSmits: i found 1 error in the paper

Marchete: I can share you a NN bot, but shhhhh!

Marchete: it's a secret!

MSmits: yeah i got that

MSmits: thats the only reason i share this now :)

Marchete: what bug?

MSmits: oh, its a definition of modulus

MSmits: they assume somewhere that { 2, 4 } is what you get when you do mod 4 and take the even results

MSmits: but that's { 0, 2 } ofc

MSmits: it's a bit weird

Marchete: I got fun creating the graphs, identifying structures and such

Marchete: but got bored at search

Marchete: maybe I'll retake it someday

dbdr: MSmits it's just math convention 0 == 4 (mod 4)

Marchete: maybe while NN training of a future C4 bot :D

MSmits: really? I never knew dbdr

dbdr: so you can call it 4

MSmits: well that explains that then

dbdr: in math mod is not a function, it's a relation

MSmits: the fun for me in D&B is taking the solver and adding all sorts of checks to fix the order of opening chains and such so that it becomes faster.

MSmits: ahh ok

MSmits: been a while since i came across that for work

Marchete: opening chains by type, then by order

Marchete: it's not that hard with graphs

MSmits: well it's not hard with simple chains and loops

KiwiTae: BlaiseEbuth hell o/

MSmits: try it with complex objects

MSmits: like a join with a 1 chain, a 2 chain and 2 long chains

Marchete: that' the role of MCTS/search

Marchete: but on a 3-way

Marchete: I know where to cut

MSmits: how would you know

MSmits: say it's a 1, a 3 and a 6

MSmits: connectd

MSmits: it seems like it would have to be the 1

MSmits: but I checked it and sometimes it's not

Marchete: I know that I have a 3-way with the lengths of each arm

Marchete: or if grounded

MSmits: say all 3 are grounded

MSmits: 1, 3 and 6 connected to 1 join

Marchete: the one that makes the remaining long chain the longest for me

BlaiseEbuth: Hell KiwiTae \o/ But why ?

KiwiTae: to distract you while you clash ~

MSmits: Marchete you would think so, but sometimes it seems it's better to open the 3. If you already know you cant gain control due to other objects on the map

MSmits: taking the 3 forces the opponent to give up 2 boxes to keep control

MSmits: so you still wont get control

BlaiseEbuth: I don't, so you are going to have a hard time :p

MSmits: but you will have 2 more boxes

Marchete: maybe you are right

MSmits: i am not 100% sure, but there are a ton of exceptions like this

Marchete: but as I know arm length in 3 way chains

Marchete: it's a matter of calculation

Marchete: I don't think so

MSmits: btw, you are 100% correct that it's better to take shorter chains first if they are all 3+

Marchete: Imo it depends on ground

Marchete: or if a three chain is loop + ground chain

Marchete: but a simple 3 way with all grounded

Marchete: I think it's solvable and direct

Marchete: anyways I wasn't at that point, or I forgot

MSmits: I am not 100% sure, before i was getting different results if i made assumptions there. But I had 1 bug jrke spotted for me, maybe i should try it again

Marchete: you are 2nd

MSmits: it's not about the rank :)

Marchete: I'm pretty sure you studied better than me

MSmits: oh ok

Marchete: but my graphs were beautiful

MSmits: yes, i went nuts on this game

_dhiva_: nuts?

MSmits: well codewise your graphs are probably prettier

Marchete: codewise I doubt it, but as board representation they are

MSmits: ah well then mine are beautiful too :)

Marchete: :S

MSmits: I still struggle with repeated code

MSmits: after all those years coding

MSmits: sometimes i have a function and another function is almost exactly the same except for 1 line in the middle somewhere

MSmits: it's annoying

Marchete: http://chat.codingame.com/pastebin/1a37d329-ceb8-48d3-8b62-862c2bf989e0

Astrobytes: Refactoring can be annoying but it's often helpful ;)

MSmits: ohh strings and coins :)

Marchete: aye

MSmits: thats not an endgame i think though?

Marchete: no

MSmits: Astrobytes yes, but sometimes it's just very hard

Astrobytes: That too :)

MSmits: one thing that always seemed annoying is when i have a minimax and it's split up over many functions and I need to get the best move out of it

MSmits: the value is easy, thats returned from the base negamax function

Astrobytes: there are multiple ways of doing that

MSmits: yeah but usually just copy all the functions and add in some way to get the best move

MSmits: but thats a ton of duplicate code

MSmits: the move thingy is just for the depth 0 version

MSmits: the rest runs the simpler version

Astrobytes: you can iterate over available moves and score each one, bestMove can be a pointer etc etc

MSmits: well thats the thing, i do score each one, but i dont get the best move, because i dont need it

MSmits: and a move in D&B is a very complicated thing

MSmits: it's picking a simple chain or a graph object

Astrobytes: yeah for D&B, I don't like that game

MSmits: so i dont want a bunch of ifs in every call of my negamax

MSmits: just because i need to get the best move for my depth 0 layer

MSmits: so i end up duplicating everything with a slight modification to get the best move, it's so ugly

MSmits: I wonder if there is some way to use the ifs without loss of performance, some const ?

MSmits: say you give the bool depth == 0 as a const to the function?

Astrobytes: you can pass in some parameter I guess

Marchete: templates

Astrobytes: Yeah, you could template it

Marchete: but I don't think that's possible

MSmits: how would this work in templates Marchete, i only know how to use them with different types

Marchete: but a template remove if's

MSmits: hmm ok

Astrobytes: might be workable, templates are voodoo

Marchete: what do you want exactly?

MSmits: I want at depth 0 to run a negamax that finds the best move and at higher depths i want to run the exact same negamax but it ignores the moves (just gets the best value)

dbdr: MSmits one thing you can do is keep track of the principal variation as part of negamax. that can be useful for move ordering

Astrobytes: ^

dbdr: and it gives you the best move

Marchete: do you use some bool to difference it?

Marchete: then add it as a template<bool>

dbdr: it's also nice for debugging / investigating

Marchete: with <false> for one thing

Marchete: and true for the rest

Marchete: same code

Marchete: but that conditional is "solved" at compile time

MSmits: dbdr i dont have move ordering because it's not iterative

MSmits: but sure for investigation is great

MSmits: Marchete that seems a great solution

dbdr: move ordering helps perfs a lot

MSmits: yes but it's a solver

dbdr: by increasing the cuts

MSmits: how would it use move ordering when it only ever visits a node once

MSmits: and then uses TT to look up the value if it visits again

MSmits: (and immediately return)

dbdr: it's the order you visit the children

MSmits: yes but you dont visit the children again

MSmits: it's a solver, not a minimax search

MSmits: so i visit once, store the value and next time i get to the node i already know the answer

MSmits: if it was iterative, then next time i would go to greater depth

dbdr: I thought you were talking about minimax in general, and the problem of depth 0

MSmits: well i guess i was yes, sorry. I have my D&B solver in mind too much :)

dbdr: :)

Marchete: https://tech.io/snippet/SMNAOnE

Astrobytes: that's what I thought too tbh

MSmits: yeah i was unclear. It's true yes I do use TT with move ordering and such in some cases

MSmits: and then it doesnt matter, indeed

dbdr: SMNAOnE, could be a hash, could be the acronym of the lastest search algorithm ;)

Astrobytes: lol

MSmits: that's great Marchete

MSmits: this will shave off like 300 lines from my D&B bot :P

Astrobytes: you didn't know about that MSmits?!

MSmits: i did have templates in the back of my mind and that they could do stuff like that. I just never went into it much. Only time i used it was for different datatypes

MSmits: say a function that accepts 32 bit or 64 bit

Astrobytes: Sure, they're really handy tbh

MSmits: yeah, but it's also a higher level of thinking

MSmits: not trivial :)

dbdr: f(int bits, uint$(bits)_t data)

Marchete: as I said, don't worry about that conditional, it's done at compile time

MSmits: whats that

Marchete: so it's performant

MSmits: yeah, thats what i was hoping for Marchete

dbdr: i'm trolling. it's kinda dependent types, earthly languages don't support that

MSmits: oh ok

dbdr: types that depend on values

MSmits: well could have convinced me

dbdr: C++ is crazy enough :)

MSmits: from the fact that there is no mention of swag on your profile, i conclude you didnt win the contest? What rank did you end at?

dbdr: #3

dbdr: so technically I'm a winner :)

MSmits: yeah

MSmits: it's not a bad result, too bad about moscow

MSmits: what was the prize for 3?

dbdr: yeah, no worries, was fun, moved on :)

MSmits: it was the swag bag wasn't it

MSmits: maybe I jinxed it

dbdr: "We will be in touch shortly regarding your prizes."

MSmits: i wonder how often people dont get their prizes with these contests

Astrobytes: Hopefully they're faster than RAIC lol

MSmits: euler is still waiting for a robot

dbdr: that bot is waiting to solve C4

eulerscheZahl: no, i'm not

eulerscheZahl: i wrote that one off

eulerscheZahl: waiting for 2 tshirts, 1 hoodie and a smart watch still

MSmits: damn

Marchete: lol I got a better prize for solving Numbershifting :rofl:

eulerscheZahl: indeed, 130€ refund :D

MSmits: huh?

MSmits: did you have a prize euler?

Marchete: indirect prize

Marchete: not him

MSmits: oh

Marchete: I can't tell

dbdr: blackmail money

Marchete: crypto money :D

MSmits: ahh NDA huh

eulerscheZahl: but can I tell marchete?

Marchete: nope

Marchete: :D

eulerscheZahl: :(

dbdr: yes

Astrobytes: awww, you've piqued our interest now

eulerscheZahl: if he says no, i respect that

eulerscheZahl: and you know how hard it is for me to keep anything to myself

Astrobytes: :D

Marchete: not really

eulerscheZahl: keeping tryangle catch secret was a torture for me

MSmits: I can see that

Marchete: I don't know it

MSmits: wow VS is making demands on me if i use templates

MSmits: "provide template sample arguments for intellisense"

eulerscheZahl: parsing error. if => when?

struct: ignore it

dbdr: pushy

MSmits: what is this magic euler?

eulerscheZahl: "wow VS is making demands on me if i use templates" did you mean "wow VS is making demands on me when i use templates"

**eulerscheZahl struggles to understand your sentence

MSmits: ohhh

MSmits: the 2nd

Astrobytes: If you see euler do "parsing error" you must clarify or correct your statement

eulerscheZahl: in German we have "wenn" for both "if" and "when" is it the same in dutch?

MSmits: hmm there is some confusion in Dutch also, but maybe it's different

MSmits: "als" = "if"

MSmits: "wanneer" = "when"

MSmits: but they are used interchangably sometimes

eulerscheZahl: as a German I would expect "als" to be "when"

eulerscheZahl: als is a German word too

MSmits: it has a different meaning in Dutch also

Marchete: my example worked on tech.io MSmits

MSmits: when you say "I am just as rich as you

Marchete: I can't tell on VS

MSmits: the "as" is also "als"

Marchete: but seems simple

MSmits: the 2nd "as"

MSmits: so it's also a comparative word

MSmits: and a conditional

MSmits: very confusing I guess

MSmits: Marchete yeah, does forward declaration work the same with a template?

Marchete: forward?

MSmits: i only ever use fw declaration when i have to in c++

MSmits: thats when you declare a function first and later specify it

MSmits: because c++ cant read ahead like a non-handicapped programming language :P

MSmits: i generally just put stuff in the right order so i dont have to do it

MSmits: but when a function is recursive you kinda have to

Marchete: ahh

Marchete: I think it works the same

MSmits: kk good, thanks again, this is nice

MSmits: hmm so the compiler derives all the possible functions you are using by looking at the code

MSmits: so you could easily create thousands of functions this way and trip up the compiler

MSmits: with a bool it's easy, but if you used an int...

Marchete: check recurs_e's postmortem for Code4Life

eulerscheZahl: reverse RNG seed?

Marchete: yes

Marchete: extensive use of templating

dbdr: MSmits it's creating the versions of the function when they are called

dbdr: so only those actually used

dbdr: and the argument must be a constant

Marchete: yes, it must be a constant

MSmits: yea that makes sense

MSmits: yay my bot went from 2.9k lines to 2.6k lines :P

struct: Do people prune actions while expanding on bt?

MSmits: dont but my bot is weak

MSmits: I dont

eulerscheZahl: yes, with a prune array

dbdr: what's bt?

struct: breakthrough

dbdr: aha :)

dbdr: http://chat.codingame.com/pastebin/331922b3-d5a3-46f9-8c68-d67d05eecd90

eulerscheZahl: i had to learn that too

struct: do you use mcts there dbdr?

eulerscheZahl: and i still hate acronyms

dbdr: yes struct

dbdr: I'm not sure I prune though. that's an old bot

struct: still it seems strong

MSmits: dbdr is this mcts with eval?

Default avatar.png Ninjapig28: :rage:

MSmits: who would have thought, my D&B bot crashes when I paste it into C4 IDE

eulerscheZahl: no, i would expect it to crash only when you hit "play"

MSmits: lol ok

MSmits: the annoying thing is me going over the code for several minutes trying to figure out why :)

jacek: i dont 'prune'. just prove win/loss earlier

darkhorse64: jacek: are you using NN eval + mcts, or MM ?

jacek: MM?

struct: minimax

jacek: minimax? what year is it?

jacek: i use mcts + NN

darkhorse64: I asked the question because MM could be more efficient in endgames for finding winning combinations (transpositions, quiescence search)

darkhorse64: thanks

Redlin_Kirill: automaton2000

Automaton2000: could the validators in the repo not have been in a convenient format ffs...

Marchete: lol minimax is so 2019

Marchete: mcts is so 2020

DomiKo: NN is so 2021?

Marchete: indeed

struct: whats next

Westicles: quantum calabi yau nets

dbdr: MSmits, no, rollouts, with some endgame lookups

MSmits: ahh ok

dbdr: hey _Royale, in sub in oware :)

MSmits: man... Marchete created a monster

Marchete: who? royale?

Marchete: I'm not sure it's NN

Marchete: maybe it's books

MSmits: pretty sure its NN

MSmits: oware booking is particularly hard

Marchete: but dbd_r and jolindie_n are :D

Marchete: dbd_r with just 2hrs of training

Marchete: that seems pretty good

MSmits: why are you avoiding dbdr ping

MSmits: he's here :P

Marchete: but then he is using a C++ packer

Marchete: C#, Rust and C++ packers now :D

MSmits: nice

Marchete: I avoid 3rd party pings

MSmits: aha

MSmits: but hey, you guys helped me beat re curse I suppose :P

MSmits: I am above 2 NN's at least

MSmits: I feel good about being among the NN bunch

dbdr: 'Curse is NN?

BlaiseEbuth: jolindien, dbdr and reCurse you mean?

MSmits: yes dbdr

Marchete: but MSmits you are being condescendent

MSmits: he never wrote a normal bot for oware

Marchete: your counterbook can wreck any NN bot

Marchete: at least most of us

dbdr: normal :D

Marchete: that are very deterministic

MSmits: but i didnt counter you or jolindie n

Marchete: because you don't want to

_Royale: dbdr: haha you should see me a lot I am spam submitting ;-)

MSmits: thats true

Marchete: it's NN _Royale?

_Royale: Marchete: it's NN

MSmits: well also i would eventually run out of codespace with so many NN's

Marchete: I'm intrigued

Marchete: :D

Marchete: thanks, I was very curious

Marchete: damn, 41+ score :(

MSmits: _Royale is it mokka or your own version?

_Royale: I was using NN before but only for the value, recent posts in the forum motivated me again (reCurse PM, robostac, Marchete, etc) thank you guys

MSmits: ohhh it was already NN

Marchete: but jace_k uses value only :D

Marchete: good to know

MSmits: jace_k is pretty specialized though

MSmits: he had a LOT of practice

MSmits: so the method can be inferior while the implementation is superior

Marchete: I had zero practice yet I pulled it a good bot

Marchete: against all odds

MSmits: the odds were not so bad, only you think so :)

MSmits: I had complete confidence

_Royale: MSmits: my own version

dbdr: it's pretty intimidating at first

Marchete: you said to try a simpler thing

dbdr: many moving parts

Marchete: and I insisted on that

MSmits: of course, because you were frustrated

MSmits: it helps to do simpler things

Marchete: I still have sign problems

MSmits: gives you feeling of success

Marchete: I struggled a lot and left it "when it worked"

MSmits: yeah and now we can skip a lot of your issues, it's nice

MSmits: oware is a proper NN testbed now

Marchete: or improve them

dbdr: //NOTE: I had soooo many problems with the signs, I won't touch anything because it seems to work right now. //NOTE: This failed..... //if (idToPlay == 0) //nVal = -nVal;

Marchete: lol

Marchete: I manually had to bypass the NN and add the heuristic eval

Marchete: then check MCTS tree, samples, etc etc etc

Marchete: a mess

dbdr: I was wondering if you tried submitted the bot wth just the score as eval

dbdr: to check the NN is actually clever ;)

Marchete: if any of you can fix that part (replay buffer -> sample -> train -> Select)

Marchete: I'll be happy

Marchete: no MCTS?

dbdr: what's broken?

Marchete: signs

dbdr: MCTS, with score instead of NN

Marchete: I tried to use heuristics, yes

dbdr: basically value NN -> linear function of score

Marchete: but the policy part doesn't worked fine with children's scores

dbdr: is there a combination of policy and visit counts to chose children?

dbdr: did not check that part yet

Marchete: I just tested that, eval parent + all children

Marchete: and normalize children scores as policy

Marchete: maybe I did the sign wrong

Marchete: but didn't worked out

Marchete: "it should work" but I was tired of signs

jacek: so score didnt work, -score didnt work, but --score worked?

Counterbalance: relu or tanh?

dbdr: just brute force all the signs ;)

_Royale: I was naive and thought NN would mean less magic numbers to tune... now I have even more parameters to adjust and I don't understand most of them :D

Marchete: I'm in the same boat

Marchete: luckily NN's can learn without CGBenchmark, it seemed crippled

Marchete: I got limited even with simple tests on IDE

BlaiseEbuth: _Royale and Marchete are in a boat...

Marchete: :ship:

struct: petition to ban NNs!

Marchete: and minimax and mcts too!

Marchete: pure if only

dbdr: branchless

jacek: and no classes, only structs. dont hide anything

dbdr: Save Model gen0038.h5 ./CGZero pitplay 6 400 gen0038 2.0 0.0 2.0 2000 0.03 1.0 0.0006 0.02 0.45 0.55 10 5 gen0036 2.0 0.0 2.0 2000 0.03 1.0 0.0006 0.02 0.45 0.55 10 5 [1] 252222 killed ../src/cgzero

dbdr: murder!

struct: you are also doing NN dbdr?

dbdr: yes, playing with Marchete's cgzero

dbdr: hm, it looks to me like draws are just ignored in oware

dbdr: ah no, maybe just lb lag

Marchete: they aren't ignored, trust me

dbdr: :D

Marchete: with almost no losses I was 3rd...

dbdr: well, it could be, if you mostly draws, you have very few games, so your uncertainty is high, so you are ranked low

Marchete: and I agree, but losing a lot it's noticeable

Marchete: drawing*

Marchete: why it was killed dbdr?

Marchete: a bug?

AllYourTrees: one thing i did find was using policy + value together is a big improvement over just value. since the policy scales the exploration term of MCTS, having a good policy can make you search only the important nodes

dbdr: no idea

MSmits: I convinced that occasionally some of these NN's play perfectly. If it is deterministic and your bot is also, you might just draw all the time

Marchete: it's like actor critic bots

Marchete: they worked better than a single "score" bot

RoboStac: jacek doesn't believe in policy though and is managing to hold second place

Marchete: we need one heretic too

MSmits: well oware might be a game where the use of policy is only a small advantage. Since jace k spent a lot of effort on this bot, that could explain why he's 2nd

MSmits: even with a less effective method

Marchete: just 0.14 diff

Marchete: not that much

RoboStac: he's fairly consistently in the top amongst many games though

Marchete: but yes

Marchete: he holds nicely

Marchete: jacekmax is good too

MSmits: i dont have doubts about his value method

MSmits: but i do have doubts about jacekmax vs ept

Marchete: me too, but for me I tested both and jacekmax worked better for me on oware

MSmits: just taking the maximum seems dangerous, nn evals arent always accurate and averaging should help

MSmits: oh, ok

MSmits: well empirical evidence trumps all

Marchete: averaging is important in Alphazero

Marchete: I'm sure I have a lot of noise in NN prediction

MSmits: wait i am confused, your current bot uses jacekmax?

Marchete: mcts rollouts helped

Marchete: no, I mean

Marchete: before NN I tested jacekmax with heuristic eval

MSmits: nn and jacekmax are not mutually exclusive

Marchete: also mcts-ept

AllYourTrees: whats jacekmax?

Marchete: the former gave better results

MSmits: not for me

MSmits: i also tried jacekmax on oware. I got a similar ranking, maybe slightly more losses

jacek: for me jacekmax works better in some games, in the other the ept is better

MSmits: Marchete , afaik jacek means he uses this in concert with his NN

jacek: eeyup

Marchete: I know

MSmits: and you use a form of EPT (whatever azero does)

MSmits: azero is kind of EPT

Marchete: but I never tried too hard the NN on jacekmax, I went Alphazero

AllYourTrees: 0 turn ept? :D

MSmits: yes

MSmits: very early :)

Marchete: because jacekmax need to simulate parent + children

Marchete: it seemed more expensive

Marchete: maybe it's not

MSmits: btw AllYourTrees jacekmax is just backpropagating max value instead of averaging node value

jacek: welp you have at most 6 children in oware

MSmits: so it's like a minimax where the tree gets deeper for good moves

AllYourTrees: ahhh kk

jacek: https://www.codingame.com/playgrounds/55004/best-first-minimax-search-with-uct

MSmits: if was super easy to adapt a mcts ept to jacekmax

MSmits: it

MSmits: just had to change the selection and backprop i think

MSmits: but params will not be fitted equally well, it's a different method after all

Daporan: Anyone hyped for the contest tomorrow?

MSmits: dapo!

jacek: contest?

dbdr: contest?

MSmits: lol

Marchete: contest?

struct: its not a standard cg contest

MSmits: Daporan just accidentally created a bunch of opposition :)

struct: is escape contest

struct: :p

Marchete: ahh

MSmits: i wont be joining, but wish you the best of luck Daporan

dbdr: last minute escape?

Marchete: but there isn't any prize, no?

struct: dont think so

Daporan: Isn't the goal to be as fast as possible?

jacek: your wife must be dissapointed

struct: yeah but its not the typical cg contest

struct: its like an escape room

MSmits: wait who's wife, now I am confused

struct: and you need to do barelly any coding

MSmits: hmm, anyone here who can barely do any coding?

Marchete: I'd say me

MSmits: you go escape then :)

Marchete: if you see any contest result...

MSmits: contests are not just about coding

MSmits: you need obsession and time as well :0

MSmits: I usually have the 2nd, but not as obsessed as i once was. It's pretty obvious in my contest results

Daporan: And maybe nootropics

eulerscheZahl: does the "contest" even have a leaderboard?

MSmits: had to google that, but yeah Daporan :)

dbdr: Marchete, if I just delete gen* but keep traindata, the samples will be reused, right?

Marchete: I'd say yes

Marchete: but I usually wipe all

Marchete: gen*, traindata and pitresults

Marchete: remember to delete pitresults

Marchete: if I keep traindata is to manually retrain it

Marchete: not with the normal loop

MSmits: what does manually mean?

MSmits: in this context?

dbdr: pen and paper

Marchete: lol

dbdr: when you get bored...

MSmits: oh right, for when sun is out and the cpu needs to cool

Marchete: I mean on jupyter notebook

Marchete: but on new lines

Marchete: not changing generations, saving each N loops

Marchete: things like that

Marchete: Like

Marchete: while True: http://chat.codingame.com/pastebin/64a4f5ec-d5ba-4eea-9ed4-0e4284ede786

Marchete: this is for taking samples and train, but not changing generations

Marchete: just copy lines from above

Marchete: doing only what you need

MSmits: so your learning rate slows down

MSmits: reduces

BugKiller_328: hi, everyone, how to fix this error ?

BugKiller_328: `identifier "__builtin_ia32_pdep_si" is undefined`

jacek: use pragmas

MSmits: hey what does that buiiltin do

jacek: add to the top

jacek: #pragma GCC optimize "Ofast,omit-frame-pointer,inline,unroll-loops"

  1. pragma GCC option("arch=native", "tune=native", "no-zero-upper")
  2. pragma GCC target("rdrnd", "popcnt", "avx", "bmi2")

struct: its pdep for 32 bits

MSmits: oh, what i am using is just an alias then?

Daporan: Where is that code from Marchete?

MSmits: it looks different

struct: yes _pdep_u32 returns __builtin_ia32_pdep_si

MSmits: aha

Marchete: github Daporan

BugKiller_328: I've added this at the top

BugKiller_328: #include <emmintrin.h>

  1. include <immintrin.h>
  2. include <smmintrin.h>
  3. pragma GCC target("avx","popcnt","bmi2")

struct: prama before includes

Marchete: https://github.com/marchete/CGZero Daporan

MSmits: Marchete wrote azero for CG and freely shared (Excepting the training part and network layout)

darkhorse64: For every access to that repo, I lose one place in the Oware leaderboard

MSmits: well not just you darkhorse64 :)

dbdr: unless it's you who accesses it

Marchete: every github clone, it kills a darkhorse

MSmits: hehe

darkhorse64: :sweat_smile:

jacek: BugKiller_328 add pragmas above includes

jacek: as first lines

BugKiller_328: pragmas line doesn't need ; at the end ?

BugKiller_328: I still have problem. :(

struct: nope

BugKiller_328: I'm running on Visual Studio 2019

struct: ah

BugKiller_328: and I still have problem..

struct: you need to enable some thign I think

BugKiller_328: how ?

struct: project properties

Daporan: Are the bots on the lb then differentiated due to different training method and nn architecture or have you made further improvements Marchete?

struct: https://i.imgur.com/pgh8X2b.png

struct: also those pragmas have no effect on msvc

darkhorse64: on vs, you need #include <intrin.h>


struct: didnt know that, I usally use immintrin.h

Marchete: use immintrin

MSmits: Daporan Robo, jace k and agad e are of different type. I think the other NN's are currently derived from Marchete's github

MSmits: oh and re curse also

Marchete: I made some improvements

Marchete: not on github

Marchete: not very much

Marchete: robo, jacek, recurs_e, Adag_e and royale are different

FalINTOblivion0112: im such a noob lol

MSmits: i am not sure if royale said his was different. He said he already had a NN, but started over. Not sure if he used mokka for that, but i thought so ?

Marchete: he said is different

MSmits: hmm ok

Marchete: he just saw the policy part

Marchete: and attempted it

MSmits: ahh ok

MSmits: well I will copy most of your stuff when i get around to it, but will modify to get my own weird cocktail using endgame books and scoreless states

MSmits: oh wait no, it will be more different because no policy

dbdr: scoreless states?

MSmits: yes, this is when the score is not part of the nn, but is instead added to the inferred result

Marchete: this isn't just some samples?

Marchete: I mean

Marchete: if I'd do RL

dbdr: from playout?

MSmits: from nn "lookup"

Marchete: Id just "create" samples with values and policies

MSmits: you multiply by 32 or 48, then add current score

Marchete: from your meta mcts

MSmits: yeah that could work as well Marchete

MSmits: i am not 100% sure yet what i will try, maybe several things

MSmits: the reason i would like scoreless states is that the "best move" that maximizes score is not dependent on past captures

MSmits: so in some sense you simplify the network without losing information

Daporan: cool work Marchete

Marchete: :thumbsup:

MSmits: Daporan did you get into machine learning for contests or otherwise?

Daporan: yes

MSmits: ahh ok, you didnt for the pod racing contest you won a few months ago

MSmits: right?

MSmits: I thought that was just uct forest

MSmits: which you can technically combine with ML

MSmits: (this was done on csb)

Daporan: I thought it would be easier for me to do well without, though I considered it

MSmits: it's a big gamble anyways

MSmits: btw Marchete: https://www.researchgate.net/publication/236661788_Playing_simple_loony_dots_and_boxes_endgames_optimally

MSmits: thats where my "corollaries" and such come from, for the solver

MSmits: just look at the results, not the proofs, unless you want your brain to hurt

MSmits: dbdr, these two draws:

MSmits: https://www.codingame.com/replay/568674079

MSmits: guess how deep my book went there

dbdr: all the way?

MSmits: frame 56 and I never tried to counterbook you :P

MSmits: there really arent that many good branches i guess. Small branching factor, only 1 or 2 good moves per turn. Makes for really deep books even if not counter books

dbdr: do you target your book at specific situations? or just let your metamcts run longer?

MSmits: when i was countering the other NN's i was focusing through their chosen nodes

MSmits: other than that i just let it run for longer

MSmits: it could just be that you're copying the behavior of other NN's without trying

MSmits: and i already counterbooked those a year ago.

dbdr: :)

MSmits: 4 draws in a row, yeah seems fishy :P

jacek: daFishy

MSmits: 6 draws now :)

jacek: see, within few hours of training he learned your book

MSmits: I am guessing you play the same game over and over

MSmits: lol!

dbdr: :D

MSmits: it's definitely more efficient

jacek: cgzero doesnt use any randomness during play?

dbdr: there is dirichlet_noise_epsilon

dbdr: so it can at least

MSmits: all games are either 118 frames or 76 frames depending on who is player 1

MSmits: so i am guessing you are playing exactly 2 different games vs me

jacek: dbdr but only in training?

dbdr: just won one :)

1zanie: hello world

FalINTOblivion0112: my programming skills are kinda sus

dbdr: jacek, that one is zero by default, but _dirichlet_noise_alpha isn't

MSmits: the one you won only got to frame 9 in the book

FalINTOblivion0112: some of the reverse ones are so sus

BlaiseEbuth: sus ?

MSmits: superior and sassy

BlaiseEbuth: :thinking:

MSmits: yeah it's weird, almost like someone made it up

jacek: https://i.imgur.com/K3yxE5U.jpeg

MSmits: that doesnt help :)

dbdr: really? to me it's perfectly sus

MSmits: does it mean suspicious?

MSmits: it doesnt fit FalINTOblivion011 2's usage of it

MSmits: but then again i think he just likes to say it

jacek: google among us eh

BlaiseEbuth: That doesn't tell us why reverses are sus...

FalINTOblivion0112: yeah i like reverse

BlaiseEbuth: I don't like games where social interraction is needed.

BlaiseEbuth: Probably because I don't like social interractions.

BlaiseEbuth: And that is probably because I don't like people.

jacek: or games

Aylenor: yea I agree people suck

Marchete: dirichlet is mainly for training

Marchete: on submit there is less noise

Marchete: on final best move selection it was:

Marchete: https://github.com/marchete/CGZero/blob/master/src/CGZero.cpp#L1560-L1580

Marchete: then a mostVisited = goodMoves[ rnd.NextInt((uint32_t) goodMoves.size())].first;

Marchete: it seems it barely works

Marchete: there aren't similar enough scores

dbdr: for (auto& rootNode : rootNodes)

dbdr: there are several roots?

dbdr: :thinking:

Marchete: and some value noise

Marchete: https://github.com/marchete/CGZero/blob/master/src/CGZero.cpp#L1800-L1804

Marchete: there aren't

Marchete: it comes from smitsimax :D

dbdr: lol

dbdr: it's like our useless DNA

Marchete: ...or not

Marchete: who knows :D

Marchete: I think Alphazero doesn't invalidates smitsimax

Marchete: invalidate*

Marchete: you'll see tons of useless code like that

Marchete: btw thanks for pushing me up

jacek: :E

Marchete: :grin:

dbdr: least I can do ;)

FalINTOblivion0112: shortest code go brrrrr

Marchete: I'm pretty sure you can use it as reference and make a much better bot

Marchete: gotta go

Marchete: cya

dbdr: :wave:

Illedan: :wave:

Color-Coder: hi

FalINTOblivion0112: the clash of code i played was so stuip

FalINTOblivion0112: i got the answers correct but it would accept

BlaiseEbuth: stuip this time? :thinking:

FalINTOblivion0112: now i have the solution

Astrobytes: stuip sus clashii

FalINTOblivion0112: lol

FalINTOblivion0112: but i didnt say clashii

Astrobytes: Correct. I did.

FalINTOblivion0112: thats facts

FalINTOblivion0112: :joy:

Astrobytes: dbdr: now I know the 'r' in 'dbdr' means resubmit :P

struct: we need a clash contest

Astrobytes: a clash of clashes

dbdr: Astrobytes :D

Astrobytes: Good work though dbdr :)

dbdr: the work is mostly Marchete's so far

Astrobytes: struct: didn't cg do those a while ago?

struct: I think so

struct: I was taking a break during that time

struct: I think

Astrobytes: It's an awesome framework eh! And the tech.io article. So much learning to do :D

Astrobytes: Possibly struct, I can't remember tbh

Astrobytes: Was like clash tournaments or something, I (obviously) didn't participate

struct: doesnt make much sense anyways

Illedan: dbdr, your Oware is just a copy of CGZero converted into Rust?

struct: I think its possible to memorize all the clashes

Astrobytes: Yeah or at least have a record of them

Astrobytes: Oh hey Illedan :)

dbdr: Illedan it's just a rust wrapper, and playing with the training

FalINTOblivion0112: i saw a really hard clash of code

FalINTOblivion0112: and i just kinda quit

Astrobytes: Don't be a quitter. At least try something.

FalINTOblivion0112: i did

FalINTOblivion0112: and it gave me the strangest error message that exists

Astrobytes: Which is...?

JMAC2143: hi !

dbdr: > keyboard not found. press any key to continue

Astrobytes: :D

JMAC2143: :grinning:

Illedan: Oh, you used his training?

Astrobytes: ah Royale incoming

dbdr: no, training has to be done

dbdr: royale broke his bot

Astrobytes: how?

dbdr: I just see he's ranked lower

dbdr: was #4 I think

FalINTOblivion0112: oh

Astrobytes: he's on his way back up, just all the submits today most probably

_Royale: "community AI hiding"

dbdr: :D

Astrobytes: heh heh heh :D

JMAC2143: how much thrust should I use in coders strike back

dbdr: try different values and see what works best

JMAC2143: like what

dbdr: what's the range? should be in the rules

Astrobytes: 0, 50% thrust, full thrust... use your imagination

dbdr: negative...

JMAC2143: ok thainks

Astrobytes: :D

dbdr: win at csb using the reverse gear

FalINTOblivion0112: me in reverse mode go brrrrr

JMAC2143: how do you use revers mode

BlaiseEbuth: That's cool, we're learning a bunch of new words today...

JMAC2143: ya

JMAC2143: but how do you use revers mode

Astrobytes: Use the edom srever

JMAC2143: the what

dbdr: :D

jacek: :upside_down:

BlaiseEbuth: :upside_down:

Robinzor: res

Robinzor: leave

jacek: oO

dbdr: ɘbom ɘƨɿɘvɘɿ

BlaiseEbuth: ǝpoɯ ǝsɹǝʌǝɹ

JMAC2143: whats the max thrust number

PatrickMcGinnisII: hurricane hitting tonight

Astrobytes: Look in the statement

BlaiseEbuth: Hurricane in the statement :scream:

Astrobytes: Best of luck Patrick. Batten down those hatches.

JMAC2143: what is the max thrust number in csb

Astrobytes: Look in the statement

JMAC2143: how

BlaiseEbuth: :rofl:

Astrobytes: Using your eyes

BlaiseEbuth: :eyes:

JMAC2143: i mean wher is the stament

PatrickMcGinnisII: nah, used to it. weak one. Floridians love blow jobs.

Astrobytes: Ah, just a breeze Patrick :)

JMAC2143: wher is the stament

Astrobytes: JMAC2143: Um, on the left?

JMAC2143: oh i dum

BlaiseEbuth: dum?

PatrickMcGinnisII: The thrust value of a pod is its acceleration and must be between 0 and 100.

PatrickMcGinnisII: try 200

PatrickMcGinnisII: ;)

PatrickMcGinnisII: If I lose power I'll just have to drink all the beer in the fridge so it won't go bad

jacek: no power, no php :tada:

Astrobytes: php is powered by beer

jacek: that explains a lot

Astrobytes: Well, at least I think they were drunk :thinking:

PatrickMcGinnisII: http://chat.codingame.com/pastebin/564b78a8-9cc6-4454-9ef1-b232a9b40a9e

PatrickMcGinnisII: freebie

BlaiseEbuth: Not free, there's $ everywhere...

PatrickMcGinnisII: cosmic love made me write my own cube root function

PatrickMcGinnisII: smh

Astrobytes: lol Blaise :D

Astrobytes: You should be sharing this with TBali and other PHPeople Patrick

PatrickMcGinnisII: gotta covert yall to the dark side

Default avatar.png OddHatter: im gonna be real, the second test case on this rectangle partition puzzle is making me feel real dumb. I know I am overcomplicating things here as its considered and Easy puzzle.

JMAC2143: whats the max thrust in cbs

BlaiseEbuth: RTFS

JMAC2143: what

struct: its in the statement

struct: read it

Astrobytes: LIKE WE TOLD YOU ALREADY

JMAC2143: whers the stament

struct: but I guess its 100 for your current league

Astrobytes: Right, stop trolling us or get kicked,

PatrickMcGinnisII: omg, Roblox must be getting boring

Astrobytes: You've been asking the same thing for almost 30 minutes

Astrobytes: lol Patrick

PatrickMcGinnisII: anyone "onject insertion' puzzle?

PatrickMcGinnisII: er object

JMAC2143: sorry im new and suck

Astrobytes: "object insertion" ! :o

PatrickMcGinnisII: I converted to binary, did i overkill the puzzle?

BlaiseEbuth: You're right. Sucking is the best way to be promotted fast.

Astrobytes: I haven't even heard of it.

PatrickMcGinnisII: BlaiseEbuth smh.

Astrobytes: :D

Default avatar.png Sum_Path: hi

Westicles: hii

Default avatar.png riprobertmugabe: ruby users on their way to win every shortest mode

Astrobytes: git gud at ruby then

Default avatar.png riprobertmugabe: wish i could

Default avatar.png riprobertmugabe: pensive

Default avatar.png Voudrais: any cute boys here?

BlaiseEbuth: They're all mine

Astrobytes: :rofl:

jacek: :x

Westicles: What's a good search engine that can handle perl gibberish?

PatrickMcGinnisII: :alien:

Astrobytes: Gotta write your own one. In perl :)

Astrobytes: I used to use the manual and cookbooks

BlaiseEbuth: A search engine that handle perl ?

Westicles: Yeah, google strips all the characters away. Trying to figure out what the hell this is

Westicles: $G[abs]=$_}{$_+="@G

BlaiseEbuth: Oh.

Astrobytes: That's somewhat brutal

Westicles: It works, though. Found it on some golf site

Westicles: For temperatures

BlaiseEbuth: Too much time I haven't used perl...

Astrobytes: Yeah, been a good while for me too

BlaiseEbuth: $_ is the 'current' value

Astrobytes: $_ is the default variable, @G is an array

Astrobytes: the curly braces tho...

BlaiseEbuth: $G[] is a cell of this array

Astrobytes: yeah

BlaiseEbuth: the "...

Westicles: You pipe the temps into it and it spits out the right answer

BlaiseEbuth: But why...

Astrobytes: that has me stumped for now

Westicles: I left a double quote off the end if that helps.

BlaiseEbuth: Oh. That's a little more coherent

Astrobytes: yeah, slightly

Astrobytes: Those curlies though

Westicles: Oh well, not really a skill I need anyhow. I'll stick to system calls

PatrickMcGinnisII: it's explicitly dereferencing the array into strings, performing the math and dropping it back into the array with the res i think

Astrobytes: I've not got my linux box switched on so no perl right now for me

FalINTOblivion0112: guys i just made my own clash of code puzzle

BlaiseEbuth: :scream:

FalINTOblivion0112: its really hard just saying

Astrobytes: Something like that Patrick yeah, it's just precisely how

FalINTOblivion0112: i really wish people can approve it lol

Astrobytes: I don't clash so that's a no from me.

FalINTOblivion0112: its gonna be the first clash of code series

BlaiseEbuth: :scream:

FalINTOblivion0112: so there is gonna be part 1, part 2, part 3, and so on

Westicles: Just like the cribbage guy

FalINTOblivion0112: https://www.codingame.com/ide/demo/88997026584c2f8392404736b86e8f3c135bcc

FalINTOblivion0112: you can try it

Astrobytes: Better make puzzles then no? If you want a series. You won't get them all in a row in clashes.

Astrobytes: I won't try it.

FalINTOblivion0112: yeah my ideas will change

FalINTOblivion0112: thank you for the recommendation

MSmits: i agree, absolutely no reason to do a series

MSmits: most people will only encounter one of them and it might as well be the last one in the series

Astrobytes: ^

Westicles: Normally something like that would be rejected, but the french aren't participating any more and the indian guys are approving everything

FalINTOblivion0112: yu[

BlaiseEbuth: Yé... a reverse...

FalINTOblivion0112: no making a series

FalINTOblivion0112: i am convinced

MSmits: just make a really good clash

FalINTOblivion0112: if you guys want to play the clash tho try it https://www.codingame.com/ide/demo/88997026584c2f8392404736b86e8f3c135bcc

Astrobytes: And if you want a series then do the puzzle route, you can go from easy to expert if you wish

FalINTOblivion0112: yup

FalINTOblivion0112: you guys are helpful

Astrobytes: Don't spam the link please. It's in contributions so people will see it.

FalINTOblivion0112: ohhh im so sorry

PatrickMcGinnisII: freaky perl circumfix syntax, cringe worthy

FalINTOblivion0112: im new to the website so yeah

FalINTOblivion0112: sorry for spamming

AllYourTrees: HOW DARE YOU NOT KNOW :)

FalINTOblivion0112: lol

FalINTOblivion0112: i felt like i committed a crime lol

Astrobytes: lol, ALLYOURSHOUTING

BlaiseEbuth: Westicles, isn't there others {} outside this piece of code?

Astrobytes: FalINTOblivion0112: lol don't worry about it

FalINTOblivion0112: thx

FalINTOblivion0112: imagine if the mods just reject it

Astrobytes: BlaiseEbuth: This is what I was thinking

Westicles: Nope. You can run it from here

FalINTOblivion0112: "nope, to hard"

Westicles: https://codegolf.stackexchange.com/questions/112021/find-the-temperature-closest-to-0

BlaiseEbuth: OK... Don't find any ref to this use even in the doc... :sweat_smile:

Astrobytes: Same Blaise

Astrobytes: Not sure I've ever seen that

FalINTOblivion0112: i havent seen that either

Astrobytes: Golfing is strange though, and perl is (ofc) strange by nature

PatrickMcGinnisII: friendlier *.min:{.²,-$_}

darkhorse64: you have to get rid of the first input anyway,

BlaiseEbuth: Ok got it.

Westicles: I don't know how you can learn this stuff without search. Bash is even harder, no idea how you would learn that stuff

BlaiseEbuth: The guy use the -p option to run it. https://www.cs.cmu.edu/afs/cs.cmu.edu/Web/People/rgs/pl-opt.html

Astrobytes: Like I said earlier, for perl I used the camel book and some cookbooks when I had to use it

Astrobytes: (and the language reference)

Astrobytes: ahhhh

Astrobytes: cheers Blaise

PatrickMcGinnisII: I learned perl like 20 years ago when i was up for a job in west palm beach area, I didn't get the job and threw threw 3 books away determined to never use it again

Astrobytes: That's around when I had to learn it Patrick :D

Astrobytes: A baptism of fire if ever there was one

PatrickMcGinnisII: i should have set the trashcan on fire

Astrobytes: The days when python was just something somebody in the dev room used now and then for something that nobody else understood why they didn't just use perl

Astrobytes: We didn't just use perl as glue, (though it was for sure), but a good whack of our search engine was perl-based

PatrickMcGinnisII: it chomps

Westicles: We used to use it to autogenerate code from excel, but all those nice python libraries killed that

Astrobytes: lol

PatrickMcGinnisII: i think it's power was the variable reference as a variable $$, and a little speed...but websites did use it back in the day quite readily

Astrobytes: We switched from mySQL to purely XML i remember, we used to have a templating system for websites/pages, perl was a godsend in that case

Astrobytes: (XML + XSLT)

PatrickMcGinnisII: :puke:

PatrickMcGinnisII: :nauseated_face:

Astrobytes: It had some excellent modules for web (CGI!) stuff Patrick yeah, but it was really good at being the glue and the regular expression support was second to none

PatrickMcGinnisII: well, the old banking unix systems ... oh nevermind ... it still makes me sick

Astrobytes: you love it

PatrickMcGinnisII: i did not love dBase III and perl

PatrickMcGinnisII: it did not love me

Astrobytes: heh, I didn't have to use that thankfully :D

PatrickMcGinnisII: I think y2k killed it, thankfully

PatrickMcGinnisII: maybe I should be more thankful for javascript

Astrobytes: :o

Astrobytes: Don't get me started

PatrickMcGinnisII: fget myweb.pl

PatrickMcGinnisII: heh

jacek: why im 4th :F

PatrickMcGinnisII: in what?

dbdr: :innocent:

jacek: in some african game

dbdr: I'm pulling you down a bit

Astrobytes: making some inroads dbdr! Training is that quick?

Astrobytes: Or some other modifications?

dbdr: not huge improvement, but this last version seems a bit stronger

dbdr: it probably needs more training

Astrobytes: Yes it definitely seems more stable + stronger

dbdr: even beat robo once :D

Astrobytes: hehehe, don't get too cosy, he'll be back with a fix before you know it :D

dbdr: yeah, I don't count on it :)

AllYourTrees: how many games/iters does it take to train one those?

dbdr: this one has ~64k matches

struct: thats not bad

Astrobytes: at all

dbdr: not counting the test matches

PatrickMcGinnisII: ok all the newer easy puzzles are done, i quit for today

Astrobytes: later @PatrickMcGinnisII enjoy your wind

PatrickMcGinnisII: when you get a NN that can train my GF drop me a line

PatrickMcGinnisII: ;)

PatrickMcGinnisII: breezy

Westicles: I'm stalled on puzzles until they fix groovy. Got to do them all

Astrobytes: Groovy is square now eh? Guessing it's a 'low priority' job

Westicles: Really simple stuff will go through if you submit it a few times, but that's about it. At least as of a few days ago

Astrobytes: Did they say what broke it?

Astrobytes: Oh, wait. the last languages update was it?

jacek: people who cheat the system

Westicles: I think it broke before that. All they said is nobody at CG knows groovy, which is fair... I mean why would you

Astrobytes: In that case though - why bother supporting it at all?

AllYourTrees: is there a post about the last language update?

AllYourTrees: i wanna see if there are any rust updates

Westicles: https://www.codingame.com/forum/t/languages-update/1574/223

Astrobytes: You know when there's language updates because everyone is talking about them

Astrobytes: *there're

Westicles: I tried to get compression working in rust. Got a million errors about type mismatches and gave up

Astrobytes: I get the impression that Rust hates you until you finally surrender to it.

AllYourTrees: i <3 rust

jacek: you :heart: iron and oxygen?

AllYourTrees: ya

Astrobytes: Yeah, I have nothing against it at all, it's pretty damn cool. Just hard to get used to (for me at least)

AllYourTrees: i started using it years ago when it first started coming out, definitely took a long time to be proficient lol

AllYourTrees: and still learning ofc

RoboStac: the early versions were a lot more painful too

Astrobytes: I can imagine.

Westicles: AllYourTrees, then your assignment is to unpack ASCII bytes put 2:1 into UTF-16 in under around 30 characters

AllYourTrees: :thinking:

RoboStac: it's definitely not a golf language

Westicles: Yeah, in C it is literally one character

AllYourTrees: 1 character??

Westicles: ascii=u"UTF-16"

AllYourTrees: so you want to take a string and convert it to utf-16?

AllYourTrees: is there some puzzle for this or something lol

Westicles: It is good for golf. It counts characters instead of bytes, so you can get 2 characters into one symbol

Astrobytes: it's golfing

jacek: :golf:

Default avatar.png Voudrais: siema jacek

Astrobytes: Our troll returns

Default avatar.png Voudrais: no u

Default avatar.png LouisK: join https://www.codingame.com/clashofcode/clash/1851912372ac8bdee445fd33b3bfad9b59a9cb8

Default avatar.png Voudrais: stop trolling me please

Astrobytes: You're trolling us by asking about cute guys

Astrobytes: LouisK: post that in #clash channel please

serinir: guys why is it that the difficulty of the private class is too easy ?

Default avatar.png CogentCoder73: hi

Alireza_Rubik: له

Alireza_Rubik: hi

Default avatar.png aimenrma: سلام

Default avatar.png duck_man: hello world

DuhBaconStrip: gh

DuhBaconStrip: hi

GGGFreshy: https://www.youtube.com/watch?v=YV0JFbp99Q8&list=PLg-GeRJzU5VY-v9JwwfQnJZA40cODsAU7&index=86&ab_channel=Knottralic

Dogcat: cutie lol

ParallaxWave: fnef

ParallaxWave: fnefn

Default avatar.png whowins: hi

Default avatar.png ninjago_get_some_bitches: amogus

Default avatar.png binjn: why does everyone say 'amogus'?

Default avatar.png binjn: I cannot understand

Default avatar.png ninjago_get_some_bitches: amogus

Default avatar.png ivatan9: hello

Default avatar.png MrZebes: hi

Default avatar.png kreuzkummelll: hey