Jour 2
Introduction et jour 1
Jour 1 - Jour 3
Intitulé résumé
Première partie
7 6 4 2 1
1 2 7 8 9
9 7 6 2 1
1 3 2 4 5
8 6 4 4 1
1 3 6 7 9
This example data contains six reports each containing five levels.
The engineers are trying to figure out which reports are safe. The Red-Nosed reactor safety systems can only tolerate levels that are either gradually increasing or gradually decreasing. So, a report only counts as safe if both of the following are true:
- The levels are either all increasing or all decreasing.
- Any two adjacent levels differ by at least one and at most three.
Deuxième partie
The Problem Dampener is a reactor-mounted module that lets the reactor safety systems tolerate a single bad level in what would otherwise be a safe report. It’s like the bad level never happened!
Now, the same rules apply as before, except if removing a single level from an unsafe report would make it safe, the report instead counts as safe.
Commentaire de ma solution
Première partie
A mon avis nous sommes ici face à un problème qui rempli bien les critères des
problèmes pour lequel le shell est mal adapté. Quand c’est le cas l’unixien·ne
old school vous dira de dégaîner awk
. Ca tombe bien, je dois le pratiquer
pour m’améliorer.
La solution n’a rien de bien particulier. On se retrouve avec un algo qui ressemble beaucoup à ce que l’on ferait en C ou en python pas très idiomatique. J’imagine que c’est de l’awk vraiment médiocre. Il se peut que je n’ai pas décelé le pattern caché magique qui permet d’exprimer le problème d’une façon permettant d’avoir un bel algo.
< 2.input awk '{
split($0,a," ")
if (a[2]-a[1] > 0) { upordown="up" } else { upordown="down" }
for(i=1;i<length(a);i++) {
diff=a[i+1]-a[i]
if ( diff > 3 || diff < -3 || diff==0 ) {
print $0" not safe to large of a diff or 0"
next
}
if ( upordown=="up" && a[i+1]-a[i]<0 || upordown=="down" && a[i+1]-a[i]>0 ) {
print $0" not safe wrong way"
next
}
}
print $0" safe"
}' | grep 'safe$' | wc -l
Deuxième partie
Je n’y suis pas encore arrivé et suis passé à la journée d’après 😀