Advent of code - in awk
Contexte Calendrier de l’avent
https://adventofcode.com/2022/
Mes réponses Day 1 Jeu 1 BEGIN {i=1} {if ($1 == "") {print i " " S ; S=0 ; i++} else {S+=$1} } END {print i " " S} puis
($2 > n) {n=$2} END {print n} Jeu 2 BEGIN {i=1} {if ($1 == "") {print S ; S=0 ; i++} else {S+=$1} } END {print S} awk -f 01_02_01_list 01_in.txt | sort -n -r | head -3 | awk '{S+=$1} END {print S}' Day 2 Jeu 1 { # score suivant la réponse if ($2 == "X") {resp=1 ; S+=resp} if ($2 == "Y") {resp=2 ; S+=resp} if ($2 == "Z") {resp=3 ; S+=resp} # score suivant le gagnant ## identique if ( ($1 == "A" && $2 == "X") || ($1 == "B" && $2 == "Y") || ($1 == "C" && $2 == "Z")) {point=3 ; S+=point} ## win if ( ($1 == "C" && $2 == "X") || ($1 == "A" && $2 == "Y") || ($1 == "B" && $2 == "Z")) {point=6 ; S+=point} } END {print S} Jeu 2 { # score suivant le coup ## si null donc coup identique if ($2 == "Y" && $1 == "A") {coup=1 ; S+=coup+3} if ($2 == "Y" && $1 == "B") {coup=2 ; S+=coup+3} if ($2 == "Y" && $1 == "C") {coup=3 ; S+=coup+3} ## si gagnant if ($2 == "Z" && $1 == "A") {coup=2 ; S+=coup+6} # mon coup est un paper if ($2 == "Z" && $1 == "B") {coup=3 ; S+=coup+6} # mon coup est un scissor if ($2 == "Z" && $1 == "C") {coup=1 ; S+=coup+6} # mon coup est un rock ## si perdant if ($2 == "X" && $1 == "A") {coup=3 ; S+=coup} # mon coup est un scissor if ($2 == "X" && $1 == "B") {coup=1 ; S+=coup} # mon coup est un rock if ($2 == "X" && $1 == "C") {coup=2 ; S+=coup} # mon coup est un paper } END {print S} Day 3 Jeu 1 BEGIN { low="abcdefghijklmnopqrstuvwxyz" ; upp="ABCDEFGHIJKLMNOPQRSTUVWXYZ"} { part1=substr($1,1,length($1)/2) part2=substr($1,length($1)/2 + 1,length($1)) split(part1, arr, "") for (i in arr) { if (match(part2, arr[i])) { carcom=arr[i] break } } {if (index(low, carcom) == 0 ) {S+= 26 + index(upp, carcom)} else {S+= ind = index(low, carcom)}}; } END {print S} Day 4 Jeu 1 { # splitter les caracteres ; initialisation ; reconstruire la chaine de chiffres split($1, sec1, "-") split($2, sec2, "-") # test si la chaine 1 est dans la chaine 2 ou inversement if ( ( sec1[1] >= sec2[1] && sec1[2] <= sec2[2] ) || sec2[1] >= sec1[1] && sec2[2] <= sec1[2] ) {S+=1} } END {print S} Lancer en modifiant le séparateur
[]