Chat:Fr/2021-12-22

From CG community
Jump to navigation Jump to search

GroutchKeu: o/

Default avatar.png Foonky: Yo les filles, quelqu'un peut m'aider au mode reverse je comprend rien (je connais que le c# aussi :x )

R4N4R4M4: Hello o§

R4N4R4M4: C'est quoi le mode reverse Foonky ?

Pauloux: En clash of code ?

R4N4R4M4: Ah, c'est les clash où y a aucun énoncé ?

Pauloux: je pense

Default avatar.png Foonky: yes exact j'ai l'impression d'avoir un mur devant moi c'est horrible mdr

Pauloux: Certains ne sont pas facile en effet

Pauloux: à partir des entrés et des sorties que tu as, tu dois dédure ce que doit faire ton programme

dwarfie: c'est surtout que la plupart des derniers reverse validés sont juste des trucs ou les gars etaient incapable d'ecrire un sujet

dwarfie: et validé par des gars qui se sont contentés de regarder la solution et se sont dit "ouah , trop cool , ca utilise une fonction toute faite en python"

dwarfie: désolation

kuraima: saluuuut

leojean890: après les sujets de coc c'est bidon par nature aussi :P

Stilgart: misère et désillusion à tous, et tortue à Automaton2000

Automaton2000: en fait il y a bien longtemps

Stilgart: oui, il y a bien longtemps Automaton2000, faut que tu t'y remettes

Automaton2000: remarque, fous ils l'ont toujours été. morts par contre c'est cool

Stilgart: ... :thinking:

Stilgart: c'est raccord avec l'état des puzzles sur CG

Bon[]Crayon: Salut #fr

Bon[]Crayon: Salut Automaton2000

Automaton2000: je viens de me faire chier

Stilgart: \o Bon[]Crayon

Bon[]Crayon: o/ Stilgart

Stilgart: Automaton2000: n'oublie pas de tirer la chasse

Automaton2000: meme pas besoin de ça pour passer en wood 1

Bon[]Crayon: :joy:

Stilgart: :D

Stikkif: Sali

Bon[]Crayon: salut ?

nicola: Je te salis ma rue ?

Default avatar.png SolofondraibeDonneAlphonse: Bonjour

Bon[]Crayon: o/

dwarfie: hé hé ... en forme Automaton2000 aujourd'hui :rofl:

Automaton2000: ok merci, je vais regarder ca

Pauloux: Automaton2000 plutot endive ou salade ?

Automaton2000: pour le reste, c'est de la merde.

Pauloux: et pour les mirgrants, qu'en pesne tu ?

Pauloux: automaton2000 tu en pense quoi pour les migrants ? Salade ou Endive

Automaton2000: chez moi il est en train de regarder ça

Pauloux: automaton2000 tu as des migrants chez toi qui mangent de la salade ?

Automaton2000: si je voulais faire une ia qui marche

Pauloux: automaton2000 mais ce ne sont pas des robots, ce sont de shumains comme nous

Automaton2000: (quoique ça doit être plus simple

Pauloux: xD

Stilgart: Automaton2000: pour info, les tortues ça mange essentiellement de la sucrine

Automaton2000: il n'y a pas de classement

Stilgart: Automaton2000: ce sont des choses qui arrivent dans un monde où il n'y a plus de contest :(

Automaton2000: si ça peut te faire gagner des points pour le niveau 40

Bon[]Crayon: Automaton2000 Le niveau 40 c'est le niveau maître tortue.

Automaton2000: on peut dire ce qu'on veut

Pauloux: automaton2000 non il y a des choses interdites

Automaton2000: après il y a des indices dans le menu à gauche

Pauloux: automaton2000 je vois...

Automaton2000: perso, je ne sais pas comment faire en sorte que mon bot se débrouille bien

Bon[]Crayon: Automaton2000 Copie ton propre code !

Automaton2000: non mais en fait la plupart des autres langages

Default avatar.png nesnes112: hi every body

Default avatar.png nesnes112: can anyone help me in coding in javascript

Bon[]Crayon: Si tu parles anglais, demande de l'aide sur le canal World.

BlaiseEbuth: Yo tout l'monde ! Automaton2000 !

Automaton2000: did u check the music?

BlaiseEbuth: Arrête avec ça Automaton2000...

Automaton2000: tu peux envoyer le lien de la page du puzzle

Martin17: Il détecte la langue ?

Martin17: Hi Automaton2000

Automaton2000: c'est bien pour ca que c'est pas trivial

Bon[]Crayon: o/

BlaiseEbuth: Automaton2000 détecte que dalle, c'est juste un troll.

Automaton2000: j'espère qu'ils ont pas compris la question

Bon[]Crayon: Automaton2000 C'est une chance sur un million d'écrire tortue.

Automaton2000: y'a un moment où je vais pouvoir aller me coucher

Bon[]Crayon: Automaton2000 Non, tu dois troller le chat h24.

Automaton2000: je suis sûr que je suis un noob

Bon[]Crayon: Automaton2000 Tu as quand même résolus le puzzle Nintendo Open Challenge. GG

Automaton2000: t'as plus le droit de te plaindre

Bon[]Crayon: Automaton2000 Je ne me plains pas, je m'exprime.

Automaton2000: moi je vais me faire une idée

Default avatar.png nesnes112: salut mes amis

Default avatar.png nesnes112: qui peut m'aider à coder en javaScript

EruRoraito: on peut s'aider mutuellement si tu veux

EruRoraito: je suis en plein apprentissage aussi

Zorg1: o/ tout le monde et salut à Automaton2000 :wave:

Automaton2000: bien sûr que si tu fais rien de spécial

Bon[]Crayon: o/

Default avatar.png nesnes112: merci EruRoraito

Default avatar.png nesnes112: COMMENT FAIRE

Default avatar.png nesnes112: je suis nouvelle ici

Default avatar.png Tommagique: hey les gars vous auriez un code bien pour la ligue argent du mad pod racing parce que mon bouclier s'active pas correctement

Zorg1: normalement tu t'en fous du bouclier en argent, tu peux pas en gold sans

Zorg1: *passer

BlaiseEbuth: Tu peux passer gold sans bouclier, sans prendre en compte l'adversaire, et même sans faire gaffe à l’interaction entre tes deux pods...

dwarfie: le bouclier , c'est pour les faibles

BlaiseEbuth: Ouai ! Double haches !

dwarfie: d'ailleurs , du "bucheronnage" sportif sur l'equipe tv ...

EruRoraito: salut les gars c'est quoi le regex pour récupérer seulement les nombre sans les espaces en javascript svp ?

EruRoraito: j'ai essayé /\d+/g

EruRoraito: mais ça me sort les espaces comme "null"

BlaiseEbuth: Bon... Y'a vraiment un mec qui a décidé de se la jouer kevin le hacker avec mon adresse gmail... Après le compte google hier, le compte battle.net aujourd'hui... -_-

Zorg1: il essaie de se logger jusqu'à locker le compte ?

BlaiseEbuth: Nan il pourrait pas... Y'a une double auth partout. Il essaye 2-3 fois, du coup je reçois 2-3 notifs/sms/appels sur le téléphone, pis c'est tout...

BlaiseEbuth: Y'a juste hier où c'était à 5h du mat' et que j'avais pas coupé le tel que ça m'a passablement fait chier... Mais à part ça...

BlaiseEbuth: La seule question c'est: Où a t'il choppé l'adresse... :thinking:

Default avatar.png Keirann: comment fait-on une boucle svp

BlaiseEbuth: On attrape les deux bouts du contexte et on les croise.

BlaiseEbuth: Plus sérieusement Keirann, deux choses: Quand tu poses une question contextualise un peu... Genre une boucle de quel type ? En quel langage ? Ensuite, codingame n'est pas adapté si tu n'as pas les bases de la programmation, il vaudrait mieux apprendre d’abord puis revenir pratiquer ici ensuite.

BlaiseEbuth: (J'avais écrit 'cofingame', ce lapsus :p )

Zorg1: l'adresse mail il peut l'avoir récupérer d'un dépôt git/gitlab s t'as pas trop fait gaffe

dwarfie: bof .. son compte est chez gogole , il a un androide ... ca fait 2 raisons de fuiter ...

Zorg1: :D

Zorg1: google hack une nouvelle offre de google

Zorg1: pas fini de leur rapporter des thunes

dwarfie: mdr la pub que je viens de voir ... "mettez votre carte BIPPP dans votre mobile ... pour des paiements ultra sécurisés" ... on va pas énoncé tout ce qui contredit le mot "sécurisé" :rolling_eyes:

BlaiseEbuth: Elle sert pas à grand chose c't'adresse... Et puis bon, je suis effectivement convaincu qu'ils se torchent avec le respect de la vie privée, mais ça reste pour leurs magouilles internes. Peu de chance que ça se retrouve entre les mains de jeankevdu81 pirat informatik...

dwarfie: tu surestimes leur capacité à garder ca en interne ;)

BlaiseEbuth: Peut-être... Mais tu surestimes les capacités de jeankevdu81 pirat informatik.

Zorg1: jpouré avoir un script de hak en python jcompren pas le bash bisou

leojean890: ça peut se faire avec tous les langages :P le fameux or 1=1 qui tue tout :P (ou pas^^)

dwarfie: bon ... debugage de NoW c'est fait ... c'etait pas du luxe :D

BlaiseEbuth: Stoi l'bug.

dwarfie: oui ... c'est moi qui les avait codé ... et passé au lance-flamme ...

dwarfie: (sauf pour ce qui est pas dit dans le statement et la c'est le conrtibuteur qui merite le lance famme)

dwarfie: ....flamme...

BlaiseEbuth: Pôv gosse... :(

Default avatar.png AdaMed: sommen/2

BlaiseEbuth: som

BlaiseEbuth: ou men ?

BlaiseEbuth: Automaton2000 ?

Automaton2000: c'est juste que ça me fait perdre un temps fou

Zorg1: il rigole pas Automaton2000, c'est un bot pressé

Automaton2000: "on viens d'ajouter e.t, dragon' lair, et supercopter !"

BlaiseEbuth: Voleur...

BlaiseEbuth: +1 pour la musique dans la tête de Zorg1

Zorg1: pffff

Zorg1: je suis déjà à Mach12 avec mon hélico

Zorg1: "ça te dirait d'être complétement irresponsable et de piloter un super helicoptère intelligement appelé 'supercopter' ?"

BlaiseEbuth: Owi

BlaiseEbuth: Sinonyapadistwar

dwarfie: Airwolf

dwarfie: le jeu c'est Airwolf Automaton2000 ... va donc voir la video du JdG ... au putain de pixel près !!!

Automaton2000: tu as un exemple de ce que j'ai fait ca

dwarfie: Automaton2000 ... tous les bugs dans ce jeu, c'est plutot une preuve qu'un exemple :rofl:

Automaton2000: ah ouais ça fait pas le contest ?

BlaiseEbuth: Y'a pas d'emoji chemise Hawaïenne...

Leeeooo: On attend un gars ptn il est tah lent. Je pense prendre de la prise de masse euclidien 4000 a vecteur scalaire

Outsmarted: Je pesne que cette prise engendre la coucherie par l'hormone xvidéo et miakali

Leeeooo: Hummm tah la protéine

Outsmarted: C'est tah énorme!!! est-ce que ceci est réel??

Pauloux: orthonormée même

Pauloux: Outsmarted c'est une info sûre c'est une étude de l'institut yalesendeck

Outsmarted: bg

Leeeooo: mais quel bg

Leeeooo: <3

Outsmarted: helicoptère helicoptère

Pauloux: Je possède des thunes, Je suis à l'aise financièrement

                          Comme dirait l'autre

Outsmarted: OUah

Zorg1: :thinking:

Pauloux: On m'appelle l'OVNI, et vous ?

Remi.: Salut tout le monde !

R4N4R4M4: Salut tout le monde aussi !

R4N4R4M4: Et à Automaton2000 aussi !

Automaton2000: et je suis pas prêt pour ça

R4N4R4M4: Quelqu'un a des compétences en C++ ici ? :D

R4N4R4M4: Je m'explique pas pourquoi ma sortie STDOUT fonctionne ni en cout ni en printf() ici : https://imgur.com/a/1QBNubb

R4N4R4M4: J'ai pas mis la suite, mais y a un cout.flush() à la fin du truc...

Remi.: Normalement moi ^^

R4N4R4M4: ah, je suis sauvé :D

Zorg1: tu fais du C++ toi maintenant ? tout change

Remi.: Sauf que je n'utilise pas cout en dehors de CG ^^

R4N4R4M4: y a des raisons particulières pour que la Stdout sorte pas en C++ ? Ca m'est jamais arrivé en C...

Remi.: MLais je dirai qu'il manque peut-être le endl

Remi.: ou le \n dans le printf

Remi.: Bref le retoru à la ligne.

Remi.: * retour

R4N4R4M4: Le endl je le fais plus tard, je vais mieux faire le test...

Zorg1: c'est recommandé de mélanger cout et print ?

Remi.: En golf ça marche.

R4N4R4M4: bah non Zorg1 mais comme mon Cout fonctionne pas, j'ai spammé avec prinf

Zorg1: ah oui c'est ce que dis Remi. il doit pas être flushé ton cout

R4N4R4M4: je l'ai dit plus haut que je flushe plus loin

R4N4R4M4: je vais le flusher plus près pour voir

Remi.: Dans CG je n'ai jamais eu besoin de faire un flush

Default avatar.png TheLovelyBrocolli_ff63: Coucou! Quelqu'un saurai comment on pourrait acceder a une sorte de correction sdes 6afin de mieux compendre nos erreur?

Remi.: Les jeux attendent un retour à la ligne

Default avatar.png TheLovelyBrocolli_ff63: reddo

Remi.: Correction des quoi ? Si c'est des clash, il faut aller voir la contribution (possible après 50 clash), ou regarder le code des autres joueurs après l'exercicde.

Default avatar.png TheLovelyBrocolli_ff63: Ah merci! a corection des tests des certifications JAVA par exemple c;'est la meme chose?

Remi.: Il parait que les certifications sont des clash, faut juste pouvoir retrouver la contribution.

Default avatar.png TheLovelyBrocolli_ff63: ok Merci

Default avatar.png TheLovelyBrocolli_ff63: beaucoup

Remi.: De rien.

R4N4R4M4: J'ai mieux détaillé mon test : https://imgur.com/kIlEHvx

R4N4R4M4: Je code jamais en C++, du coup je connais pas tous les pièges...

Zorg1: le cout<<endl; fait un flush par défaut

R4N4R4M4: Si juste avant le endl, je mets ça : cout << "toto" << endl; ça sort bien dans la commande

R4N4R4M4: Oui je me doutais Zorg1, le flush, je pense qu'il est bien fait, mais j'ai un cout qui sort pas entre deux

R4N4R4M4: c'est le cout dans la boucle qui marche pas, les deux autres fonctionnent

R4N4R4M4: j'ai essayé avec std:: c'est pareil

Leeeooo: Tu veux être vla djonb comme un albatros et fort comme gorille ?

Outsmarted: tu veux etre vla djomb comme un albatros et fort comme un gorille?


Default avatar.png Orcrux: Bonsoir bonsoir

Leeeooo: Bonsoir

Outsmarted: Prise de masse euv=clidien 4000

Leeeooo: Prise de masse euclidien 4000

Default avatar.png Orcrux: Certains ont essayé les exercices sur les boucles "for, while,..." ?

Outsmarted: Prise de masse euclidien 4000

Outsmarted: keskibaragouine

Default avatar.png Orcrux: https://www.codingame.com/training/easy/chuck-norris

Default avatar.png Orcrux: Par exemple

Default avatar.png Orcrux: Je n'arrête pas de tomber sur des souci, c'est codé avec du carton

R4N4R4M4: C'est peut-être pas le même cout d'une classe à l'autre ???

R4N4R4M4: je vais sortir le cout de la boucle pour voir

b0n5a1: o/

R4N4R4M4: o/

Outsmarted: j'viens de me faire bannir du chat world? C'est des authoritaristes un peu

Leeeooo: Mdrr j'ai vu ça de mes propres yeux

b0n5a1: R4N4R4M4 fais gaffe en C et C++ sur CG en cas de crash ça te dit rien du tout parfois...et c'est souvent la raison de non visualisation de logs (on est plein à s'être fait avoir plus d'une fois en contest)

R4N4R4M4: Merci b0n5a1

R4N4R4M4: C'est pas les logs que je vois pas, c'est la commande vers stdout

R4N4R4M4: Bon, j'ai ajouté std:: partout ça marche pas plus. Bon, je fais une pause et je vais tenter de creuser

b0n5a1: ça a dû péter avant :D

b0n5a1: quand j'avais de quoi reproduire en local, la cause était un crash ... de mémoire dwarfie a déjà eu le cas aussi

b0n5a1: perso ça m'est arrivé sur 2/3 contests

Zorg1: c'est super user friendly comme langage ....

b0n5a1: quand t'arrives à reproduire juste te tour en cours en local tu tombes dessus

b0n5a1: bah ça vient de CG Zorg1

b0n5a1: en local j'avais l'exception + la ligne où ça pétait...sur CG que dalle aucune info et game over

BlaiseEbuth: Comment es ton re

b0n5a1: o/ BlaiseEbuth

R4N4R4M4: o/

BlaiseEbuth: \o

R4N4R4M4: Je vais reload ma page

Zorg1: o/

BlaiseEbuth: Skwa l'prob R4N4R4M4 ?

BlaiseEbuth: tl;dr

R4N4R4M4: https://imgur.com/kIlEHvx

BlaiseEbuth: Btw les coupains: https://github.com/BlaiseEbuth/CGChat

b0n5a1: en tout cas à chaque fois que ça merdait sur CG en local je tapais dans les choux en reproduisant et BAM

BlaiseEbuth: C'est codeblocks ? :scream:

R4N4R4M4: C'est Space Shooter

R4N4R4M4: J'arrive pas à faire un WAIT !!! :D

BlaiseEbuth: Nan mais l'ide...

R4N4R4M4: je play l'unit qui play sa liste d'actions, et la liste d'actions (1 WAIT) sort pas sur cout

BlaiseEbuth: Le theme blanc on dirait code blocks c't'horrible

R4N4R4M4: oui, j'y vois rien en dark

BlaiseEbuth: C'est sensé être l'inverse...

BlaiseEbuth: Pas claire ton image...

b0n5a1: par contre de mémoire R4N4R4M4 je crois que j'ai aussi eu des merdes à un moment de ton genre ... problème de synchronisation cout/cerr ou un truc de ce goût

R4N4R4M4: Je suis sur un projo dans mon salon, du coup avec la lumière ambiante c'est trop sombre en noir

R4N4R4M4: b0n5a1 les cerr, je les ai ajoutés parce que ça fonctionnait pas en cout tout seul

R4N4R4M4: juste pour marquer les steps

b0n5a1: ok :D

R4N4R4M4: sinon tu m'aurais pas cru que ça passait dans le code :D

BlaiseEbuth: Montre le code, on va pas débugger des jpg.

R4N4R4M4: Arf, j'ai pas trop envie de partager mon code qui fait un WAIT :D

R4N4R4M4: http://chat.codingame.com/pastebin/dd7f6864-7bd0-423e-a296-0896adad57cc

BlaiseEbuth: Qui fait rien, pour l'instant... :smirk:

Zorg1: il t'en faut des lignes pour faire un WAIT ...

R4N4R4M4: Si vous avez des conseils de lisibilité, je suis preneur, parce que c'est illisible pour moi le C++ en l'état :D

BlaiseEbuth: Aère ?

R4N4R4M4: Si j'aère, je verrai pas tout sur l'écran... :D

R4N4R4M4: Mais sinon c'est une bonne idée

BlaiseEbuth: Marche pas ton code...

BlaiseEbuth: :p

R4N4R4M4: Bah non c'est pour ça

R4N4R4M4: Il me signale un problème d'input, je l'avais pas avant quand j'envoyais mon WAIT en dur

R4N4R4M4: Je vais vérifier l'input

b0n5a1: ton cout.flush est useless par contre, le fait de faire "<< endl" la ligne précédente implique un flush (fait par endl)

R4N4R4M4: d'ac, je l'ai enlevé

R4N4R4M4: Cherchez pas, j'ai trouvé un énorme bug

BlaiseEbuth: Hm?

R4N4R4M4: Je vide pas mon vector de lecture des units, je les empile à chaque tour

BlaiseEbuth: :3

R4N4R4M4: Je sais pas si ça explique le truc du cout au premier tour par contre

b0n5a1: erf

BlaiseEbuth: Surtout avec des pointeurs... :D

R4N4R4M4: bon, faut que je retrouve où il est mon vector dans tout ça

nicola: Dans ton code, au fond à droite.

R4N4R4M4: vector.delete() ça marche ?

BlaiseEbuth: clear

b0n5a1: heu le clear fait pas le delete des éléments

b0n5a1: faut d'abord les delete un par un

b0n5a1: avec tes pointeurs

R4N4R4M4: hein ??? faut que je les delete tous ?

R4N4R4M4: arf, c'est compliqué le C++ :D

BlaiseEbuth: Ah oui comme c'est des pointeurs.

R4N4R4M4: Je vais finir par préférer le java :D

BlaiseEbuth: T'as qu'à pas foutre des pointeurs partout

dwarfie: Removes all elements from the vector (which are destroyed),

dwarfie: c'est ce que dit la doc

b0n5a1: for (Machin* m : machins) delete m;

R4N4R4M4: En plus j'ai plein de trucs qui s'instancient tout seuls, et je sais pas trop comment je vais les vider...

BlaiseEbuth: Oui. Mais seulement si y'a un destructeur

b0n5a1: dwarfie avec des trucs alloués dynamiquement faut faire le ménage d'abord ^^

R4N4R4M4: Ah oui faut que je creuse les destructor, je me suis arrêté au constructor dans la Bible du C++ ;D

dwarfie: bof ... le menage , c'est pour les faibles :D

R4N4R4M4: Je crois que t'as raison dwarfie, je vais laisser ça aux serveurs CG :D

R4N4R4M4: Bon, je vais googler "comment coder un destructor en C++"

b0n5a1: ou sinon tu mets pas de pointeur ça marchera

R4N4R4M4: Bah moi j'aime bien les pointeurs, je sais pas encore faire sans

b0n5a1: Unit u; u.input(); machin.push_back(u)

BlaiseEbuth: Y'a plein de truc à revoir, mais faut bien commencer ^^ En ce qui concerne les I/O sur CG, je te conseillerai de centraliser. Avoir des cin/cout par-ci par-là c'est le meilleur moyen de créer des bugs imbitables...

b0n5a1: per

R4N4R4M4: BlaiseEbuth, faut que je fasse une classe spécifique io alors ?

R4N4R4M4: et je lui envoie les trucs à cout ?

b0n5a1: nope

BlaiseEbuth: C'pas parce que c'est du C++ qu'il faut tout faire sous forme de classe. ^^

BlaiseEbuth: Perso pour CG j'ai des cin/cout que dans le main.

b0n5a1: friend inline ostream& operator<<(ostream& os, const Unit& u) et friend inline istream& operator>>(istream& is, Unit& u) à surcharger par exemple ( à la place de tes input() )

b0n5a1: le friend te permettra de taper directement sur tes membres privés l'air de rien ^^

BlaiseEbuth: C'est fait pour ça les amis.

b0n5a1: et après t'as des trucs sympas type : Unit u; cin >> u;

R4N4R4M4: D'ac, mais du coup le Unit u, j'ai pas besoin de le libérer à la fin ? C'est comme en C en fait ?

R4N4R4M4: Donc si je fais tout avec des déclarations et sans aucun new, je serai tranquille côté memory ?

b0n5a1: et en local en simulant les inputs avec un fichier, y'a juste le cin qui change par exemple ^^

BlaiseEbuth: Oui R4

b0n5a1: ouais : Unit u; u.input(); v.push_back(u); v.clear() ... tu seras tranquille

R4N4R4M4: Et si je veux pointer sur un élément du coup je peux faire Unit* u = &v[n] ?

b0n5a1: unit& u = v[n]

b0n5a1: ou const Unit& u = v[n]

b0n5a1: ensuite u.machin

R4N4R4M4: Ah la la, ça va mettre ma cervelle tout à l'envers ça ! :D

b0n5a1: Unit& pour modifier, const Unit& en lecture seule

b0n5a1: de toute façon si t'essaye de modifier un const Unit& ça va gueuler à la compil

R4N4R4M4: Bon, j'ai copié tous vos commentaires dans mon code, je vais tâcher de suivre ça, c'est pas gagné..

R4N4R4M4: J'ai passé mon après-midi sur un WAIT donc quand ça marchera, j'attaque les FIRE :D

R4N4R4M4: Heureusement, j'ai mon autre code C dans le ranking pour sauver la face :D

BlaiseEbuth: :smirk:

R4N4R4M4: Merci à tous en tout cas pour les conseils ;)

R4N4R4M4: Bon faudra aussi que je creuse la surcharge des opérators << >> ça a l'air sympa

BlaiseEbuth: Faut tout creuser.

R4N4R4M4: C'est un peu pour ça que je me lance sur un multi, mais y a du boulot là

BlaiseEbuth: Te lance pas trop loin, si jamais faut aller te rechercher après...

b0n5a1: R4N4R4M4 je te file une partie du code de mon spring challenge 2020 en pastebin par MP (avec juste la lecture des inputs à l'init et à chaque tour ) comme ça t'as quelques exemples simples de surchage de ostream&<<(... et autres ... avec mon main qui est toujours le même pour chaque contest/multi (à qq détails près)

R4N4R4M4: Je suis déjà entrain de remplacer mes Unit* en Unit

b0n5a1: je vérifie juste que j'ai bien éliminé le reste d'abord ^^

R4N4R4M4: Ah cool b0n5a1 merci, oui mets pas tout ton code ;)

b0n5a1: le seul truc qui change à chaque fois c'est le type de retour de "virtual IStrategy Apply() = 0" ... soit string, soit vector<string> en fonction des jeud

b0n5a1: fais gaffe à le récupérer en local R4N4R4M4, ça disparaît dans une heure ^^

R4N4R4M4: C'est bon, je l'ai récup

leojean890: dwarfie t'as amélioré ton night of war qui buggait c'est ça car le statement est pas clair ? xD #scrollll

Remi.: R4N4R4M4 c'est réglé ton problème de cout ?

R4N4R4M4: Je suis en train de tout refaire, j'avais un problème dans mon input

leojean890: t'es sur quel multi ?:P TVC encore ?^^

R4N4R4M4: space shooter

R4N4R4M4: il est marrant je trouve

leojean890: ah oui tu m'as dit hier que t'allais coder une simu^^

leojean890: juste faire une heuristique, c'était marrant:p

R4N4R4M4: ben en fait je me suis dit à la place que j'allais le faire en C++, et c'est là que les problèmes ont commencé :D

Remi.: Si c'est pas un langage habituel, c'est sûr que c'est pas le plus facile à aborder ^^

R4N4R4M4: C'est clair

Remi.: La notion de pointeur est délicate et bonjour les fuites mémoire.

BlaiseEbuth: Fix ta alzheimer

R4N4R4M4: C'est surtout le comportement des classes que je maîtrise pas trop, j'ai des trucs qui me paraissent logiques mais qui font n'importe quoi

leojean890: ah oui tu as l'habitude tu C toi^^

leojean890: du C*

R4N4R4M4: Bah oui

leojean890: du coup c'est le fait d'utiliser des classes qui sort de tes habitudes^^

R4N4R4M4: Et quand je fais du C++ d'habitude, je fait tout en C

Remi.: Ah ok, donc les pointeurs ne devraient pas poser de problème.

leojean890: ouais tu fais du faux c++ car en C-style quoi:)

leojean890: ouais les pointers c ton quotidien xD

Default avatar.png Sideway: C +tôt basic pourtant :o

leojean890: cte joke xD

Remi.: Je n'aurais pas pensé que le C++ était si difficile d'accès avec l'habitude du C.

R4N4R4M4: Les utiliser ça va, mais c'est les faire qui va être long, parce que je cherche à partir sur les meilleures pratiques

Default avatar.png Sideway: merci merci :')

leojean890: bah c juste qu'il n'a pas l'habitude d'utiliser la POO, ça change mine de rien^^

leojean890: ah oui tu veux faire une vraie conception objet:p

Default avatar.png Sideway: et il y a des nouveaux objets, les vecteurs, certains opérateurs d'allocation dynamique etc.

R4N4R4M4: C'est surtout les histoires de syntaxe, les trucs du genre vector<>, .delete(), shared_ptr, etc... les trucs qu'il faut savoir ce qu'ils font en fait

Remi.: delete -> free

Default avatar.png Sideway: les librairies aussi, qui sont pas les memes

Remi.: au meêm titre que new -> malloc

R4N4R4M4: et les instanciations lancent des trucs tout seul, du coup faut suivre

Default avatar.png Sideway: delete[] pour un tableau aussi je crois ^^'

Remi.: Sauf que malloc nécessite la taille en octet je crois, alors que new prends le nombre de valeurs, et connais leur taille en octets

Remi.: Une instanciation exécute la fonction constructeur

R4N4R4M4: Là je viens de voir un bug, je faisais l'input dans le constructeur, et j'avais oublié ça, du coup j'avais un autre input ailleurs, et je lisais deux lignes pour une unit...

Remi.: Là où ça devient un peu plus délicat, c'est que tu peux avoir plusierus constructeurs selon la manière d'instancier

R4N4R4M4: donc, il faut que je prenne le parti une fois pour toute de me dire, est-ce que j'input dans le constructor ou ailleurs, une fois que j'aurai choisi, ça ira mieux

Remi.: Je déconseille l'input dans le constructeur

Remi.: Le constructeur sert à allouer la mémoire, mettre des valeurs par défaut

R4N4R4M4: oui, du coup je me rends compte parce qu'avec le C, tu te souviens à peu près où tu mets les trucs alors que là, ton code s'obfusque au fur et à mesure et avant de retrouver où c'est...

Remi.: Mieux vaut faire les inputs après avoir déclaré tes objets

R4N4R4M4: d'ac

Remi.: un truc tout con : quand tu appelles une fonction avec les paramètres passés par copie

R4N4R4M4: du coup c'est ce genre de question où je vais me faire pièger tant que j'ai pas les bons automatismes

Remi.: les constructeurs des objets sont appelés

R4N4R4M4: Arf, c'est pour ça que je préfère les pointeurs :D

R4N4R4M4: et c'est ce genre de trucs auxquels il va falloir que je m'habitue

Remi.: myFunc(myClass c){...}

Remi.: le constructeur de C est appelé

Remi.: alors que myFunc(myClass& c)

Remi.: le constructgeur n'est pas appelé

Remi.: Du coup, le constructeur doit vraiment s'occuper de ce qui est spécifique à l'instance de l'objet

Remi.: Et tous tes instances de l'objet ne nécessitent pas de lire les inputs.

R4N4R4M4: Oui y a ça aussi, moi je passe les pointeurs en C et pas les références

R4N4R4M4: ou l'inverse en fait les * au lieu des &

Remi.: Poiteur/référence, dans un premier temps, on peut considérer que c'est pareil.

R4N4R4M4: ou du coup c'est pareil en effet

Remi.: Perso je préfère les références car elles ne peuvent pas être nulles ^^

Remi.: mais sinon, dans l'exécution du code, c'est pariel.

Remi.: * pareil

R4N4R4M4: Ah, je cherchais justement à les initialiser à NULL et cpp a râlé, du coup je sais pas initialiser les références

Remi.: Tu n'initialise pas une référence.

R4N4R4M4: il m'a dit de le initialiser dans le constructor, mais bon...

Remi.: Une référence se prend sur un objet existant

Remi.: myClass obj1

b0n5a1: une ref t'es obligé de lui donner à bouffer une instance

R4N4R4M4: oui du coup ça pourrait être null aussi, mais bon :D

Remi.: myClass* p = &obj1

Remi.: Non pas possible, un pointeur oui mais pas une ref

R4N4R4M4: jusque-là ça va

Remi.: Si t'as une fonction f(myClass& c)

dwarfie: automaton2000 , t'es rassuré , y'a pas que toi qui est Null ;)

Automaton2000: et après je ne suis pas sûr d'avoir compris la question

Remi.: quand tu l'appeles c'est f(&obj1)

Remi.: * f(obj1)

Remi.: Ca s'écrit comme si tu passais l'objet

Remi.: T'es obligé de l'appeler avec un vrai objet.

Zorg1: c'est bien ces petites discussions ça me rappelle pourquoi j'ai pas envie de me remettre au C++ :D

Zorg1: Automaton2000 es-tu un expert C++ ?

Automaton2000: au moment où il faut trouver une autre solution

dwarfie: :p

R4N4R4M4: voilà, c'est ça que j'ai du mal à visualiser, autant les * j'arrive pas trop mal, mais les & c'est trop virtuel pour moi

R4N4R4M4: Zorg1 allez viens faire du C++ avec moi :D

R4N4R4M4: alors que c'est juste un cheminement dans l'autre sens en fait

Zorg1: :thinking:

Zorg1: R4 philo

R4N4R4M4: Avec le C++ on apprend à cheminer dans les deux sens, le comble pour un cheminot :D

Remi.: Il me semble que les références existent aussi en C

Remi.: Mais à la base je ne suis pas expert en C ^^

R4N4R4M4: Oui, je passe souvent les adresses des variables en paramètre c'est assez courant

Remi.: Non là ce sont des pointeurs ^^

R4N4R4M4: Pour moi le pointeur c'est la variable qui va récupérer cette valeur d'adresse

Default avatar.png Sideway: nan, regarde scanf()

Default avatar.png Sideway: scanf("%d",&nombre);

Default avatar.png Sideway: c'est bien une réf ^^

R4N4R4M4: oui

Remi.: scanf prends un pointeur en paramètre. Et pour ne pas lui donner NULL, on passe une réf. Mais la fonction prends un pointeur.

R4N4R4M4: après j'ai peut-être pas la bonne terminologie. Pour moi si on a : int* p = &nombre alors p est le pointeur qui prend la valeur de l'adresse de la variable nombre...

R4N4R4M4: ou sa référence

Remi.: Je suis d'accord avec le vocabulaire.

b0n5a1: depuis les & y'a les && aussi maintenant ^^

Default avatar.png Sideway: je pense comme r4n4m4a4 ^^

Remi.: b0n5a1 tto sors :P

Default avatar.png Sideway: ça doit être une question de vocabulaire =)

Zorg1: bientôt les &&&

Remi.: * tu

b0n5a1: vector : push_back(const T&), push_back(const T&&)

R4N4R4M4: plutôt de la terminologie, parce que le vocabulaire, il suffit de le placer dans une discussion :D

Remi.: R4 tu chipotes ^^ b0 tu vas l'embrouiller là

Zorg1: bah les réfs c'est un passage par adresse au lieu d'un passage par valeur

b0n5a1: oups sans const le && par contre ^^

Zorg1: du moins à la base

Remi.: Oui Zorg mais là c'est la différence entre réf et pointeur qu pose soucis.

Zorg1: bah par défaut en C t'as que le passage par valeur

Remi.: Ou par pointeur

R4N4R4M4: Oui, du coup ça me parle bien de mettre l'adresse dans un pointeur, mais si tu déclares une référence &ref, du coup j'ai du mal à conceptualiser ce que représente la valeur qu'elle va contenir

Zorg1: Remi. bah non par valeur justement, t'envoie la valeur du pointeur, l'adresse

R4N4R4M4: oui Remi, tu peux passer les * ** & && etc..

Zorg1: t'es obligé de faire & devant ta struct sinon tu balances la structure

R4N4R4M4: oui je suis d'accord quand t'as un truc qui existe déjà comme une structure, tu fais &struct et ça te donne son adresse

R4N4R4M4: Mais si tu déclares int &ref; tu déclares une adresse d'un truc qui n'existe pas encore, et c'est là que je me demande ce qu'on met dans cette variable &ref...

R4N4R4M4: j'ai bien compris que l'idée au final c'est de pouvoir utiliser ref pour désigner l'objet qu'on veut traiter. Mais alors que contient &ref ?

b0n5a1: si tu fais ça le compilo te mets des baffes en c++ en te disant que t'as pas initialiser la ref

R4N4R4M4: ah ok, du coup le compilo il est d'accord avec moi :D

b0n5a1: int& ref; le compilo te mets une tarte

R4N4R4M4: Donc tu affectes directe int &ref = ... et c'est quoi que tu mets derrière le égal pour que ça corresponde ?

Remi.: Est-ce que c'est plus clair comme ça ?

Remi.: http://chat.codingame.com/pastebin/c8b8dde3-12d2-457e-99df-f6d5aafc952c

b0n5a1: int z = 2;

   int& ref = z;

b0n5a1: par exemple

Remi.: int* ref = &z

b0n5a1: int z = 2; int& ref = z; ++z; cout << ref << "\n";

R4N4R4M4: C'est clair Remi. Syntaxiquement parlant, je pense avoir compris à peu près comment ça s'utilise. C'est conceptuellement que ça me pose un problème de compréhension, parce que je ne vois pas trop comment se déroule le passage de paramètre là : void f2(CToto& t) µ dans le sens de ce qui est transféré en mémoire, en fait


Remi.: En mémoire, tu as ton instance "toto" qui ne bouge pas

b0n5a1: R4N4R4M4 ois ça comme un pointeur d'un point de vue compréhension

b0n5a1: vois*

Remi.: A l'appel de la fonction, c'est l'adresse qui est passée

Remi.: mais dans la fonction, tu manipule la même instance "toto" de CToto

R4N4R4M4: Bon d'accord alors en fait ce sont deux syntaxes différentes pour faire la même chose

Remi.: Pas tout à fait

Remi.: car dans f1, c'est une copie de toto que tu manipules

b0n5a1: et "const Toto& toto" idem avec interdiction de modifier toto (à moins d'avoir un membre "mutable" pour authoriser sa modif

R4N4R4M4: oui f1 d'accord y a pas photo ;)

Remi.: Si tu modifies toto ça ne se comportera pas pareil

R4N4R4M4: Mais entre f2 et f3 du coup c'est pareil

Remi.: je te refais un autre exemple

Remi.: Oui pour f2 et f3

3141948: C comme poster une lettre à la poste. Tu mets l'adresse vers laquelle envoyer le courrier.

3141948: Bon j'ai trop picolé... Bonne nuit 💤

b0n5a1: bn philRG

Remi.: 2ème exemple

Remi.: http://chat.codingame.com/pastebin/5b002608-02e4-41bf-909a-1a851941dd27

b0n5a1: mutable int val; // et f4 passera ^^

Remi.: Faut pas compliquer les choses ^^ mais oui

R4N4R4M4: Je crois avoir compris en fait

R4N4R4M4: Ce qui me trompe c'est encore la terminologie

Stilgart: il ne fait pas de sens le commentaire de f3

b0n5a1: par rapport au C oui R4N4R4M4 ça peut t'embrouiller au début

R4N4R4M4: Quant on passe un paramètre avec un pointeur en fait on passe bien le pointeur en paramètre qui entre dans la fonction et qu'on pourra utiliser

Stilgart: il faut que p soit une adresse valide vers une zone de la bonne taille (ou plus grande)

Remi.: Ce que je voulais dire Stilgart, c'est que dans f3 on n'est pas à l'abri d'avori été appelé avec un paramètre NULL, alors que c'est impossible avec f2

R4N4R4M4: Alors qu'avec la référence, on ne passe pas le paramètre, on présente l'objet à la fonction et c'est le paramètre qui va "capter" l'adresse de l'objet. Donc dans ce cas il n'y a rien qui est passé, c'est le paramètre qui fait du pull au lieu de recevoir la valeur en push :D

b0n5a1: avec f2 si, et ça te pétera à l a tête

Stilgart: ou n'importe quoi qui a été cast en foo* et qui conduit a segfault dans le meilleur des cas

b0n5a1: http://chat.codingame.com/pastebin/131b25c9-7202-49d3-a8f7-707ff00c28ec

b0n5a1: commente les 2 premo

b0n5a1: ières lignes du main pour que ça pète pas

R4N4R4M4: Oui le truc du null c'est sans doute important, je passe mon temps à gérer des NULL en C

Stilgart: R4N4R4M4: dans un premier temps, manipule des pointeurs comme en C

R4N4R4M4: Bah justement il faut pas parce que je vais avoir plein de trucs à delete() après

Stilgart: (ça sert à rien de se taper toutes les difficultés de front)

Stilgart: si c'est pour CG, c'est encore plus vrai

Remi.: Alors non R4N4R4M4 .. les delete c'est quand tu fais des new

Stilgart: perso, mes codes de multi, c'est gros tableau + pointeurs

Stilgart: 0 new, 0 delete

Remi.: Si tu fais myClass c, *p=&c, il n'y a pas de delete à appeler.

R4N4R4M4: Ah ok, du coup c'est comme je fais en c

b0n5a1: ouais R4N4R4M4 fais gaffe si tu cherches de la grosse perf...les vecteurs et autres tu va finir par les benner et faire du C

Remi.: C'est comme les malloc/free en C

Stilgart: myClass *p = &nodes[nodeId]; c'est tout à fait valide

R4N4R4M4: Ah moi je voulais faire des classes propres et tout et tout :D

Stilgart: c'est complètement indépendant

b0n5a1: ouais mais si tu veux de la perf, max de simus oublies le propre direct

Remi.: Tu peux faire des classes propres, mais la philosophie du new/delete fonctionne pareil que malloc/free

Stilgart: pas tout à fait

Stilgart: ça appelle des constructeurs/destructeurs

Stilgart: et j'ai cru lire que R4 faisait des IO dans le constructeur

Stilgart: (ce qui est suicidaire)

R4N4R4M4: Oui Remi, faut que je me lance dans des destructors, et ça j'ai encore jamais fait

b0n5a1: oui pour les io

Remi.: Ca je lui ai découseillé.

Remi.: * déconseillé

R4N4R4M4: Bah moi, quand je construis, je construis !

Remi.: Destructeur c'est pas sorcier.

Stilgart: bref, il y a de la marge sur le coté "classes propres"

Stilgart: et ça n'a rien à voir avec le débat pointeur/référence

R4N4R4M4: Du coup le constructeur crée l'objet et ensuite on fait le reste

Remi.: CToto{ CToto(); // constructeur ~CToto(); // destructeur };

Remi.: Le constructeur sert à allouer la mémoire(new) et à mettre des valerus par défaut

b0n5a1: R4N4R4M4 si tes classes tu passes Machin* à Machin en membre comme t'as prévu ... le dtor par défaut fait son boulot

Remi.: Dans le destructeur, tu libère la mémoire allouer dans le constructeru (delete)

b0n5a1: mais ça mange pas de pain de l'écrire même s'il fait rien

b0n5a1: et surta

Remi.: * allouée

b0n5a1: et surtout de le mettre virtual si tu héritrs de la classe

**Stilgart hésite à dire "osef les destructeurs"

b0n5a1: c'est ça Stilgart ^^

Remi.: Pour CG alors. MAis pas dans la vraie vie ^^

Stilgart: surtout, ça risque d'être destructif d'en mettre... et je crois pas que R4 en soit à comprendre le virtual

Stilgart: Remi.: laisse les problèmes se poser

R4N4R4M4: Bah si, j'ai lu des trucs sur le virtual, le problème c'est que quand tu pratiques pas, ça reste virtuel

Stilgart: quand R4 fera des new dans ses constructeurs, on pourra causer destructeur

b0n5a1: t'as besoin de l'écrire la pupart du temsp que pour désallouer ce qui a été dynamiquement alloué (construction et/ou "vie"/manips de l'instance)

Remi.: Mais à la base c'est lui qui parlait de faire des destructeurs ^^ j'explique juste comment ça marche.

b0n5a1: sinon le dtor t'en a juste RAF

R4N4R4M4: Dans mon code WAIT mon constructeur appelait l'input qui faisait des new :D

R4N4R4M4: tout en un :D

Stilgart: surtout que la règle sur le virtual n'est pas celle qui a été donnée

b0n5a1: ouais j'ai "simplifié"

**Remi. précise que dans CG, ses classes n"ont ni ctor ni dtor ^^

Stilgart: b0n5a1: c'est bien un truc sur lequel il ne faut pas :D

b0n5a1: on le noie déjà assez dans des "dérails" :D

b0n5a1: détails*

**Stilgart a souvenir de déboguer sur l'assembleur une connerie du genre

Stilgart: bah, moi je suggère de soigner les constructeurs et de se contenter d'une couche objet simple :D

Remi.: En général, quand je fais une classe, c'est pour surcharger les opérateur== ou <, sinon je fais des struct.

**Stilgart regarde son code...

Stilgart: non :)

R4N4R4M4: Ah ça les structs ça va je connais :D

Stilgart: mais je suis d'accord que faire des classes n'a que peu de sens s'il n'y a rien d'abstrait

Remi.: Une classe c'est une structure mais avec des fonctions

b0n5a1: R4N4R4M4 dans ce que je t'ai filé t'as le strict minimum syndical (à part que je mets le dtor aussi même quand pas besoin)

Stilgart: Remi.: non

b0n5a1: houla non

Stilgart: tu es en train de dire qu'on peut pas faire de POO en C là

Remi.: Stilgart c'est pour faire simple ^^

b0n5a1: hihi

R4N4R4M4: oui j'ai vu, ça va bien m'aider pour la syntaxe

Stilgart: j'ai parlé de *code* simple (et de laisser les problèmes venir)

Stilgart: pas de description simple de concepts compliqués

R4N4R4M4: donc mon idée d'instancier direct une classe Game qui fait tout, c'était pas une bonne idée au final

Remi.: Je ne connais pas assez le C pour parler de POO en C. Pour moi la POO nécessite des classes ... donc là on arrive sur ce que je ne connais pas et je ne vais pas pouvoir entrer dans le débat.

Zorg1: m'ouais si tu veux du code simple t'évites C++ à mon avis mais bon :D

b0n5a1: enfin minimum syndical...y'a 2/3 ctors valués

Stilgart: Remi.: struct et class c'est quasi pareil

Stilgart: (je parle des mots clés)

Stilgart: en C, tu remplaces les méthodes par des pointeurs de fonctions

Stilgart: le mot clé class de C++ allège juste la syntaxe, de ce point de vue là

b0n5a1: ça me rappelle des mecs y'a des années qui ont repris un jeu full c++ (interfaces/héritages...) pour le repasser en C avec struct pour je sais plus quelle console ^^

Stilgart: et pour faire de la POO, il faut des classes *abstraites*

R4N4R4M4: Ah ça y est ça marche mieux en enlevant l'input du constructor, puisque je rappelais l'input après ça faisait doublon

b0n5a1: le IStrategy R4N4R4M4 dans ce que je t'ai filé ^^

Stilgart: un code avec des classes mais rien d'abstrait, je peux de réécrire le code en beaucoup moins de locs en virant la couche de classes

Remi.: Pas de classe, pas de classe abstraite (à prendre dans le sens de : pas de bras, pas de chocolat) ^^

R4N4R4M4: b0n5a1 pas mal les stratégies par league

Stilgart: oui, mais j'insiste parce que j'en ai marre de voir du code objet en Java où tu as 0 utilisation d'interface

Stilgart: et que je te recode en 2 fois moins de locs en C

b0n5a1: ouais mais au bout d'un moment ... StrategyBronze, StrategySilver je fini par les delete (j'ai les traces dans git ^^)

Remi.: Dans la plupart des design pattern que je connais, on nutilise même pas de classe abstraite, mais direct des interfaces (fonctions virtuelles pures à srucharger par la classe fillle).

b0n5a1: dans Tron j'ai un composite de IStrategy, je switch de strat en fonction de certains cas (conquête, enfermement pour survivre...)

Remi.: Désolé pour les fautes de frappe.

b0n5a1: Remi. fonction virtuelles pures c'est forcément classe abstraites (même si des fonctions sont implémentées)

b0n5a1: tu peux pas l'instancier

Remi.: Oui mais ce que je voulais dire, c'est que ce ne sont pas "seulement" des classes abstraites, mais direct des interfaces.

Zorg1: bah une interface c'est un peu une classe abstraite non ?

b0n5a1: oui

Remi.: Avec uniquement des fct virtuelles pure.

Remi.: oui

b0n5a1: même si pas que des fonctions virtuelles pures

b0n5a1: une seule suffit

Remi.: Pour une classe abstraite une seule suffit, pour une interface il n'y a que ça.

b0n5a1: et si aucune n'est virtuelle pure et que tu veux que ce soit une interface tu rends le destructeur virtuel pur

b0n5a1: (c'est la seule option qui reste)

b0n5a1: et tu surcharges dans les dérivées que les fonctions qui doivent avoir un autre "comportement" que ce que t'as mis à la cave, ça reste valide

Remi.: En tout cas c'est cool de parler technique ^^

Stilgart: Automaton2000 a enfin l'occasion d'apprendre des choses utiles (autre que la tortue)

Automaton2000: bon je sens que c'est un peu ce que je lui demande de faire une fonction pour calculer la distance ...

b0n5a1: ha...la tortue va voyager

b0n5a1: bon, à+, je vais peut être me faire une petite partie de Northgard ^^

Remi.: a+ b0n5a1

R4N4R4M4: A+

Zorg1: c'est bon le cours "C++ from scratch" est fini Automaton2000 ?

Automaton2000: en fait, il suffit de lancer un test

Zorg1: quand je t'écoute l'informatique c'est si simple avec toi Automaton2000 ^^

Automaton2000: je m'en souviens plus trop

R4N4R4M4: J'ai fini mon WAIT, c'est long :D

R4N4R4M4: J'ai pas réussi à instancier mes objets dans des vectors autrement qu'avec de new et des pointeurs, du coup j'ai fait les destructors aussi, on verra bien

R4N4R4M4: Je fais une pause et j'attaque la commande FIRE...

MyMonkey: Tu fais des vector<Unit*> ?

R4N4R4M4: Oui, car avec un vector<Unit> units; j'arrivais pas à conserver mes instances avec Unit u; units.push_back(u); La déclaration de u étant fugitive, j'ai pas su comment faire persister l'instance

R4N4R4M4: du coup j'ai fait vector<Unit*> units; Unit u* = new Unit(); units.push_back(u);

R4N4R4M4: et j'ai ajouté un dtor pour être propre

MyMonkey: units.push_back(u) fait une copie. Tu peux faire units.push_back(Unit()); Unit& u = units.back();

R4N4R4M4: ah oui en effet, y a des possibilités je découvre :D

R4N4R4M4: Ok je note et j'essaierai avec ça

R4N4R4M4: Par contre, units.push_back(u) je suis pas arrivé à réutiliser l'instance après, du coup je réessaierai

R4N4R4M4: le push_back(Unit()), ça fait un new par contre non ?

R4N4R4M4: Dans tous les cas ça fait des new non ?

MyMonkey: Quand tu fais comme ça, les modifs de u ne sont pas mémorisées dans le vector. Oui ça fait un new mais en fait ça va allouer plusieurs Unit d'un cup

MyMonkey: coup

MyMonkey: Donc, c'est moins inefficace que de faire des new 1 par 1. Si on connait d'avance la taille, on peut faire un units.reserve(numUnits)

R4N4R4M4: d'ac merci, j'essaierai ça aussi

R4N4R4M4: Par contre si je veux faire Unit* u = &units.back(); ça n'a pas l'air de marcher

Zorg1: en train de rattraper les AoC que j'ai pas fait ^^

Zorg1: bon le 12 c'était pas si difficile que je pensais

R4N4R4M4: GG Zorg1

Zorg1: je suis franchement à la bourre j'ai du 1 au 17 (sans le 4) :(

Remi.: Si ça peut te rassurer, je suis encore plus à la bourre que toi.

Remi.: Je n'en ai fait aucun ^^

R4N4R4M4: Bon je crois que j'ai compris mon bug. En fait j'essayais de choper un pointeur sur mon vaisseau pendant la lecture des unités. Or, la taille du vector était à chaque fois augmentée pendant la lecture, ce qui déclenchait une réallocation, et donc une perte de toutes les références. Voili voilou... Faut que je remplisse d'abord et que je refasse une boucle ensuite du coup...

Remi.: Attention aussi à ne pas confondre un pointeur avec un vector::iterator

EruRoraito: salut les gars petite question rapide comment extraire le nombre de 1 dans 1011 (type number) en javascript ?

EruRoraito: sur python j'ai vu qu'il y a la methode count

EruRoraito: une equivalence en js ?

Remi.: Ma 1ère idée (mais jen e connais pas trop le JS) serait de le convertir en string, puis de le parcourir caractères par caractres pour compter les '1'.

R4N4R4M4: Remi, ah oui ça se complique avec les iterator, j'ai pas encore creusé ça

Remi.: Mais ça ce serait la solution C++, peut-être qu'il y a une fonction JS toute prête pour ça.

EruRoraito: j'ai eu la même idée Remi, mais je pensais qu'il existerais une équivalence a count() de python

Remi.: C'est possible, mais c'est pas moi qui te répondrai dans ce cas.

R4N4R4M4: EruRoraito en JS du peux convertir directement en chaîne avec 1101+"" puis faire un split()

EruRoraito: et du coups apres mon split je parcours et je compte le nombre de 1

EruRoraito: merci les gars pour vos réponses au top

R4N4R4M4: après tu peux filter() tu obtiens un autre array et tu prends length

R4N4R4M4: ou boucler dessus si tu veux aussi

pardouin: "1101".split("1").length - 1

R4N4R4M4: pas mal pardouin

pardouin: (1101+"").split("1").length - 1

pardouin: pour le cas général

darkhorse64: y a pas popcount en JS ?

EruRoraito: c'est à dire "pour le cas général" ?

Default avatar.png masknksnvsndvo: si tu veux être rapide je suggère de ne pas le transformer en string mais de diviser le nombre par des puissance de 10 de suites en suite pour avoir chaque nombre et juste determiner si c'est 1

pardouin: ben si tu as un nombre nb tu fais (nb+"").split("1").length - 1

EruRoraito: ah d'accord

R4N4R4M4: "1101".replaceAll("0","").length

EruRoraito: nb+"" permet de convertir un int en string c'est ça ?

pardouin: oui

R4N4R4M4: Oui, il va considérer que tu veux obtenir un string

pardouin: masknksnvsndvo c'est O(length) dans les deux cas

pardouin: le tien est peut-être un poil plus rapide

pardouin: mais ça doit pas changer grand chose

Default avatar.png masknksnvsndvo: oui mais quand tu fait un string tu prend de la mémoire

Default avatar.png masknksnvsndvo: plus

EruRoraito: et si c'est déjà un string ?

Default avatar.png masknksnvsndvo: si c un string il y a aucune raison de ne pas utiliser votre methode

Default avatar.png masknksnvsndvo: convertir prend plus de temps

pardouin: string.match(/1/g) || []).length

pardouin: ça évite de split et de créer l'array totale

pardouin: mais bon c'est du pinaillage

EruRoraito: votre pinaillage m'aide à voir plusieurs solutions et plusieurs approche haha

EruRoraito: merci les gars :)

pardouin: j'ai une parenthèse qui part en vrille

pardouin: (string.match(/1/g) || []).length

Default avatar.png masknksnvsndvo: je ne connais rien en js donc ne prend pas ma parole

pardouin: rassure moi c'est pas un nombre entier que tu as converti en binaire ?

pardouin: parce que sinon il y a beaucoup plus rapide

EruRoraito: pardouin oui c'est exactement ça

EruRoraito: c'est un nombre entier que je convertis en binaire

EruRoraito: ensuite je veux connaitre le nombre de 1 dans la version binaire

pardouin: tu peux juste faire des divisions successives par 2 du nombre

pardouin: et tu ajoutes 1 quand le reste est 1

Default avatar.png masknksnvsndvo: en effect si le nombre est binaire faire la somme du nombre comme : sum(int(input())) serait bien plus rapide

b0n5a1: R4N4R4M4 dans ce que je t'ai filé ... les trucs sont préalloués dans le vector, puis alimentés (avec un resize à chaque tour de mémoire aussi)

b0n5a1: v.resize(n); for (Unit& u : units) u.input() (si t'as gardé cette façon de faire)

b0n5a1: Zorg1 : Northgard ... fonce :D

b0n5a1: R4N4R4M4 12:10AM Par contre si je veux faire Unit* u = &units.back(); ça n'a pas l'air de marcher .... en alimentant le vector dans la foulée ... tu t'es tiré une balle dans le pied, ne fais plus ça :D

b0n5a1: bonne nuit !

Remi.: bn b0n5a1

R4N4R4M4: Merci b0n5a1, je lis un peu de la doc, je vais tester plein de truc. Le resize() est pas mal. J'essaie de comprendre les iterators aussi, encore un truc bizarre :D

R4N4R4M4: Unit *p = &(*it); Finalement c'est logique

Remi.: Bon allez, encore 70CP en golf et je passe 6ème ^^ par contre le top 5 est inateignable.

Remi.: Bonne nuit les gens.

R4N4R4M4: bn