1er décembre 2022 ▸
Calorie Counting : Max de différentes additions séparées par une ligne vide
4035
10596
17891
5278
11293
⋮
- code.py
- code.sh
- 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