Advent of code

 1er décembre 2022 

  Calorie Counting : Max de différentes additions séparées par une ligne vide
4035
   
10596
   
17891
   
5278
   
  
   
11293
   
  
  1. code.py
  2. code.sh
  3. code_autresFaconsPartie2.sh
#!/bin/bash

# Début: calcul des trois plus grandes sommes
nombres=$( total=0
           cat input.txt | while read n; do
                if [ -z "$n" ] ; then
                        echo $total
                        total=0
                else
                        total=$((total + n))
                fi
                done | sort -n | tail -n 3 
        )



## fin (2.1) avec expr et un calcul fait par bash
echo $nombres | { read n1 n2 n3;
                  echo $((n1 + n2 + n3)) 
                }
    # Si on pipe directement le résultat de tail, il faut réunir les trois lignes sur une seule.
    # Simulé ici en mettant des guillemets pour que les retours à la ligne soient écrits par echo
    echo "$nombres" | xargs echo | { read n1 n2 n3;
                                     echo $((n1 + n2 + n3))
                                   } 

## fin (2.2) avec expr et xargs, ou avec dc, pour la somme
expr $(echo $nombres | sed 's# # + #g')
expr 0 $(echo "$nombres" | xargs -n 1 echo +)
echo "$nombres" | sed 's/^/+ /' | xargs expr 0  # si on pipe directement le résulat de tail

echo "$nombres + + p" | dc
echo "$nombres" | cat - <(echo + + p) | dc      # si on pipe directement le résultat de tail


## fin (2.3) avec boucle qui somme
echo "$nombres" | { reponse=0
                    while read n; do
                            reponse=$((reponse + n))
                    done
                    echo $reponse
                  }
         
## fin (2.3 bis) avec fonction somme et calcul comme au 2.3
#  (plus propre, réutilisable, évite le souci de devoir mettre des accolades)
function somme() {
        s=0
        while read n; do
                s=$((s + n))
        done
        echo $s
}
echo "$nombres" | somme