Technologie Concours de programmation CodinGame

Posté par (page perso) . Édité par Davy Defaud, Nÿco et baud123. Modéré par Xavier Claude. Licence CC by-sa
Tags :
18
20
oct.
2012
Technologie

Le 25 octobre à 18 h aura lieu CodinGame #2, un challenge de programmation qui permet de remporter des Nexus 7 et, pour ceux qui le souhaitent, de trouver un boulot. C’est gratuit, ça se passe en ligne et c’est anonyme.

L’épreuve dure 3 heures, pendant lesquelles il faut essayer de résoudre 3 problèmes dans le langage de son choix parmi C, C++, Python, PHP, Java et C#. L’environnement de développement proposé donne accès à un éditeur de code et un shell Bash, pour lancer son programme depuis le navigateur.

Vous pouvez aussi venir sur place :
Cap Omega, Rond-point Benjamin Franklin, 34960 Montpellier.

NdM : Il semble qu’il ne soit pas requis que le code produit soit libre/open source…

  • # Zut, pas de langage sympa

    Posté par (page perso) . Évalué à  9 .

    Je me serais bien inscrit à ce concours mais il n'y a pas de langage que je maîtrise bien (Ruby, JS, Golang), ni que j'ai envie d'apprendre (Rust, F#, Clojure). Je trouve dommage qu'il n'y ait qu'une liste très restreinte de langages que l'on peut utiliser lors d'un tel concours. Pourtant, c'est une limite assez artificielle : un autre concours, l'Agile Cup, a su éliminer cette contrainte.

    La plateforme de l'Agile Cup fonctionnait avec un énoncé (résoudre un labyrinthe) décliné en plusieurs niveaux de difficulté croissante (25 niveaux IIRC). On développait son programme chez soi, celui-ci se connectait au serveur de l'Agile Cup pour récupérer le premier niveau, le résoudre puis envoyer la solution au serveur. Si la solution était correcte, on avait alors accès au second niveau… pour 10 secondes ;-)

    Le but était donc d'avoir un programme de plus en plus complet, capable de passer tous les niveaux. Et comme ce programme tournait chez soi, on pouvait le coder dans le langage de son choix. J'espère que cela inspirera les organisateurs de CodinGame pour les prochaines éditions.

    PS : pour être honnête, je ne suis pas dispo le 25 octobre (vous saurez bientôt sur LinuxFr.org pourquoi ;-) ), sinon, j'aurais tenté le coup avec le C.

  • # Ma participation.

    Posté par (page perso) . Évalué à  4 .

    Au sein de mon école, on m'a poussé à venir faire ce concours. Aujourd'hui, je ne peux pas réellement dire si je vais participer ou pas (je suis en stage et je rentre généralement à Montpellier vers 20h) mais j'aimerais bien pour relever le défi de mes collègues. Au-delà de ça, j'ai compris que votre barème porté l'accent sur la qualité du code. En ayant fait les exercices d'entraînement j'ai remarqué votre notation et en discutant avec d'autres personnes qui ont fait le concours l'année dernière, j'ai pris en compte le niveau aussi.

    En somme, je suis assez curieux de savoir comment vous pouvez analyser la qualité du code. Est ce que c'est fait de façon automatique, par le biais d'une moulinette (ce que je pense) ou par l'humain. Les critères qui sont sortis dans mon test sont semblables à ceux qu'on retrouve dans des concours comme Prologin ou encore les Olympiades Informatiques ou même la manière dont est corrigé mes projets dans mon école, en réalité, je ne vois pas la différence entre votre concours et les autres au niveau de la notation.

    De plus, la qualité d'un code peut être très subjectif par le biais de la définition qu'on peut donner à « qualité ». En somme, j'aurais la capacité de résoudre vos exercices en une seule ligne de code en C (ou en essayant de faire du ASCII-Art), on ne pourra malheureusement pas dire que je fais preuve de qualité dans mon code (maintenabilité, partage, etc.) et pourtant celui-ci peut très bien fonctionner et passer tous vos tests.

    Je m'interroge donc. Et c'est drôle de voir un évènement de Montpellier sur LinuxFR.

  • # Annales

    Posté par (page perso) . Évalué à  8 .

    Est-ce que les problèmes de l'édition précédente et de l'édition courante pourraient être accessibles ?
    Je ne pourrais pas y participer (un peu trop tôt pour moi) mais j'aime bien ce type d'exercices… Et l'interface est vraiment bonne, 100x meilleure que celle de topcoder !
    Sérieusement c'est la meilleure interface que j'ai vu pour l'instant (entre l'interface mail des annales ACM pas hyper interactif et l'interface foireuse en java de topcoder).
    Sinon si vous avez des adresses pour des concours/exercices de ce genre, je prends !

  • # Lisibilité

    Posté par (page perso) . Évalué à  5 .

    J'ai essayé leur tuto avec python, et j'ai perdu 5% des points pour avoir utilisé map, ce qui est censé nuire à la lisibilité.

    Genre

    map(int, raw_input().split())
    
    

    c'est moins lisible que

    [int(i) for i in raw_input().split()]
    
    

    Ça me gave ces gens qui ont jamais rien vu d'autre que du Java dans leur vie et qui flippent dès qu'ils voient la moindre trace de paradigme fonctionnel.

    • [^] # Re: Lisibilité

      Posté par (page perso) . Évalué à  4 .

      Je n'arrive plus à retrouver les références qui vont bien alors j'espère ne pas raconter des conneries mais il me semble que map est boudé par des gens très influents parmi ceux qui font Python et les list comprehension sont préférées. Si quelqu'un me retrouve des sources à ce sujet, ça m'intéresse.

      La seule source que j'ai retrouvé c'est d'un type qui a écrit des livres sur Python (et avec qui j'ai travaillé directement :)) : il dit que map c'est bien avec des fonctions mais dès qu'on est obligé de sortir une lambda il vaut mieux utiliser une list comprehension. http://effbot.org/zone/python-list.htm

      Bref dans ton cas c'est bien utilisé, c'est peut-être juste une mauvaise analyse automatique… Mais c'est un peu rapide et surtout pas cool de les traiter de dev Java. Au passage, dans certains cas il faut faire attention avec map avec les changements de Python 3 (avant c'était de type list). Lorsqu'on est obligé de rajouter des list() autour de ses appels à map, ça perd de son charme.

    • [^] # Re: Lisibilité

      Posté par (page perso) . Évalué à  2 .

      Je comprends pas vraiment cette critique et surtout cette comparaison avec dans le lot le paradigme fonctionnel … La première chose, c'est qu'en ignorant la remarque de Maxime (qui est pertinente, hein !), les deux lignes sont équivalentes sur la lisibilité du code (quand bien même, et je le redis, cette affirmation est subjective). Ensuite, que cela soit le premier exemple ou le deuxième, tout deux ne sont pas incompatible avec le paradigme fonctionnel. Les listes en compréhension par exemple sont très utilisé en Haskell et la fonction map est très utiliser en OCaml (à défaut de n'avoir pas les listes en compréhension nativement - on peut les utiliser avec Batteries). Au final, je ne vois pas le lien avec cette phrase: « Ça me gave ces gens qui ont jamais rien vu d'autre que du Java dans leur vie et qui flippent dès qu'ils voient la moindre trace de paradigme fonctionnel. ».

      Au-delà de tout ça, il est vrai que perdre 5% des points pour l'utilisation de l'une ou de l'autre est exagérer et cela ne devrait pas être le cas. Il y a donc bien un côté subjectif derrière tout ça et de plus, ce concours n'apporte réellement rien de novateur par rapport aux autres concours que j'ai cité plus haut (puisqu'on enlève ici le l'approche qualité qui semble être au cœur de votre communication) donc, au final, il n'est pas très gratifiant de participer à ce genre de concours et il n'y a que l'appât du gain qui me fera prendre le Tram pour aller le faire. Mais sinon, rien d'intéressant à signaler sauf si vous (je parle de l'entreprise qui ne semble pas dire un mot) me prouver le contraire (et je serais très heureux de débattre).

      • [^] # Re: Lisibilité

        Posté par (page perso) . Évalué à  6 .

        Désolé de ne pas avoir répondu tout de suite. Ce n'est peut être pas clair, mais la lisibilité n'est pas prise en compte dans le score, c'est informatif seulement (dernier point de la FAQ http://www.codingame.com/cg/#!faq). Avec Python c'est pylint qui est utilisé et qui remonte le problème que Georges évoque (je suppose que les personnes qui ont réalisé pylint ne sont pas des développeurs Java, mais il faut le leur demander ;-)).
        Du point de vue de "l'entreprise", les codingame on pense juste que c'est un concept sympa pour permettre à n'importe quel codeur qui aime programmer de trouver un boulot autrement. Derrière cet évènement, c'est une petite startup Montpellieraine qui casse sa tirelire avec 5 nexus7.
        On a beaucoup bossé autour de l'environnement de dev en ligne et les compliments dans ce sens nous on fait particulièrement plaisir !

        • [^] # Re: Lisibilité

          Posté par (page perso) . Évalué à  2 .

          C'est agréable de voir une réponse de l'entreprise sur linuxfr :) ! Il est vrai que l'environnement en ligne est très bien fait, en tout cas, j'ai pas eu de gêne quand je l'ai utilisé ce qui est pas mal en somme (j'ai ma configuration vim aux petits oignons). Après, j'ai plus été interpeller dans votre présentation général sur le site par cette approche qualité justement (d'où ma critique) ce qui fait que j'ai un peu ignorer l'interface que vous proposé.

          Après, les concours menés par des entreprises sont en général un moyen de sponsoriser un produit derrière (et je pense que ici, c'est votre interface utilisateur) mais j'ai plus pensé que c'était pour montrer ce côté « notation sur la qualité du code », ce qui m'a beaucoup gêner au départ. Au final, et après ce malentendu que j'ai fait, je peux seulement dire que ce que vous faites est louable.

          Je rajoute un dernier point pour vous demander les technologies que vous utiliser pour l'UI. Bien entendu, je comprendrais que vous ne puissiez les divulguer mais puisqu'on est sur un site où le Libre est le mot maître, autant s'ouvrir un tout petit peu et faire un partage juste de votre expérience. Personnellement, je m'intéresse guère aux UI mais cela peut intéresser certaines personnes :) !

          Bonne continuation et j'espère être là pour le concours.

          • [^] # Re: Lisibilité

            Posté par (page perso) . Évalué à  2 .

            La dernière fois c'était vraiment sympa et j'espère que le 25 ça sera au moins aussi bien.
            Coté UI, nous utilisons GWT avec GWT-fx pour les animations. Le design a été réalisé avec Inkscape. Les font proviennent de Google WebFonts et l'éditeur de code c'est celui de ace.ajax.org

  • # Pourquoi en semaine ?

    Posté par . Évalué à  2 .

    Dommage que ce soit en semaine, je me serais inscrit sinon…
    Le week-end ce serait plus adéquat pour les personnes qui travaillent.

  • # Je me suis inscrit

    Posté par (page perso) . Évalué à  2 .

    Je me suis aussi inscrit juste pour le plaisir : l'interface est vraiment agréable et les deux exercices donnés à titre d'exemple montrent l'intérêt de voir son code analysé par un tiers. Programmeur Python, je me suis étonné comme Georges Dubus de la sanction des -5% due à l'emploi de map mais j'ai apprécié l'intervention de Frédéric Desmoulins et le fait que cette sanction ne soit donnée qu'à titre informatif. Bref, l'un dans l'autre, un bon moyen de s'amuser !

    Trust the Python !

  • # Inscrit!

    Posté par (page perso) . Évalué à  3 . Dernière modification : le 23/10/12 à 20:53

    Je suis inscris, j'espère ne pas oublier le moment venu !
    J'ai fait les entraînements en C++, l'IDE est sympa, je sais pas si je coderai dedans pour le concours, ya des trucs qui passent pas, genre le copier/coller à la molette veut pas, puis sur mon Geany j'ai mes raccourcis clavier et autres petites habitudes.

    • [^] # Re: Inscrit!

      Posté par (page perso) . Évalué à  2 .

      C'était sympa, j'ai passé les deux premiers exercices sans difficulté et le dernier c'était l'horreur…
      J'avais l'impression que ça nécessitait des connaissances en mathématiques que je n'avais pas (en stats plus précisément), en tous cas j'ai vraiment pas trouvé la solution donc j'ai fait une grosse boucle bourrine en sachant que ça répondrait pas aux critères de performance. Les orgas m'ont confirmé par mail qu'il fallait pas de connaissances particulières en maths, j'en jugerai plus précisément quand on aura une correction.

      Tout ça m'a permis d'avoir 90% des points en 1 heure (dont 45 minutes sur le dernier -_-)
      Au final je suis classé 39ème sur 220 rendus.
      On attends toujours les corrections donc je sais toujours pas comment on était censés faire le dernier, mais ils ont promis les corrections pour ce week-end :-)

      J'ai aussi trouvé dommage de pas avoir un chan IRC pour l’évènement. Ça aurait permis un truc un peu convivial pour ceux qui ne sont pas sur place.

      PS: dans ceux qui ont eu 100% yen a un qui a rendu en 3h10, ce qui parait louche pour un concours ayant eu lieu de 18 à 21h oO

      • [^] # Re: Inscrit!

        Posté par (page perso) . Évalué à  2 .

        Salut MCMic,

        Bravo pour ton résultat, c'est vraiment bien 90%. On essaye de se dépêcher pour préparer le premier billet du blog avec les photos de l'event et les corrections. En fait, on va surtout essayer de voir si les candidats qui ont eu 100% nous autorisent à publier leur source.

        Super idée le channel IRC, on y pensera pour le prochain concours. Sinon, on a finalement décidé d'augmenter légèrement la durée du concours. Chaque question faisait 80 minutes, soit 4h maximum au total.

        • [^] # Re: Inscrit!

          Posté par (page perso) . Évalué à  3 .

          Ha ok.
          J'ai du mal à penser que quelqu'un qui ait besoin de beaucoup de temps sur les premières questions parvienne à faire la troisième dans le temps imparti ^

          Pour le canal IRC j'avais été sur irc.freenode.org/#codingame pour voir mais c'était vide. Pour la prochaine version il vous suffira d'y mettre un lien (voir un lien vers le client web de freenode) et ce sera surement plus peuplé.
          L'autre chose qui m'a gêné était que le site web ne soit pas mis à jour. Il semblait toujours proposer l'inscription, que ce soit pendant l'évènement ou encore après. Préparer une version du site sans l'inscription et indiquant "concours en cours… fin dans XX min" et une autre avec "Le concours est maintenant terminé" aurait aidé à plus de clarté à mon avis :-)

          Ah, et pour ce qui est de publier le code des gagnants, vous feriez peut-être mieux d'ajouter une case à cocher à l'inscription "J'autorise CodinGame à publier mon code" (voir "Je le met sous licence libre"), ça vous permettrait de publier au plus tôt, je pense que beaucoup de gens la cocherait.

          • [^] # Re: Inscrit!

            Posté par (page perso) . Évalué à  3 .

            Oui, merci pour toutes ces suggestions.

            C'était la première fois qu'on organisait un concours comme celui là au niveau national et ça nous a permis de nous rendre compte de pleins de petits détails à améliorer pour les prochaines fois.
            On met en place petit à petit toutes ces corrections.

            Encore merci en tout cas pour tous ces retours !

            • [^] # Re: Inscrit!

              Posté par (page perso) . Évalué à  2 .

              Bon, ben si je comprends bien le code publié du premier (je connais peu le python) il s'agissait d'une bête médiane :-/
              J'ai essayé la moyenne, j'ai vu que c'était pas ça, j'ai pensé à la médiane mais ça me paraissait pas logique donc j'ai pas essayé, j'aurai dû…

  • # Inscription HS

    Posté par . Évalué à  1 .

    Le formulaire s'affiche 2s puis je passe à la page des sponsors. Tout est en JS, rien à faire à la main. Frustrant.

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.