Suite de l'Avent du Code, jour 2.
Les lutins et le Père Noël jouent à pierre-feuille-ciseaux pour déterminer qui dormira le plus près de la réserve de nourriture. Un lutin nous a donné un genre d'antisèche pour optimiser notre façon de jouer, et on doit compter les scores que ça donnerait.
# En Python bref
Posté par 🚲 Tanguy Ortolo (site web personnel) . Évalué à  4.
Toujours en Python, mais aujourd'hui, point de modélisation objet, c'est du concis, plus en mode calcul :
[^] # Re: En Python bref
Posté par Yth (Mastodon) . Évalué à  3.
Sur celui-là , j'ai vachement modélisé au contraire :
Et la résolution est triviale derrière :
[^] # Re: En Python bref
Posté par 🚲 Tanguy Ortolo (site web personnel) . Évalué à  3. Dernière modification le 07 décembre 2022 à 14:52.
Waouh. C'est pour le moins original ça.
Si je comprends bien, ça fait de
~
une opération pour récupérer la valeur normalisée. Bien joué le(valeur % 3) or 3
, c'est bien plus lisible que(valeur - 1) % 3 + 1
.La valeur qui me vainc et la valeur que je vaincs, si je ne m'abuse.
Je suis plus inférieur à un autre si la valeur qui me vainc est la même que la valeur normalisée de l'autre. Et mutatis mutandis pour la supériorité. Tu aurais pu utiliser functool.total_ordering().
Ensuite, le reste est assez simple à comprendre, une fois ces bases posées. La réutilisation des opérateurs est… intéressante. Je ne peux pas dire que je suis fan, c'est un peu bizarre à lire quand même.
Tiens, j'ignorais la possibilité d'instancier un dictionnaire avec des mots-clefs. C'est amusant, ça aussi.
[^] # Re: En Python bref
Posté par Gil Cot ✔ (site web personnel, Mastodon) . Évalué à  1.
C'est étrange ; c'est l'inverse pour moi …qui ne pense pas assez en Phyton (et ai pratiquement beaucoup de langages où on retrouve la dernière forme)
On dirait que c'est écrit par quelqu'un qui pratique/réfléchi le/en OCaml ou peut-être Lisp ou Scheme…
“It is seldom that liberty of any kind is lost all at once.” ― David Hume
[^] # Re: En Python bref
Posté par Yth (Mastodon) . Évalué à  3.
J'ai fait du Caml, j'ai joué un peu avec OCaml, et même un poil de Lisp Jadis, mais je ne code pas régulièrement dans ces langages là .
Réutiliser les opérateurs, c'est bien pour jouer, mais ça peut péter complètement la lisibilité, donc il faut faire très très attention quand on veut partager le code…
Bien fait c'est génial par contre.
[^] # Re: En Python bref
Posté par Yth (Mastodon) . Évalué à  3.
J'aime bien réutiliser les opérateurs, mais j'ai fait ça assez rapidement, donc la pertinence est celle d'un truc pondu en vingt minutes.
Le
~chifumi
est pratique et plutôt lisible, comme ça on normalise tout le temps.Par contre réutiliser la classe
chifumi
pour qu'elle représente une choix ou un résultat d'affrontement, c'est plutôt moche, ça rendrait illisible un code plus gros, et c'est totalement lié à la présentation de la seconde partie du problème après la résolution de la première : comment bricoler vite fait du code qui répond à la question. C'était plus simple de rajouter un opérateur à une classe existante que de gérer une nouvelle classe.Mais en plus propre on pourrait avoir une classe
resultat
d'affrontement, qui sait se multiplier (par exemple) avec une classechifumi
, avec__mul__
et__rmul__
, pour pouvoir fairechifumi * resultat = resultat * chifumi = "mais qu'a donc joué mon adversaire ?"
On apprends Ă
resultat
Ă se multiplier dans les deux sens avecchifumi
sans que celle-ci sache comment se multiplier avecresultat
.On pourrait garder le même opérateur partout, et faire du
__mod__
et__rmod__
surresultat
. Sachant que dans tous les cas on retourne un score qui est un entier et n'a rien à voir avec aucune des deux classes.Pour le total_ordering, c'est vrai, mais en pratique j'ai implémenté
__lt__
qui n'est jamais utilisé. J'aurais pu nettoyer ça du code avant de le poster.# if vs modulo
Posté par Colargol . Évalué à  3.
J'avoue que je suis passé à côté de la subtilité du modulo et que j'ai bouriné en énumérant les cas possible (nimage).
[^] # Re: if vs modulo
Posté par Gil Cot ✔ (site web personnel, Mastodon) . Évalué à  1. Dernière modification le 08 décembre 2022 à 11:04.
Y a que neuf cas équitablement répartis, donc on peut se permettre d'énumérer au lieu de sortir l'artillerie lourde à mha.
“It is seldom that liberty of any kind is lost all at once.” ― David Hume
# petit bout de AWK
Posté par steph1978 . Évalué à  5.
# en shell bref
Posté par Gil Cot ✔ (site web personnel, Mastodon) . Évalué à  1.
Juste pour la première partie
C'est une bête énumération exhaustive des cas, un peu comme la solution en AWK, mais en étant un peu plus lâche sur le formatage du fichier.
“It is seldom that liberty of any kind is lost all at once.” ― David Hume
[^] # Re: en shell bref
Posté par Gil Cot ✔ (site web personnel, Mastodon) . Évalué à  1.
Juste pour la seconde partie
MĂŞme principe, juste qu'on calcule autrement.
“It is seldom that liberty of any kind is lost all at once.” ― David Hume
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.