Chat:World/2021-07-06
test00: is there any way to get input data by file ?
KiwiTae: ya
test00: because I hope to run my code locally but difficult to copy input data from log screen
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
test00: oh,, even it's run online, can save data in my local file ?
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.
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:
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.
SuryaTheOP: is there any way to correct this
BlaiseEbuth: Yeah, optimize your code, it is too slow.
BlaiseEbuth: Probably a mathematical trick.
SuryaTheOP: but i don't get it
SuryaTheOP: https://www.codingame.com/contribute/view/64019a6ded4ae1f1c40a5103fe583425638d
SuryaTheOP: anyone can explain this
BlaiseEbuth: Explain what ?
SuryaTheOP: it got solution in c++ but i am python learner
BlaiseEbuth: The solution you mean ?
BlaiseEbuth: I'll take a look
derjack: helpful mod is helpful
BlaiseEbuth: :thinking:
SuryaTheOP: @BlaiseEbuth you can DM me
derjack: puzzle of the week about :cheese: eh
derjack: whenever i see oware something is happening
tree.png: hey guys, how do you switch Test Cases in Clash of Code?
Zedogx: use setting then custom\
tree.png: no like when you're in a round, you do the first test case, right?
tree.png: how do you switch to the next one to keep progressing?
Zedogx: oh
tree.png: i'm sometimes finished with the first test case.. idk how to move to the next one though
DaNinja: ctrl+Enter
tree.png: hmm.. it didn't seem to work for me
tree.png: i'm on mac if that has anything to do with it
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
tree.png: i'll try that.. thanks!
DaNinja: not sure if its Option or Cmd on Mac
BlaiseEbuth: Is that OK tree.png ?
c0nc4c: i solved there is no spoon kekw
derjack: :tada:
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
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?
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
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.
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
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
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
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)
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: 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?
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"
- pragma GCC option("arch=native", "tune=native", "no-zero-upper")
- 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>
- include <immintrin.h>
- include <smmintrin.h>
- 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
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
Westicles: hii
riprobertmugabe: ruby users on their way to win every shortest mode
Astrobytes: git gud at ruby then
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:
Astrobytes: Our troll returns
LouisK: join https://www.codingame.com/clashofcode/clash/1851912372ac8bdee445fd33b3bfad9b59a9cb8
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 ?
Alireza_Rubik: له
Alireza_Rubik: hi
DuhBaconStrip: gh
DuhBaconStrip: hi
Dogcat: cutie lol
ParallaxWave: fnef
ParallaxWave: fnefn
ninjago_get_some_bitches: amogus
binjn: why does everyone say 'amogus'?
ninjago_get_some_bitches: amogus