WartAgeDeJohan
WartAgeDeJohan est un outil en ligne de commande (transformé plus tard en bibliothèque), codé en RUST, qui permet de connaître l'âge de Johan à un moment donné. La bibliothèque est notamment intégrée dans le Vakanssbot.
Il n'y a pas grand-chose d'autre à ajouter, donc le reste de la page est dédié plus généralement à l'anniversaire singulier de Johan. Me cassez pas les pieds, on n'est pas sur un wiki, je vais pas créer une page par anecdote.
Et du coup, il a quel âge ?
Aujourd'hui, Johan a ans!
Algorithme
L'âge de Johan est mesurée en "années" (a.k.a. "ans") sur une échelle non-linéaire. Cette unité ne correspond pas à la notion d'"année" faisant consensus dans la communauté scientifique, mais s'y substitue. Il est possible de comparer des années Johan avec des années pas-Johan, avec des opérateurs mathématiques usuels de comparaison1. La fonction de la valeur de l'âge de Johan est définie par morceaux, sur des journées discrètes :
- De 2001 au 12 novembre 2019 inclus, il correspond au nombre d'années vécues, selon le calendrier grégorien (environ 365.2425 rotations complètes de la terre sur son axe), arrondies à l'entier inférieur.
- Le 12 novembre 2019, Johan a donc 18 ans
- À compter du 12 novembre 2019, Johan gagne un an chaque journée qui passe, SAUF le 12 novembre de chaque année, où il conserve l'âge de la veille.
- Le 11 novembre 2020, Johan a 383 ans
- Le 12, Johan a toujours 383 ans
- Le 13, Johan a 384 ans
Remarque importante en vue d'une implémentation logicielle : comme n'importe quel autre anniversaire, les dates sont considérées dans le fuseau horaire où se trouve l'intéressé (façon de parler — pas sûr qu'il le soit, à vrai dire). Par exemple, si vous voyagez en Chine, votre anniversaire tombera "plus tôt" que si vous étiez resté en France. C'est le fuseau horaire où vous vous trouvez physiquement qui sert de référentiel. Par conséquent, l'idée d'installer un AirTag dissimulé sur le Johan a été envisagée, afin d'avoir constamment accès au fuseau horaire à utiliser pour les calculs. À l'heure de rédaction, aucune mesure concrète n'a été prise.
Implémentation en Rust
Partiellement extraite du code de WartAgeDeJohan.
pub fn age(at: NaiveDate) -> i64 {
let birthday = NaiveDate::from_ymd_opt(2019, 11, 12).unwrap();
// Calculate the age of yohan [sic]
let diff = at - birthday;
// We calculate his age : the number of days since 12/11/2019
// minus the number of non-birthdays (every 12/11), plus his
// age the 12/11/2019
(diff.num_days() - ((diff.num_days() - 1) / 365)) + 18
}
Læ lecteurice avisé·e remarquera que cet algorithme ne gère pas correctement les dates précédant le 12/11/2019. L'implémentation d'un correctif lui est laissé en exercice (et le correctif peut même être soumis en PR sur GitHub).
Galerie
Notes et références
Par exemple, la phrase suivante a mathématiquement du sens : « Oh que tu es vieux, Johan ! J'ai 23 ans alors que tu en as 1944. Or, d'après mon cours de CP (Dupont, M. (2006). Cours dispensé à l'École Primaire des Tournesols, doi: 10.48550/arXiv.2204.06826), le nombre 1944 est strictement supérieur au nombre 23. Par conséquent, tu es plus vieux que moi. CQFD. »