Journal Calendrier de l'Avent du code

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes :
29
22
nov.
2022

Cher Nal,

Connais-tu le calendrier de l'Avent du Code ?

C'est un calendrier de l'Avent, qui commence au 1er décembre et s'achève à Noël. Chaque jour, un nouveau casse-tête de programmation, en deux étapes : une simple, puis une complication du même.

Ce qui fait à mes yeux une bonne part de son intérêt, c'est qu'il est conçu comme une histoire où le joueur incarne le Père Noël, et où les programmes développés permettent de résoudre des situations concrètes plus ou moins cocasses ou tirées par les cheveux.

Les problèmes eux-mêmes commencent doucement, puis peuvent devenir assez difficiles au fil des jours, parfois même entre les deux étapes du problème du jour, où l'approche initiale peut s'avérer irréalisable pour la version compliquée et nécessiter de repenser l'approche de résolution.

Les années précédentes, j'avais trouvé ça passionnant au point d'en être addictif. Difficile de lâcher son ordinateur pour rejoindre la fête en famille, quand il reste encore un problème à résoudre. Ah, et je n'ai jamais pris le temps de réussir à tout résoudre, d'ailleurs.

  • # Vivement , le 1

    Posté par  . Évalué à 5.

    Mince, je voulais faire un journal dessus. Tu m'as devancé.

    Pour ma part, je compte les jours avant son lancement autant que j'attends d'ouvrir mon premier jour de mon calendrier Kinder :-p.

    Est-ce que çà vous dit d'ouvrir un groupe pour les lecteurs de LFR ? de cette manière , on aura un classement LFR :)

    • [^] # Re: Vivement , le 1

      Posté par  (site web personnel, Mastodon) . Évalué à 2.

      Je ne sais pas si j'aurai le temps (je voulais déjà faire du NaNoWriMo pour finaliser mes journaux et autres écrits en cours mais finalement nada). Ceci dit, un groupe LFR est une très bonne idée que j'appuie.

      “It is seldom that liberty of any kind is lost all at once.” ― David Hume

      • [^] # Re: Vivement , le 1

        Posté par  . Évalué à 5.

        J'ai créé un leadboard
        1844559-f65dbf07
        si vous vous voulez le rejoindre, il faut l'ajouter dans votre interface sur adventofcode

        • [^] # Re: Vivement , le 1

          Posté par  (Mastodon) . Évalué à 4.

          Je viens de voir le message, j'ai rejoins alors :)
          Bon, par contre le leaderboard a la valeur qu'on lui donne : hors de question de me lever à 6h du matin pour faire ça parmi les premiers…

          • Yth.
          • [^] # Re: Vivement , le 1

            Posté par  (site web personnel) . Évalué à 6.

            Pareil pour moi, surtout que j'aime faire du beau code, et que ça ne va pas bien avec l'idée de faire la course.

            Mais pas d'inquiétude, on devrait finir par avoir des problèmes qu'on sera déjà content de parvenir à résoudre tout court, au bout d'un moment. :-)

            • [^] # Re: Vivement , le 1

              Posté par  . Évalué à 3.

              C'est clair. L'an dernier, il y en a un ou j'y ai passé + d'une demi-journée pour arriver à le faire.

              C'était celui , où il fallait monter un interpréteur d'expression pour lequel, il fallait déduire le min et la max possible. J'avais beau avoir optimisé mon code avec de la mémoïsation & quelques optims. Il mettait 30min à sortir la réponse :-p.

          • [^] # Re: Vivement , le 1

            Posté par  . Évalué à 1.

            Ce matin, tu étais devant moi et il y a l'air d'avoir eu un nouvelle inscrit. Résultat,je te suis repassé devant.

            Pour info, On est en mode Local Score

            Local Score, which awards users on this leaderboard points much like the global leaderboard. If you add or remove users, the points will be recalculated, and the order can change. For N users, the first user to get each star gets N points, the second gets N-1, and the last gets 1. This is the default.

            A priori, je te suis repassé devant car avec l'arrivé d'un nouveau , çà revalorise potentiellement le N des classements précédents.

            • [^] # Re: Vivement , le 1

              Posté par  (Mastodon) . Évalué à 3.

              Et je suis repassé tout juste devant avec encore un nouvel inscrit !
              C'est rigolo remarque de voir ça évoluer :)

              Tu remarqueras que si on trie par global score on est tous à égalité à 0 hein…

              • Yth.
              • [^] # Re: Vivement , le 1

                Posté par  (site web personnel, Mastodon) . Évalué à 2. Dernière modification le 10 décembre 2022 à 00:46.

                si on trie par global score on est tous à égalité à 0

                Normal, il est écrit que « Getting a star first is worth 100 points, second is 99, and so on down to 1 point at 100th place. » (il y a cent points distribués aux cent premières réponses.) J'en déduis que personne dans le groupe n'est au taquet pour répondre vers 5h je crois. (le Time à >24h dans la vue détaillée…)

                “It is seldom that liberty of any kind is lost all at once.” ― David Hume

  • # l'Avent, qui commence au 1er décembre ?

    Posté par  . Évalué à 2.

    L'Avent commence dimanche 27 novembre, cette année.
    Il faudrait supprimer la virgule du journal, SVP.

    • [^] # Re: l'Avent, qui commence au 1er décembre ?

      Posté par  (site web personnel) . Évalué à 4.

      C'est vrai, ça commence ce dimanche. Seulement, comme la quasi-totalité des calendriers de l'Avent, celui-ci commence le 1er décembre, c'est dans doute plus facile ainsi pour son auteur.

      Avec ou sans la virgule, la phrase reste ambiguë, elle peut se comprendre comme signifient que ce calendrier commence le 1er décembre, ce que j'ai bien sûr voulu dire. Et elle peut se lire comme vient dire que l'Avent commence le 1er, ce qui est faux.

  • # Ada corse le tout

    Posté par  (site web personnel, Mastodon) . Évalué à 7.

    AdaCore promet de donner 10$ par contribution (traduction hasardeuse) en Ada à l'association Ada Developers Academy à concurrence de 5 000$.

    This year we want to join the fun, and bring a little bit of extra motivation for a good cause. For each person completing one of the Advent of Code challenges using the Ada programming language, AdaCore will donate $10 to the Ada Developers Academy, up to a total of $5,000. And for those willing to go an extra mile, AdaCore will donate $20 if the solution is implemented in SPARK with at least proof of absence of run-time errors (a.k.a. Silver level).

    Pour rappel, AdaCore est une société qui vend des services autour du compilateur en Ada, GNAT, et l'Ada Developers Academy est un organisme à but non-lucratif dont l'objet est de former au développement logiciel plus spécifiquement des femmes ou des personnes transgenre qui pourraient avoir un accès difficile aux structures d'enseignement traditionnel (du fait de leurs origines, de la pauvreté, etc.).

    « Tak ne veut pas quʼon pense à lui, il veut quʼon pense », Terry Pratchett, Déraillé.

    • [^] # Re: Ada corse le tout

      Posté par  . Évalué à 2.

      Je croyais qu'il fallait juste donner une réponse aux énigmes du jour et non montrer son code, du coup comment ça marche le défi avec AdaCore ?
      J'ai codé avec ada95 aux débuts des internets mondiaux, ça m'intéresserait d'en refaire pour la bonne cause.

      Sinon je confirme que c'est très fun, perso un truc m'échappe pour la deuxième partie du jour 6 de 2021, je vous laisse le découvrir.

      Jour6 2021

      • [^] # Re: Ada corse le tout

        Posté par  (site web personnel, Mastodon) . Évalué à 3.

        pour ma part, j'ai déjà été spoil

        “It is seldom that liberty of any kind is lost all at once.” ― David Hume

      • [^] # Re: Ada corse le tout

        Posté par  (site web personnel) . Évalué à 4.

        Ça, c'est typique des problèmes avec une résolution intuitive pas optimale, et qui devient intenable pour la seconde partie.

        Plutôt que de stocker une liste de tous les poissons avec leur compteur interne, l'astuce est de plutôt stocker, pour chaque valeur possible de compteur interne (de 0 à 8), le nombre de poissons qui ont cette valeur-là.

        #! /usr/bin/python3
        
        fishes = [0] * 9 # for each value of their internal timer, the number of fishes with that value
        with open("6.in") as f:
            for word in f.read().rstrip().split(','):
                fishes[int(word)] += 1
        
        for day in range(256):
            new_fishes = [0] * 9
            for i, n in enumerate(fishes):
                if i == 0:
                    new_fishes[6] += n
                    new_fishes[8] += n
                else:
                    new_fishes[i - 1] += n
            fishes = new_fishes
        
        print(sum(fishes))
        • [^] # Re: Ada corse le tout

          Posté par  (site web personnel) . Évalué à 1.

          Ça me rappelle de bons souvenirs !

          J'avais pensé à une solution assez efficace à l'aide de la fonction rotate de la deque Python.

        • [^] # Re: Ada corse le tout

          Posté par  . Évalué à 2. Dernière modification le 01 décembre 2022 à 21:21.

          j'adore ces jours là, quand la solution naïve ne scale pas.

          solution naïve :

          L=list(map(int,__import__("sys").stdin.read().split(",")))
          for i in range(80):
              L = [ (l-1) for l in L ]
              n = sum( l < 0 for l in L)
              L = [ l if l>=0 else 6 for l in L ]
              L += [8]*n
          print(len(L))

          solution qui scale, même solution que toi en gros :

          D ={ i:0 for i in range(9) }
          for l in list(map(int,__import__("sys").stdin.read().split(","))):
              D[l]+=1
          for i in range(256):
              D = { i-1:D[i] for i in range(9) }
              D[6] += D[-1]
              D[8] = D[-1]
              del D[-1]
          print(sum(D.values()))
      • [^] # Re: Ada corse le tout

        Posté par  (site web personnel) . Évalué à 5.

        Je croyais qu'il fallait juste donner une réponse aux énigmes du jour et non montrer son code, du coup comment ça marche le défi avec AdaCore ?

        C'est expliqué dans leur annonce, évidemment il faut montrer le code pour chaque casse-tête.

  • # C'est parti !

    Posté par  (site web personnel) . Évalué à 5.

    Et voilà, cette année, le Père Noël a été invité par ses lutins à participer à leur récolte annuel de fruits étoilés destinés à nourrir les rennes et leur apporter l'énergie magique nécessaire à la tournée de Noël.

    We wish you a merry Christmas and a happy hacking!

    • [^] # Re: C'est parti !

      Posté par  . Évalué à 2.

      Il y a moins de joueur que l'an dernier.

      https://adventofcode.com/2021/stats
      https://adventofcode.com/2022/stats

      et les sujets sont plus simple pour le moment.

      • [^] # Re: C'est parti !

        Posté par  . Évalué à 5.

        Je ne suis pas sûr qu'on puisse dire qu'il y a moins de joueur avec ces stats, il faudrait comparé 2021 au jour 4, je pense que dans 2 semaines, il y a aura beaucoup plus de monde qui aura fait la première question.

        « Rappelez-vous toujours que si la Gestapo avait les moyens de vous faire parler, les politiciens ont, eux, les moyens de vous faire taire. » Coluche

      • [^] # Re: C'est parti !

        Posté par  (site web personnel) . Évalué à 4.

        Sujets plus simple, je suis d'accord… pour le moment. Ça pourrait se corser d'un coup !

  • # meilleur que le chocolat

    Posté par  . Évalué à 5.

    J'ai choisi la facilité comme chaque année en partant sur du AWK ou du Python. J'ai encore le temps de changer d'avis et essayer un autre langage. Mais bon faut pas se leurer, les langage de scripting comme ceux là sont les plus efficaces pour juste trouver une réponse, sans avoir besoin de faire propre. D'ailleurs quand je regarde mon code des années précédentes 😳

    Aujourd'hui, 2 lignes de AWK pour résoudre les deux premiers problèmes. On commence doucement comme chaque année.

  • # Le 16/12

    Posté par  . Évalué à 2.

    çà me rassure de voir que tout le monde a ramé sur celui d'aujourd'hui.

    Perso, j'y ai bien passé 4h en cumulé. J'ai commencé vers 10h et au final, mon code met presque 1h pour trouver l'optimum de la 2ème réponse avec un AG.

    Je pense que j'ai du manquer une simplification du problème car normalement tous les problèmes doivent sortir sur une machine normal en moins de 10min.

Suivre le flux des commentaires

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