Chat:Fr/2021-12-22
GroutchKeu: o/
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
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 ?
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
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
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/
nesnes112: je suis nouvelle ici
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:
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... :(
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
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
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.
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.
TheLovelyBrocolli_ff63: ok Merci
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?
Leeeooo: Bonsoir
Outsmarted: Prise de masse euv=clidien 4000
Leeeooo: Prise de masse euclidien 4000
Orcrux: Certains ont essayé les exercices sur les boucles "for, while,..." ?
Outsmarted: Prise de masse euclidien 4000
Outsmarted: keskibaragouine
Orcrux: https://www.codingame.com/training/easy/chuck-norris
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
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
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
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
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
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
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 ^^
Sideway: je pense comme r4n4m4a4 ^^
Remi.: b0n5a1 tto sors :P
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" ?
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
masknksnvsndvo: oui mais quand tu fait un string tu prend de la mémoire
EruRoraito: et si c'est déjà un string ?
masknksnvsndvo: si c un string il y a aucune raison de ne pas utiliser votre methode
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
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
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