Journal Advent of code 2024

Posté par  . Licence CC By‑SA.
Étiquettes :
8
30
nov.
2024

Comme chaque année, certains attendent avec impatience le jour suivant pour découvrir la prochaine case de leur calendrier de l'Avent, espérant y trouver du chocolat ou d'autres produits imaginés par les marketeurs.

Pour ma part, je préfère les petits défis de programmation proposés par Advent of Code 2024.
https://adventofcode.com/2024

Chaque jour, en résolvant ces petits problèmes de code, vous aurez la satisfaction de sauver Noël. En réalité, l'histoire importe peu. Ce qui compte, c'est de relever chaque jour un nouveau défi de programmation qui vous procurera votre dose quotidienne de dopamine. Ces défis sont organisés par difficulté croissante. Traditionnellement, on y trouve :

des problèmes de tri,
des problèmes arithmétiques (somme de suites, résolution de systèmes linéaires, etc.),
des problèmes de recherche de chemin,
de la trigonométrie en 2D, puis en 3D,
et bien d'autres.
Pour chaque problème, il y a deux étoiles à gagner. La première est généralement simple, tandis que la deuxième représente souvent une mise à l'échelle du même problème qui remet complètement en cause votre manière d'aborder le sujet.

Advent of Code est aussi une compétition. Les plus courageux se lèveront à 6h (heure de Paris) pour gagner les étoiles. Personnellement, je commence à 8h00. À ce sujet, il y a un leaderboard actif depuis 2 ans que vous pouvez rejoindre : 1844559-f65dbf07.

Je vous souhaite une bonne fin d’année et de joyeuses lignes de code à tous !

  • # J'y participe

    Posté par  . Évalué à 2 (+2/-0).

    Comme les années précédentes, j'y participe.

    Cette année, ce sera en Rust contrairement aux années précédentes où c'était en Haskell.

    Je ne me lèverai pas non plus à 6h. Trop tôt pour moi.

  • # 1er jour

    Posté par  . Évalué à 3 (+1/-0).

    D'habitude, je commence avec AWK et je poursuis en Python plus tard quand ça devient plus compliqué. Là, j'ai dû sortir Python le premier jour. Ce n'est pas de bon augure pour la suite.

    • [^] # Re: 1er jour

      Posté par  (site web personnel) . Évalué à 5 (+3/-0). Dernière modification le 01 décembre 2024 à 13:30.

      En vrai, une fois que t'as le prototype python, c'est assez facile de faire la version awk

      (désolé, y'a pas de balise spoiler)

      {
          left_list[NR] = $1
          right_list[NR] = $2
      }
      
      END {
          asort(left_list)
          asort(right_list)
      
          distance = 0
          for (i = 1; i <= NR; i++) {
              d = left_list[i] - right_list[i]
              if (d < 0) {
                  d = -d
              }
              distance += d
          }
          print distance
      }
      $ cat dataset_exemple.txt
      3   4
      4   3
      2   5
      1   3
      3   9
      3   3
      $ awk -f day1.awk dataset_exemple.txt
      11
      • [^] # Re: 1er jour

        Posté par  . Évalué à 3 (+1/-0).

        En effet, si je regarde mon code python, ça donnerai le code que tu proposes.
        Cependant asort est spécifique GNU AWK et pas dispo dans mawk. Je pense que c'est ce qui m'a inconsciemment fait partir sur Python.

        • [^] # Re: 1er jour

          Posté par  (site web personnel) . Évalué à 3 (+3/-0).

          Voici un code de asort pour mawk que j'utilise depuis 2012.

          function alength(A, n, val) {
          n = 0
          for (val in A) n++
          return n
          }
          function asort(A, hold, i, j, n) {
          n = alength(A)
          for (i = 2; i <= n ; i++) {
          hold = A[j = i]
          while (A[j-1] > hold) {
          j--
          A[j+1] = A[j]
          }
          A[j] = hold
          }
          delete A[0]
          return n
          }

        • [^] # Re: 1er jour

          Posté par  (site web personnel) . Évalué à 2 (+0/-0). Dernière modification le 03 décembre 2024 à 19:48.

          maintenant je suis curieux. Une raison de ne pas utiliser gawk ? Pas de sectarisme de ma part, j'utilise très peu awk et je me contente d'utiliser celui installé par défaut :D

          • [^] # Re: 1er jour

            Posté par  . Évalué à 2 (+0/-0).

            Gawk a des fonctionnalités supplémentaire : support du csv, fonctions de tri, support des extensions - ce qui peut permettre de traiter du xml par exemple, paramétrage du tri des énumérations de clé des tableaux associatifs.

            Tout ceci n'est pas présent dans la spécification d'origine.

      • [^] # Re: 1er jour

        Posté par  . Évalué à 4 (+2/-0).

        C'est moins la possibilité que pour le fait de ne pas tirer parti du fonctionnement de awk que je ne suis pas parti là dessus.

        Première étoile je l'ai fais avec un tableur, seconde étoile je n'ai pas compris comment me servir correctement du tableur donc c'était en shell (awk/grep/awk), les premiers jours pour moi c'est toujours juste histoire de trouver le résultat sans chercher à faire du "vrai" code.

        J'ai même pas décidé quel sera mon langage cette année. J'avais pensé à julia, mais je ne l'ai même pas encore installé.

        https://linuxfr.org/users/barmic/journaux/y-en-a-marre-de-ce-gros-troll

  • # vous aurez la satisfaction de sauver Noël

    Posté par  . Évalué à 5 (+4/-0).

    même pas sûr qu'on y arrive :

    papa noel

  • # 2ème jour - on apprend à lire l’énoncé

    Posté par  . Évalué à 2 (+0/-0). Dernière modification le 02 décembre 2024 à 10:49.

    La différence max est 3, pas 2. Une différence de 0 est "unsafe".

    En AWK aujourd'hui avec quelques boucles imbriquées. Pour éviter celle que rajoute la partie 2, je pré-processe l'input pour faire des blocs.

    # emit a report and its variants as a bloc, separated by empty line
    {
      print
      for (i=1;i<=NF;i++) {
        r = ""
        for (j=1;j<=NF;j++) {
          if (i!=j) {
            r = r $j " "
          }
        }
        print r
      }
      print ""
    }
  • # 3ème jour

    Posté par  . Évalué à 4 (+2/-0).

    Je crois que c'est la première fois que je fais le troisième jours encore en CLI (je commence à CLI tant que je trouve artificiel d'utiliser un langage plus sophistiqué). Première et seconde étoiles avec un one-liner chacun.

    https://linuxfr.org/users/barmic/journaux/y-en-a-marre-de-ce-gros-troll

    • [^] # Re: 3ème jour

      Posté par  . Évalué à 3 (+1/-0).

      Pareil, petit coup de "oulah on va soufrir" en regardant l'input puis en lisant les instruction, un coup de regexp et awk et c'est torché.

Envoyer un commentaire

Suivre le flux des commentaires

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