Techniquement tu as accès à deux services différents : l'article en plein écran où l'article sur les 3/4 de l'écran. Donc même avec le texte original tu peux argumenter que ça n'est pas légal. Tout dépend de l'interprétation du mot service …
J'ai regardé pour te faire ça et du coup je suis tombé sur un os.
Tu retournes le nombre de pions bien placés, mais pas le nombre de pions de la bonne couleur mais mal placés:
Par exemple:
Test (4 letters among ROGBYAPW):
OBAW
0 good 4 bad
Test (4 letters among ROGBYAPW):
PGRY
0 good 4 bad
Test (4 letters among ROGBYAPW):
YRPG
4 good 0 bad
Bravo 3 attempts
En essayant les huit lettres sur les deux premiers essais, j'ai 0 good et 4 bad à chaque fois. Pourtant le premier à aucune lettre bonne. Le deuxième à les 4 bonnes lettres mais aucune au bon endroit.
En fait, les chiffres ci-dessus sont faux.
Mon code avait un bug: je comptais le nombre de coups nécessaires pour être sûr de la combinaison (je m'arrêtais quand les combinaison possibles étaient réduites à 1). Mais pour gagner, il faut jouer cette combinaison. Donc dans certains cas, il fallait un coup de plus pour gagner.
Cette stratégie est du "one-step ahead" et comme dit précédemment, n'est pas nécessairement la meilleure. C'est celle décrite par Knuth dans son papier (mais pour 6 couleurs).
Un papier de 2013, "An Optimal Mastermind (4,7) Strategy and More Results in the Expected Case" par Geoffroy Ville recherche une solution optimale pour le Mastermind à 7 couleurs (6 couleurs plus trous autorisés) et donne des résultats: https://arxiv.org/pdf/1305.1010.pdf
Je sais que j'arrive après la bataille, mais je me suis penché sur la question et j'ai eu l'approche suivante:
Créer la liste de toutes les combinaisons possibles (après tout il n'y en a que 84 = 4096). Pour chaque combinaison, compter le nombre de combinaisons qui rapportent chaque score (donc parcourir 4096*4096 = 16 millions de combinaisons au premier coup, c'est faisable). Ensuite, calculer l'espérance d'élimination associée à chaque coup jouable. Jouer le coup qui va éliminer le plus de combinaisons.
On peut alors recommencer en ne considérant que les combinaisons qui n'ont pas été éliminées.
Au final, le premier coup est assez lent, tout ça pour sortir 4 chiffres différents, on peut donc le hard-coder pour aller plus vite.
Le résultat est:
- 3 essais dans 22% des cas
- 4 essais dans 68% des cas
- 5 essais dans 10% des cas
À noter que ce n'est peut être pas l'approche optimale. On joue le coup qui a la meilleure espérance, mais il peut aboutir à une situation où tous les coups suivants sont mauvais alors qu'un autre coup légèrement moins bon peut aboutir à une situation ou un coup suivant est suffisamment bon pour compenser. En pratique, je pense que c'est assez proche de l'optimal quand même (au moins pour 4 pions choisis parmi 8 couleurs).
Petit bonus, avec 8 couleurs et 4 pions, la probabilité d'avoir 2 pions de la même couleur est étonnamment élevée si on choisit la combinaison aléatoirement:
Après avoir lu l'article sur Unsplash, qui semble avoir réinventé le placement de produit et réussir à le vendre assez bien aux investisseurs, je suis perplexe. Est-ce mieux ou moins bien que les pubs "externes" ? Certes ce n'est plus interruptif, mais ça façonne le contenu. N'est-ce pas plus pervers encore?
Pour l'instant le meilleur genre de pub à mon goût, ce sont celles de Joueur du Grenier: un sketch unique et drôle clairement identifié comme message publicitaire.
Pas sur TPF(en tout cas ce que j'en ai côtoyé). C'était soit du C soit de l'assembleur TPF. Le C était du vieux C bien pourri et le compilo mal optimisé, les perfs n'etaient pas vraiment au rendez-vous. Donc tout ce qui était non-critique niveau perfs était en C, le reste en assembleur.
D'ailleurs, pendant que des devs migraient à du C++/Linux, d'autres bossaient à convertir du C en assembleur TPF pour récupérer du CPU et compenser l'augmentation de traffic.
Maintenant que je l'ai lu, l'article est intéressant tout en étant à côté de la plaque. Parler du "coût d'import" d'une librairie n'a pas de sens d'une manière générale. Une implémentation fixed point header only en C++ n'a pas de "coût d'import".
Ce qui est marrant c'est que l'auteur est consciente de ça et termine l'article en donnant les vraies raisons: pourquoi réécrire quelque chose qui marche et réécrire coûte plus cher qu'écrire.
J'ai pas encore lu l'article mais la virgule fixe, c'est juste tout multiplier par une valeur fixée (216 par exemple). Du coup je ne vois pas en quoi ça poserait problème à un langage.
Je ne suis pas un spécialiste de ce dont il est question dans l'article, mais les références aux choses que je connais me font penser que l'article est probablement bourré de mensonges:
Or why you see airline booking agents use that same black screen with green type to change your flight? “Oh, that’s COBOL — that’s definitely COBOL,” laughs Craig Bailey, a senior engineer at Faircom, a firm that makes software to help firms manage those old systems.
Pour avoir travaillé dans le secteur, c'est faux. Ce qui dominait autrefois c'était TPF, les mainframes IBM. Le code était en assembleur. À ma connaissance presque tous les acteurs du secteurs ont réussi à s'en débarrasser presque complètement (oui ça fait beaucoup de presques). En tout cas, pas de Cobol en vue. Oui les terminaux texte sont toujours présents et compatibles (souvent dans une fenêtre Windows de nos jours), ça ne veut pas dire que ce n'est pas du
C++/Java/Go/Python/Rust sous Linux qui tourne côté serveur.
J'aimerais m'y mettre un jour, mais j'ai pas d'idée de projet personnel qui profite de l'absence de GC
L'absence de GC n'est pas la seule raison d'essayer (et de préférer) Rust. Personnellement, j'ai tenté le Go et c'est simple avec un bon écosystème. Mais y'a plein de trucs crados fans le design du langage, des librairies et dans l'esprit qui finissent par te rattraper. Avec Rust, j'ai l'impression que beaucoup de choses ont été très bien pensées pour le long terme.
Je pourrais faire une longue liste mais je suis très flemmard alors je donnerai juste un exemple: la gestion d'erreurs. En Rust, tu as Result qui fait que soit tu retournes un résultat, soit une erreur et que l'erreur ne peut pas être ignorée. Tu dois la traiter. Tu peux utiliser unwrap si tu es flemmard, mais au moins tu sais à quoi t'attendre et c'est facile à retrouver.
En Go, le pattern c'est de retourner (resultat, erreur). Si tu ne verifies pas l'erreur, dommage le compilateur ne t'aidera pas à t'en rendre compte. En plus il faut toujours gérer 4 cas: (result, nil), (result, err), (nil, err), (nill, nil). Et si les cas 2 et 4 semble improbables et inutiles, il n'y a pas besoin de chercher très loin dans la doc de la lib standard pour trouver des exemples (read par exemple, qui peut retourner des données et un EOF).
Maintenant j'ai tendance à dégainer Rust pour tout et n'importe quoi. Y'a bien Python qui garde une place dans mon coeur, mais juste pour des trucs rapides, ou pour le plaisir de changer. Et en général avec pytype.
[^] # Re: "Pourquoi voyez-vous ce message ?"
Posté par Colin Pitrat (site web personnel) . En réponse au journal Le Monde, vous voulez bien respecter le RGPD (spécifiquement la partie consentement) ?. Évalué à 3.
Techniquement tu as accès à deux services différents : l'article en plein écran où l'article sur les 3/4 de l'écran. Donc même avec le texte original tu peux argumenter que ça n'est pas légal. Tout dépend de l'interprétation du mot service …
[^] # Re: il manque 01
Posté par Colin Pitrat (site web personnel) . En réponse au journal C'est traditionnel, ne boudons pas notre plaisir !. Évalué à 4.
Quand tu seras maître du Monde, tu leur feras respecter le RGPD ? https://linuxfr.org/users/antistress/journaux/le-monde-vous-voulez-bien-respecter-le-rgpd-specifiquement-la-partie-consentement
[^] # Re: il manque 01
Posté par Colin Pitrat (site web personnel) . En réponse au journal C'est traditionnel, ne boudons pas notre plaisir !. Évalué à 2.
Pourquoi revenir dessus ? C'est établi alors maintenant avançons. Histoire que l'an 1 soit un peu moins pourri que l'an -1.
[^] # Re: Titre qui fait peur?
Posté par Colin Pitrat (site web personnel) . En réponse au journal Android < 7.1 va refuser les connections TLS certifiées par Let's Encrypt. Évalué à 4.
Techniquement c'est correct si je comprends bien : dans 3 ans Android < 7.1 va refuser les connections TLS certifiées par Let's Encrypt.
Enfin, si c'est comme le brexit y'aura une autre solution (la même ?) dans 3 ans.
# Facile
Posté par Colin Pitrat (site web personnel) . En réponse au journal [HS] Comment prononcez-vous Knoppix ?. Évalué à 5.
Canopée-baton-croix
[^] # Re: Un peu à la bourre
Posté par Colin Pitrat (site web personnel) . En réponse au journal Yes Master. Évalué à 2.
J'ai regardé pour te faire ça et du coup je suis tombé sur un os.
Tu retournes le nombre de pions bien placés, mais pas le nombre de pions de la bonne couleur mais mal placés:
Par exemple:
En essayant les huit lettres sur les deux premiers essais, j'ai 0 good et 4 bad à chaque fois. Pourtant le premier à aucune lettre bonne. Le deuxième à les 4 bonnes lettres mais aucune au bon endroit.
Du coup, https://github.com/matteli/yesmaster/issues/1
[^] # Re: Un peu à la bourre
Posté par Colin Pitrat (site web personnel) . En réponse au journal Yes Master. Évalué à 2. Dernière modification le 07 décembre 2020 à 11:49.
En fait, les chiffres ci-dessus sont faux.
Mon code avait un bug: je comptais le nombre de coups nécessaires pour être sûr de la combinaison (je m'arrêtais quand les combinaison possibles étaient réduites à 1). Mais pour gagner, il faut jouer cette combinaison. Donc dans certains cas, il fallait un coup de plus pour gagner.
Cette stratégie est du "one-step ahead" et comme dit précédemment, n'est pas nécessairement la meilleure. C'est celle décrite par Knuth dans son papier (mais pour 6 couleurs).
Un papier de 2013, "An Optimal Mastermind (4,7) Strategy and More Results in the Expected Case" par Geoffroy Ville recherche une solution optimale pour le Mastermind à 7 couleurs (6 couleurs plus trous autorisés) et donne des résultats:
https://arxiv.org/pdf/1305.1010.pdf
Je continue de creuser et documente mes trouvailles et mon code à http://colin.pitrat.free.fr/?p=539
[^] # Re: Un peu à la bourre
Posté par Colin Pitrat (site web personnel) . En réponse au journal Yes Master. Évalué à 2.
Alors j'ai tout recodé moi même, mais je vais jeter un coup d’œil, ça devrait être faisable :-)
# Un peu à la bourre
Posté par Colin Pitrat (site web personnel) . En réponse au journal Yes Master. Évalué à 3.
Je sais que j'arrive après la bataille, mais je me suis penché sur la question et j'ai eu l'approche suivante:
Créer la liste de toutes les combinaisons possibles (après tout il n'y en a que 84 = 4096). Pour chaque combinaison, compter le nombre de combinaisons qui rapportent chaque score (donc parcourir 4096*4096 = 16 millions de combinaisons au premier coup, c'est faisable). Ensuite, calculer l'espérance d'élimination associée à chaque coup jouable. Jouer le coup qui va éliminer le plus de combinaisons.
On peut alors recommencer en ne considérant que les combinaisons qui n'ont pas été éliminées.
Au final, le premier coup est assez lent, tout ça pour sortir 4 chiffres différents, on peut donc le hard-coder pour aller plus vite.
Le résultat est:
- 3 essais dans 22% des cas
- 4 essais dans 68% des cas
- 5 essais dans 10% des cas
À noter que ce n'est peut être pas l'approche optimale. On joue le coup qui a la meilleure espérance, mais il peut aboutir à une situation où tous les coups suivants sont mauvais alors qu'un autre coup légèrement moins bon peut aboutir à une situation ou un coup suivant est suffisamment bon pour compenser. En pratique, je pense que c'est assez proche de l'optimal quand même (au moins pour 4 pions choisis parmi 8 couleurs).
Petit bonus, avec 8 couleurs et 4 pions, la probabilité d'avoir 2 pions de la même couleur est étonnamment élevée si on choisit la combinaison aléatoirement:
4 couleurs différentes: 1680 / 4096 = 41%
3 couleurs différentes: 2016 / 4096 = 49%
2 couleurs différentes, 2 pions chaque: 168 / 4096 = 4%
2 couleurs différentes, 3 pions d'une couleur: 224 / 4096 = 5%
1 seule couleur: 8 / 4096 = 0.2%
[^] # Re: Point d'entrée
Posté par Colin Pitrat (site web personnel) . En réponse au journal Défis PeerTube. Évalué à 8.
Tout est dit :)
# Placement de produit
Posté par Colin Pitrat (site web personnel) . En réponse à la dépêche Revue de presse de l’April pour la semaine 47 de l’année 2020. Évalué à 4.
Après avoir lu l'article sur Unsplash, qui semble avoir réinventé le placement de produit et réussir à le vendre assez bien aux investisseurs, je suis perplexe. Est-ce mieux ou moins bien que les pubs "externes" ? Certes ce n'est plus interruptif, mais ça façonne le contenu. N'est-ce pas plus pervers encore?
Pour l'instant le meilleur genre de pub à mon goût, ce sont celles de Joueur du Grenier: un sketch unique et drôle clairement identifié comme message publicitaire.
[^] # Re: Autre article
Posté par Colin Pitrat (site web personnel) . En réponse au journal COBOL : c'est dans les vieilles marmites.... Évalué à 3.
Sur un uint64 par contre ce serait drôlement bien!
[^] # Re: Sauf que ...
Posté par Colin Pitrat (site web personnel) . En réponse au journal COBOL : c'est dans les vieilles marmites.... Évalué à 4.
Pas sur TPF(en tout cas ce que j'en ai côtoyé). C'était soit du C soit de l'assembleur TPF. Le C était du vieux C bien pourri et le compilo mal optimisé, les perfs n'etaient pas vraiment au rendez-vous. Donc tout ce qui était non-critique niveau perfs était en C, le reste en assembleur.
D'ailleurs, pendant que des devs migraient à du C++/Linux, d'autres bossaient à convertir du C en assembleur TPF pour récupérer du CPU et compenser l'augmentation de traffic.
[^] # Re: Eh oui...
Posté par Colin Pitrat (site web personnel) . En réponse au journal DHCP et heure système. Évalué à 8.
Il ne parle pas de NTP il parle de DHCP. Sans réseau il ne peut pas espérer que ntpd va mettre son ordi à l'heure …
[^] # Re: Un peu d'histoire à la Higgins et café du commerce, et du troll velu et méchant ...
Posté par Colin Pitrat (site web personnel) . En réponse au journal COBOL : c'est dans les vieilles marmites.... Évalué à 3.
Pas la peine de te mettre au Java, la mode touche à sa fin. Essai le Rust plutôt :)
[^] # Re: Autre article
Posté par Colin Pitrat (site web personnel) . En réponse au journal COBOL : c'est dans les vieilles marmites.... Évalué à 2.
Et aussi une question d'arrondi au moment de l'affichage.
[^] # Re: Autre article
Posté par Colin Pitrat (site web personnel) . En réponse au journal COBOL : c'est dans les vieilles marmites.... Évalué à 7.
Maintenant que je l'ai lu, l'article est intéressant tout en étant à côté de la plaque. Parler du "coût d'import" d'une librairie n'a pas de sens d'une manière générale. Une implémentation fixed point header only en C++ n'a pas de "coût d'import".
Ce qui est marrant c'est que l'auteur est consciente de ça et termine l'article en donnant les vraies raisons: pourquoi réécrire quelque chose qui marche et réécrire coûte plus cher qu'écrire.
[^] # Re: Autre article
Posté par Colin Pitrat (site web personnel) . En réponse au journal COBOL : c'est dans les vieilles marmites.... Évalué à -1.
J'ai pas encore lu l'article mais la virgule fixe, c'est juste tout multiplier par une valeur fixée (216 par exemple). Du coup je ne vois pas en quoi ça poserait problème à un langage.
# Sauf que ...
Posté par Colin Pitrat (site web personnel) . En réponse au journal COBOL : c'est dans les vieilles marmites.... Évalué à 8. Dernière modification le 22 novembre 2020 à 09:07.
Je ne suis pas un spécialiste de ce dont il est question dans l'article, mais les références aux choses que je connais me font penser que l'article est probablement bourré de mensonges:
Pour avoir travaillé dans le secteur, c'est faux. Ce qui dominait autrefois c'était TPF, les mainframes IBM. Le code était en assembleur. À ma connaissance presque tous les acteurs du secteurs ont réussi à s'en débarrasser presque complètement (oui ça fait beaucoup de presques). En tout cas, pas de Cobol en vue. Oui les terminaux texte sont toujours présents et compatibles (souvent dans une fenêtre Windows de nos jours), ça ne veut pas dire que ce n'est pas du
C++/Java/Go/Python/Rust sous Linux qui tourne côté serveur.
[^] # Re: Unité énergie
Posté par Colin Pitrat (site web personnel) . En réponse au journal Slimbook version KDE. Évalué à 8.
Non je suis kamion-heure, je me déplace en kamion
[^] # Re: Snap a bannir
Posté par Colin Pitrat (site web personnel) . En réponse au journal Ubuntu, Snap, les performances de chromium se dégradent. Évalué à 8.
Pour ça je préfère AppImage personnellement
# Meta-Troll
Posté par Colin Pitrat (site web personnel) . En réponse au journal Warp : les performances de Firefox s’améliorent. Évalué à 9. Dernière modification le 14 novembre 2020 à 15:12.
Non, c'est nul. Moi j'aime pas les p'tits trolls, j'aime que les gros. Et en début de journal, qui s'étalent allègrement jusqu'à la fin. Non mais!
# Raisons d'essayer Rust
Posté par Colin Pitrat (site web personnel) . En réponse au journal Retour d'expérience sur les langages de programmation. Évalué à 10. Dernière modification le 13 novembre 2020 à 20:53.
L'absence de GC n'est pas la seule raison d'essayer (et de préférer) Rust. Personnellement, j'ai tenté le Go et c'est simple avec un bon écosystème. Mais y'a plein de trucs crados fans le design du langage, des librairies et dans l'esprit qui finissent par te rattraper. Avec Rust, j'ai l'impression que beaucoup de choses ont été très bien pensées pour le long terme.
Je pourrais faire une longue liste mais je suis très flemmard alors je donnerai juste un exemple: la gestion d'erreurs. En Rust, tu as Result qui fait que soit tu retournes un résultat, soit une erreur et que l'erreur ne peut pas être ignorée. Tu dois la traiter. Tu peux utiliser unwrap si tu es flemmard, mais au moins tu sais à quoi t'attendre et c'est facile à retrouver.
En Go, le pattern c'est de retourner (resultat, erreur). Si tu ne verifies pas l'erreur, dommage le compilateur ne t'aidera pas à t'en rendre compte. En plus il faut toujours gérer 4 cas: (result, nil), (result, err), (nil, err), (nill, nil). Et si les cas 2 et 4 semble improbables et inutiles, il n'y a pas besoin de chercher très loin dans la doc de la lib standard pour trouver des exemples (read par exemple, qui peut retourner des données et un EOF).
Maintenant j'ai tendance à dégainer Rust pour tout et n'importe quoi. Y'a bien Python qui garde une place dans mon coeur, mais juste pour des trucs rapides, ou pour le plaisir de changer. Et en général avec pytype.
[^] # Re: Déjà vu
Posté par Colin Pitrat (site web personnel) . En réponse au journal Les adresses mail personnelles et les comptes en lignes. Évalué à 7.
C'est facile d'en faire une qui valide un e-mail du moment que tu acceptes des faux positifs: ".@."
Moi ce qui me hérisse ce sont les sites qui refusent les + dans les adresses mails. Et ils sont légion malheureusement.
# Avec cette loi, l'Affaire Benalla aurait-elle pu paraître au grand jour ?
Posté par Colin Pitrat (site web personnel) . En réponse au journal Projet de loi "Sécurité Globale". Évalué à 10. Dernière modification le 02 novembre 2020 à 16:57.
Ben non, c'est bien le but, non?