Chat:Fr/2021-07-02

From CG community
Jump to navigation Jump to search

IcyStar: Salut! Quelqu'un peut m'expliquer la différence entre "rejouer dans les mêmes conditions" et "lancer mon code" pour Coders Strike Back ?

Thyl: Rejouer dans les mêmes conditions faits que tu gardes tout les paramètres de bases

Thyl: genre dans Coders Strike Back

Thyl: La disposition des checkpoints

IcyStar: ok je vois, merci !

philRG: en gros tu as les mêmes données d'entrée au 1er tour, et en fonction des bots (déterministes ou probabilistes), les mêmes données d'entrée/sortie à chaque tour

philRG: en mode debug, si bot du referee joue en déterministe, je joue full déterministe

philRG: sinon après en fonctions des actions possibles de même score, je joue probabiliste

philRG: pour une meilleure mesure de mon algorithme

philRG: AlphaDevFr Cloudy Wheather non pas fait mais ça a l'air intéressant, classé difficile (?)

nicola: Le générateur pseudo-aléatoire sera dans les mêmes conditions.

philRG: apparemment oui, ceci dit sur Pacman, ce ne semblait pas être le cas

philRG: pseudo-aléatoire peut-être mais ne reproduit pas les mêmes conditions si le seed se passe sur le timestamp ou le n° de processus unix

philRG: en plus ouais sur mes bots récents, je fais même pas de seed donc pas vraiment de l'aléatoire en terme de distribution

philRG: je suis souvent un peu feignant sur la partie code, cause ça me fatigue trop les yeux

philRG: s/passe/base/

philRG: dsl pour les yeux (fautes de frappe), problème de connexion entre mon cerveau et mes doigts comme je tape sans voir ce que j'écris

philRG: donc n'attendez pas à ce que je vous lise sur plus de 5 lignes

philRG: question pour les pythonistes:

philRG: sur l'usage du modules types

philRG: http://chat.codingame.com/pastebin/a949c2f0-60c9-4def-a2ae-a40652b2516f

philRG: NameError: name 'Cell' is not defined


philRG: :-(((

philRG: ah non ça marche, c'est mon Intellisense de PyCharm qui déconne

philRG: c ballot :(

philRG: on peut pas annoter une référence de même type dans la classe :-( avec le module

philRG: faut utliser le type object

philRG: neighbors: List[Cell]

philRG: neighbors: List[object]

Tuteurtwo: Je dis peut-être une connerie, mais ne vaudrait mieux t-il pas réorganiser ton code pour ne pas faire appel à une classe qui n'est pas encore définie ?

philRG: ah oui exact, c'est dans la définition des membres de la classe que ça coince pas dans le constructeur

philRG: class Cell(object): http://chat.codingame.com/pastebin/b3616d6c-1811-4e71-9863-45fe4a5cd821

Tuteurtwo: Si la définition est dans le __init__ ça passe ?

Tuteurtwo: Je viens de tester effectivement ça passe. Bon à savoir ^^

philRG: oui ça passe dans l'init

philRG: en fait pour définir un type de classe en python, tu peux faire:

philRG: class Cell:

philRG: pass

philRG: puis ensuite tu rajoute les attributs que tu veux

Tuteurtwo: oui sans problème

philRG: au niveau maintenance de code, c'est pas mal de définir les membres en début de classe quand même

Tuteurtwo: Après je trouve ça plus propre quand c'est définie comme tu avais fait au début

philRG: oui c pour ça, j'ai importé le module types aussi pour indiquer les types comme il est souvent reproché à python de pas être lisible à cause de ça

Tuteurtwo: Il ajoute quoi exactement ? Tu ne peux pas utiliser tuple en minuscule ?

philRG: après c'est vrai que comme j'aime bien découvrir de nouveaux puzzles sur CG, j'ai tendance à oublier ce que j'ai écris

philRG: Tuple c'est une annotation du modules types

philRG: from typing import Tuple, List, etc...

Tuteurtwo: Je veux dire sans utiliser typing justement

philRG: nouveau module à partir de python v3.5 et ajouté avant le contest FC21

philRG: ah sans typing ben tu crée ton tuple avec ou sans la fonction. Typing c'est seulement pour les hints

philRG: https://docs.python.org/3/library/typing.html

philRG: C'est seulement utilisé par les Intellisense pas pour créer les types

philRG: Note The Python runtime does not enforce function and variable type annotations. They can be used by third party tools such as type checkers, IDEs, linters, etc.

philRG: enfin bref c du python/snake

Tuteurtwo: D'accord, je pense avoir compris. perso j'utilise pycharm et je fais ça dans le docstring. Si il y a un type incorret ça me le dit

philRG: ah et c'est pris en charge par l'Intellisense pour t'afficher tes membres de classe?

Tuteurtwo: Je ne suis pas familier avec intellisense mais dans les détails des fonctions et classes il y a tout

philRG: je me demande s'il y a pas la même fonction en C#, un formateur me l'avait montré à l'époque, je me souviens vaguement, la seule chose qu'il m'a montré en 9 mois de formation lol

Tuteurtwo: dans un format semblable au tient d'ailleurs

philRG: c vrai que je connais un peu le docstring mais jamais utilisé, je mettais un commentaire simple en début de fonction pour les types

philRG: mais c'est pas idéal

philRG: faudra que j'essaye le docstring, voir si au niveau lisibilité c bien et rajoute pas trop de ligne de code

Tuteurtwo: c'est pas fait pour economiser des lignes de code, au contraire c'est pour détailler au max tes fonctions

Tuteurtwo: https://resources.jetbrains.com/help/img/idea/2021.1/docstring_example_10_quick_documentation.png

Tuteurtwo: https://resources.jetbrains.com/help/img/idea/2021.1/docstring_example_100.png

philRG: ah ok aussi, mes codes sont plutôt courts et clairs. Mais ce qui manque parfois c'est de pouvoir aisément lire le type des variables, car ça ressemble vite à un roman

Tuteurtwo: ahah

Tuteurtwo: après regarde la deuxième image, c'est p-e ce que tu recherches

philRG: pour faire des documentations de code partagé, ça me paraît incontournable

philRG: en code non partagé, ça me paraît un peu superflu ceci dit si tu décris bien tes noms de variables. J'utilise souvent le docstring pour décrire brièvement ce que fait la fonction

philRG: pas pour décrire les paramètres d'entrée et sortie

philRG: mais oui c'est important de bien connaître les spécificités de ton langage

philRG: utile pour faire les tests unitaires les docstrings et doctest. J'en fais parfois sur CG sans les utiliser explicitement

philRG: Je code souvent de la même façon, et parfois j'utilise les classes de modélisation des referee en Java que je ré-écris en Python ce qui diminue bien les bugs

philRG: les bugs se font plus au niveau de l'algorithme du coup

philRG: parfois je comprends pas comment mes codes tournent du premier coup sans bug

philRG: j'aime bien la partie modélisation/gameplay des puzzles CG, j'ai l'impression de jouer à un jeu. Bon pour l'IA, je dois réfléchir un peu plus...

philRG: si je peux, je code des heuristiques mais pas toujours possible

dwarfie: reflechir plus pour progresser plus

mister_art43: bonjour bonjour, je viens de commencer ^^ et je me passionne déjà pour les petits jeux d'ia

Default avatar.png axil0w: heyo

BlaiseEbuth: Yo tout l'monde ! Automaton2000 ! AutomatonNN ?

Automaton2000: non ca c'est pas de ma faute

BlaiseEbuth: T'as quelque chose à te reprocher Automaton2000 ?

Automaton2000: j'ai jamais compris ce que tu veux un truc qui me manque

dwarfie: Automaton2000 : la capacité à dire tortue sans doute

Automaton2000: y a pas besoin de plus de 2 minutes

dwarfie: Automaton2000, ca fait 2 minutes et on attend toujours

Automaton2000: c'est pour ça que je voulais dire c'est que je vois les gens qui en font

Default avatar.png alexquenelle: bonjour a tous, quelqu'un s'y connait en c++ ?

Default avatar.png alexquenelle: enfin, quelqu'un qui code en c++ sur cette plateforme

SeebOmega: alexquenelle pose ta qiuestion on verra si on peut t qaider

Default avatar.png alexquenelle: okok

Default avatar.png alexquenelle: en gros lorsque je crée un vector de char et que je souhaite supprimer un element a un index i en faisant ca ---pList.erase(pList.begin()+i);--- ca segfault je comprends pourquoi

Default avatar.png alexquenelle: tandis que sur mon ide avec mon compilo aucun probleme

SeebOmega: et tu es sur que ton index i est toujours existant

SeebOmega: et tu n es pas dans une boucle

Magus: c'est peut être pas cette ligne qui segfault

Magus: souvent les segfaults arrivent après la ligne coupable

SeebOmega: (autre tips performance en cas de vector long, swap avec le last element du vector et pop le)

Magus: par exemple tu as fait joujou avec le vector avant, et ça rend inutilisable des pointeurs que tu auras gardé

BlaiseEbuth: --- ? Connais pas ça.

SeebOmega: Print ton vector et sa longeur avant cet appel pour etre sur avec la sortie erreur

Default avatar.png alexquenelle: oui j'avais pas pensé a swap c'est une bonne alternative

SeebOmega: penser aussi sur pas mal de jeux etc sur la platefrome tu es dans un while true, donc potentiellement apres quelques iterations ton element i n existe plus faut voir le reste du code

BlaiseEbuth: Woputain. Je viens seulement de capter que --- c'était juste pour séparer le code du reste... J'vais m'reprendre un café...

SeebOmega: BlaiseEbuth mets en un double

BlaiseEbuth: Pour moi ou parce que t'en veux un aussi ^^

SeebOmega: pour toi lol

BlaiseEbuth: Ouai j'vais faire ça...

SeebOmega: la on est passe a l aprem du coup en telework biere fraiche ca passe

BlaiseEbuth: Certes. Mais ça risque pas d'améliorer mon score de perception...

SeebOmega: jte guide ca te rajoute un d4

BlaiseEbuth: :thinking:

BlaiseEbuth: Un irish alors. :yum:

Thyl: Code CHef me sort de la tête

BlaiseEbuth: Fallait pas le faire entrer aussi...

Thyl: oui

Thyl: Le july Contest va me tuer

BlaiseEbuth: Ski july ?

Thyl: pas de ciel là

Thyl: mais bo j'ai réussi

Thyl: une histoire de XOR a

Thyl: je sais pas de quoi tu parles ski ?

BlaiseEbuth: Bah ouai ski july ?

dwarfie: XOR , le sheriff ... sheriff de l'espace ... :notes:

Default avatar.png Rendive: Comment je peux débuter mon code ?

Default avatar.png Rendive: débuger

Robinsstudio: Le plus simple est d'écrire les entrées sur la sortie d'erreur de l'IDE en ligne puis ensuite de les mettre dans une fichier que tu passes en entrée de ton programme en local.

y42nn: Salut ! Petite question concernant l'implem d'une MCTS svp, est-ce que pour ma random seed je dois prendre un truc fixé ?

y42nn: ou je la fais changer à chaque exécution

MiXFR: Bonjour à tous, une question sur un truc surement tout bête : http://chat.codingame.com/pastebin/3323a9e4-18c3-476c-89a7-4dd700506ca6

MiXFR: je cherche simplement à trier une liste

WhatTrickeryIsThis: le set met au hazard

WhatTrickeryIsThis: list.sort il va marcher je penses

MiXFR: ah bon ? je pensais que le set enlevait les doublons et ordonnait ... ok je vais tenter le sort

WhatTrickeryIsThis: sorted(test)

WhatTrickeryIsThis: le set il ordonne mes fesses

y42nn: un ordered set ça existe mais pas celui de la stl python

y42nn: en c++ tu as std::set qui ordonne + retire les doublons

y42nn: mais en python le set est l'équivalent de std::unordered_set en c++ qui se contente de hacher les éléments (=> pas d'ordre)

y42nn: en revanche ça permet d'avoir du O(1) amorti en insertion

y42nn: contre du O(log(N)) (avec N la taille du set) pour un ordered set

pardouin: free xp -> check

pardouin: en python le OrderedDict du module collections il ordonne pas le dict, il garde juste en mémoire l'ordre d'insertion -_-

pardouin: jamais utilisé

pardouin: par contre un vrai ordered map comme en c++ j'en aurais eu besoin pas mal de fois mais ça existe pas :(

Zorg1: donc python c'est nul CQFD

**Zorg1 toujours prêt pour un petit language troll ^^

Zorg1: Automaton2000 t'en es où dans ton apprentissage de Haskell ?

Automaton2000: je comprend pas vraiment ce que je fais quoi ?

Zorg1: tkt Automaton2000 ça fait ça au début ce langage

Automaton2000: ma fonction pour savoir si je dois le faire

Robinsstudio: Tiens salut Zorg1

BlaiseEbuth: Reuh

Zorg1: o/ Robinsstudio

Robinsstudio: Je viens de trouver une optimisation de dingue pour mon UTTT. Cela va-t-il suffire pour passer en légende ? *roulements de tambours*

Zorg1: ah oui t'es stuck en dessous du boss gold ?

Robinsstudio: C'est ça.

Zorg1: go go go to legend

Robinsstudio: Oui oui bah minute papillon je ne gère pas comme vous ! :rofl:

BlaiseEbuth: Suce le, tu vas monter direct. C'est comme ça que ça marche.

Robinsstudio: Je dois surveiller mon langage, c'est bien ça ? :thinking:

BlaiseEbuth: Parle pas la bouche pleine.

Robinsstudio: :joy:

Zorg1: c'est aérien ici ^^

Robinsstudio: Je crois que j'ai jamais passé autant de temps sur un bout de code 400 lignes. ^^'

BlaiseEbuth: Et après on s'étonne quand Automaton2000 dit des horreurs...

Automaton2000: il suffit pas de le dire

Robinsstudio: Exactement Automaton2000 ! :rofl:

BlaiseEbuth: Oui, il y'a le ton aussi Automaton2000

Automaton2000: évidemment que ça fait une boucle infinie

Automaton2000: mais ça vaut le coup de faire un tutoriel sur comment optimiser en python, les articles relatifs à python que ...

BlaiseEbuth: :scream:

Robinsstudio: Oh, tu enchaînes les réponses maintenant Automaton2000 ? T'es un thug ?

Automaton2000: je crois que tu es obligé de faire une erreur

Robinsstudio: Soit.

Robinsstudio: Il se contente de ressortir des réponses un peu au hasard où il recombine un peu les choses ?

BlaiseEbuth: Chaîne de markov

Robinsstudio: Ouais mais concrètement ? Je suis pas docteur en informatique moi.

BlaiseEbuth: Moi non plus. :no_mouth:

Robinsstudio: Et j'ai la flemme de lire l'article Wiki, c'est beaucoup trop mathématique;

BlaiseEbuth: https://www.codingame.com/blog/markov-chain-automaton2000/

Automaton2000: j ai pas encore eu le temps de prendre un peu de ce que j'en ai pas

Robinsstudio: Cool, ça me fait une petite lecture pendant que BT chauffe. Merci ! :ok_hand:

Zorg1: waouh "Docteur en informatique"

Zorg1: moi je suis Bidouilleur en Chef

Zorg1: chacun son job

BlaiseEbuth: Ah, t'es plus évangéliste java ?

Zorg1: le Pape Java n'aimait pas mes méthodes

Zorg1: z'aiment pas l'efficacité

BlaiseEbuth: Il t'as excommunié ?

Zorg1: l'avantage y a pas mal de Papes en Java, ça limite les inconvénients, ils s'excommunient tous entre eux

BlaiseEbuth: Ah ouai, y'en a un par version, pour assurer la rétro-compatibilité. Logique

Zorg1: Diocaise d'AbstractBuilderFactory

Robinsstudio: Vous êtes graves ! :joy:

Zorg1: bah à une époque c'était la mode l'"évangélisation Java" comme ils disaient

Zorg1: c'est assez américain comme nom, perso ça me rappelle les campagnes de conversions forcés de Louis XIV dans le midi de la France

Zorg1: après bon c'est surtout assuré la formation et l'encadrement technique/suivi des jeunes qu'ils mettent en masse sur le projet parce que c'est moins cher

BlaiseEbuth: Moi je préfère penser aux Sentinelles :3

Zorg1: ceux de l'île Indienne ?

BlaiseEbuth: :smiling_imp:

BlaiseEbuth: J'aime ce qu'ils font aux évangelistes

Zorg1: oui du moment que personne évangélise façon Louis XIV ça peut aller

Robinsstudio: Pourquoi Louis XIV en particulier ?

Zorg1: révocations de l'édit de Nantes - les dragonades qui ont suivi

Zorg1: mais il n'a pas l'exclusivité des méthodes de conversions musclés il est vrai ^^

Robinsstudio: Bah de manière générale, les rois de France, c'est pas des enfants de coeur, si je peux me permettre la vanne. x)

BlaiseEbuth: Vanne c'est en Bretagne, pas en France.

Robinsstudio: Où ça commence à taper sur les Bretons.

BlaiseEbuth: Bah ici

Robinsstudio: Oui pardon je sais pas écrire.

Robinsstudio: Bon, je crois que le moment est venu de pousser dans l'arène. :see_no_evil:

Robinsstudio: Je crois que je vais juste perdre ma première place ! hahaha

BlaiseEbuth: C'est ce que Louis XIV disait aussi. Bien qu'avec une orthographe différente...

Robinsstudio: Tant que je ne passe pas derrière Boulet, c'est l'essentiel.

Robinsstudio: C'est parti !

BlaiseEbuth: https://www.youtube.com/watch?v=XDOXbyahIJM

Robinsstudio: Ah je ne le connaissais pas celui-là.

BlaiseEbuth: On en apprends tous les jours.

Robinsstudio: Ah, je viens de passer devant Logan. Si tu nous lis, salut à toi ! :wave:

Robinsstudio: Ohoh Boulet 5ème ! Alleeeezzz !

Robinsstudio: Et c'est une nouvelle victoire pour le bot...

Zorg1: nice

Robinsstudio: Mais bon y a au moins une bonne nouvelle. Boulet a dégringolé à la cinquième place. Ça valait le coup rien que pour ça. :P

BlaiseEbuth: Mesquin...

Robinsstudio: Bah écoute, il voulait me mettre une fessée. Est fessé qui a voulu fesser.

BlaiseEbuth: :cop:

Robinsstudio: Oh mais ! J'ai oublié un truc ! J'ai laissé sqrt(2) alors que log(2) est mieux normalement !

BlaiseEbuth: Le désespoir a un visage.

Robinsstudio: Mais n'importe quoi il me manque à peine un demi point pour atteindre le niveau du bot. Tu vas pas me dire qu'un petit coup de nombre magique va pas marcher quand même !

BlaiseEbuth: :zipper_mouth:

Remi_avec_un_i: Salut tout le monde ! t'es sur quel combat de bots Robinsstudio ?

Zorg1: oui enfin log(2) sqrt(2) faut surtout muscler ton nombre de rollouts

Robinsstudio: UTTT, depuis un moment maintenant...

Robinsstudio: Mais je l'ai musclé ! Je ne fais que ça ! Je suis quasiment à 30K !

Robinsstudio: Là ça commence à devenir compliqué.

dwarfie: bon , ben finalement , il etait pas si dur que ca le sokoban :D

dwarfie: Automaton2000 : une tortue pour feter ca ?

Automaton2000: tu en es où ?

dwarfie: Automaton2000 : 100%

Automaton2000: non, mais quand tu passes par la

dwarfie: Automaton2000 , je sais , les puzzles trépassent

Automaton2000: donc je peux pas dire que c'est pas facile

Robinsstudio: Je n'ai plus d'idées pour battre le boss. Des idées Automaton2000 ?

Automaton2000: c'est le moment de la compilation

Robinsstudio: Ah oui ? Dis-en moi plus Automaton2000.

Automaton2000: c'est pas un langage de script