{"id":4073,"date":"2026-09-21T14:51:00","date_gmt":"2026-09-21T14:51:00","guid":{"rendered":"https:\/\/www.chess.lumn.eu\/wordpress\/?p=4073"},"modified":"2026-09-30T08:31:04","modified_gmt":"2026-09-30T08:31:04","slug":"fruit-sur-mac-versus-fruit-sur-pc","status":"publish","type":"post","link":"https:\/\/www.chess.lumn.eu\/wordpress\/2026\/09\/21\/fruit-sur-mac-versus-fruit-sur-pc\/","title":{"rendered":"Fruit sur MAC versus Fruit sur PC!"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"4073\" class=\"elementor elementor-4073\">\n\t\t\t\t\t\t<div class=\"elementor-inner\">\n\t\t\t\t<div class=\"elementor-section-wrap\">\n\t\t\t\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-b7bf6e2 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"b7bf6e2\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t\t\t<div class=\"elementor-row\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-d3145fb\" data-id=\"d3145fb\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-column-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-391c71f elementor-widget elementor-widget-html\" data-id=\"391c71f\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin>\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=DM+Serif+Display:ital@0;1&family=DM+Sans:ital,opsz,wght@0,9..40,300..700;1,9..40,400&family=JetBrains+Mono:wght@400;500;700&display=swap\" rel=\"stylesheet\">\n<style>\n  .naum-body{\n    --creme:#f7f4ee; --encre:#2b2b2b; --rouge:#c0392b;\n    --or:#b8863b; --trait:#e3ddd0; --gris:#6b665c;\n    max-width:900px; margin:0 auto; padding:64px 28px 120px;\n    background:var(--creme); color:var(--encre);\n    font-family:'DM Sans',system-ui,sans-serif; font-weight:400;\n    font-size:18px; line-height:1.72; -webkit-font-smoothing:antialiased;\n  }\n  .naum-body, .naum-body *{box-sizing:border-box;}\n\n  .naum-body h1{font-family:'DM Serif Display',serif; font-weight:400; font-size:2.9rem;\n     line-height:1.08; letter-spacing:-.5px; margin:0 0 .35em; color:var(--encre);}\n  .naum-body h2{font-family:'DM Serif Display',serif; font-weight:400; font-size:1.85rem;\n     line-height:1.15; letter-spacing:-.3px; margin:2.6em 0 .5em; padding-bottom:.25em;\n     border-bottom:2px solid var(--rouge); color:var(--encre);}\n  .naum-body h3{font-family:'DM Sans',sans-serif; font-weight:700; font-size:1.1rem;\n     letter-spacing:.2px; text-transform:uppercase; margin:1.8em 0 .4em; color:var(--rouge);}\n  .naum-body .eyebrow{font-family:'JetBrains Mono',monospace; font-size:.78rem; letter-spacing:3px;\n     text-transform:uppercase; color:var(--or); margin:0 0 1.2em;}\n  .naum-body .chapeau{font-size:1.22rem; line-height:1.6; color:var(--gris); font-style:italic;\n     margin:0 0 2.4em; padding-left:1.1em; border-left:3px solid var(--or);}\n  .naum-body p{margin:0 0 1.15em;}\n  .naum-body a{color:var(--rouge); text-decoration:none; border-bottom:1px solid rgba(192,57,43,.35);}\n  .naum-body a:hover{border-bottom-color:var(--rouge);}\n  .naum-body strong{font-weight:700;}\n  .naum-body code{font-family:'JetBrains Mono',monospace; font-size:.85em; background:#efe9dd;\n     padding:.08em .35em; border-radius:3px; color:#7a3b2e;}\n  .naum-body ul,.naum-body ol{margin:0 0 1.2em; padding-left:1.35em;}\n  .naum-body li{margin:.4em 0;}\n\n  .naum-body ol.etapes{list-style:none; padding-left:0; counter-reset:et;}\n  .naum-body ol.etapes>li{counter-increment:et; position:relative; padding-left:52px; margin:1.1em 0;}\n  .naum-body ol.etapes>li::before{content:counter(et); position:absolute; left:0; top:-2px;\n     width:34px; height:34px; border-radius:50%; background:var(--rouge); color:#fff;\n     font-family:'JetBrains Mono',monospace; font-weight:700; font-size:1rem;\n     display:flex; align-items:center; justify-content:center;}\n\n  .naum-body .box{border-radius:8px; padding:18px 22px; margin:1.6em 0; font-size:.97rem; line-height:1.62;}\n  .naum-body .box .box-titre{font-family:'JetBrains Mono',monospace; font-size:.72rem; letter-spacing:2px;\n     text-transform:uppercase; display:block; margin-bottom:.5em; font-weight:700;}\n  .naum-body .naum-note-box{background:#f3ecda; border:1px solid #ddd0ab;}\n  .naum-body .naum-note-box .box-titre{color:#9a7b2e;}\n  .naum-body .naum-alert-box{background:#fbeae7; border:1px solid #e8b6ac;}\n  .naum-body .naum-alert-box .box-titre{color:var(--rouge);}\n  .naum-body .naum-coherence-box{background:#e9f2e6; border:1px solid #b6d3ab;}\n  .naum-body .naum-coherence-box .box-titre{color:#4e7a3b;}\n\n  .naum-body .tbl-wrap{overflow-x:auto; margin:1.6em 0;}\n  .naum-body table{border-collapse:collapse; width:100%; font-size:.9rem; background:transparent;}\n  .naum-body th,.naum-body td{border:1px solid var(--trait); padding:10px 13px; text-align:left; vertical-align:top;}\n  .naum-body th{background:#efe9dd; font-weight:700; letter-spacing:.3px;}\n  .naum-body tbody tr:nth-child(even){background:#faf7f0;}\n  .naum-body .ok{color:#4e7a3b; font-weight:700;}\n  .naum-body .taille{font-family:'JetBrains Mono',monospace; font-size:.86em; white-space:nowrap;}\n\n  .naum-body .champ{font-family:'JetBrains Mono',monospace; font-size:.82rem; background:#20232a;\n     color:#e6e1d6; padding:14px 18px; border-radius:6px; margin:.6em 0; overflow-x:auto;\n     border-left:3px solid var(--or);}\n  .naum-body .champ b{color:#e8b17a; font-weight:700;}\n\n  .naum-body .dl-zone{background:#20232a; border-radius:12px; padding:34px 30px; margin:2.2em 0;\n     text-align:center; color:#e6e1d6;}\n  .naum-body .dl-zone h3{color:#e8b17a; margin:0 0 .3em;}\n  .naum-body .dl-zone p{color:#b7b1a4; font-size:.95rem; margin:0 0 1.4em;}\n  .naum-body .dl-button{font-family:'DM Sans',sans-serif; font-weight:700; font-size:1.05rem;\n     background:var(--rouge); color:#fff; border:none; padding:15px 34px; border-radius:8px;\n     cursor:pointer; letter-spacing:.3px; transition:transform .12s ease, background .2s ease;}\n  .naum-body .dl-button:hover{background:#a5301f; transform:translateY(-2px);}\n  .naum-body .dl-button:active{transform:translateY(0);}\n  .naum-body .dl-sub{font-family:'JetBrains Mono',monospace; font-size:.74rem; color:#8a857a; margin-top:1em;}\n\n  .naum-body hr{border:none; border-top:1px solid var(--trait); margin:3em 0;}\n  .naum-body .sig{font-family:'JetBrains Mono',monospace; font-size:.78rem; color:var(--gris);\n     text-align:right; margin-top:3.5em;}\n\n  @media (max-width:600px){\n    .naum-body{font-size:16px; padding:44px 18px 90px;}\n    .naum-body h1{font-size:2.1rem;}\n    .naum-body h2{font-size:1.45rem;}\n  }\n<\/style>\n<article class=\"naum-body\">\n\n  <p class=\"eyebrow\">Laboratoire &middot; exp\u00e9rience<\/p>\n  <h1>Un m\u00eame Fruit, deux machines<\/h1>\n  <p class=\"chapeau\">\n    Fruit&nbsp;2.1, compil\u00e9 \u00e0 partir du m\u00eame code source pour Windows et pour Mac, affronte\n    les m\u00eames adversaires dans les m\u00eames conditions &mdash; une fois sur un PC, une fois sur un\n    Mac \u00e0 puce Apple &mdash;, puis se mesure \u00e0 lui-m\u00eame, Mac contre PC. Ce que la diff\u00e9rence de\n    score mesure, ce n'est plus le moteur : c'est la machine. Apr\u00e8s pr\u00e8s de mille parties, le PC\n    ressort devant, de 17 \u00e0 39 points selon la mesure. Mais l'\u00e9cart n'appara\u00eet que lorsque\n    plusieurs parties tournent en m\u00eame temps.\n  <\/p>\n\n  <h2>L'id\u00e9e<\/h2>\n  <p>\n    On compare d'ordinaire des moteurs entre eux, sur une machine donn\u00e9e. Ici on fait l'inverse :\n    on fige le moteur et on change la machine. Si un m\u00eame programme joue plus fort sur l'une que\n    sur l'autre, l'\u00e9cart en Elo donne une mesure directe de ce que vaut, aux \u00e9checs, la diff\u00e9rence\n    entre deux processeurs.\n  <\/p>\n  <p>\n    Encore faut-il que le moteur soit <strong>vraiment le m\u00eame<\/strong> des deux c\u00f4t\u00e9s. C'est ce\n    qui fait l'int\u00e9r\u00eat de Fruit&nbsp;2.1.\n  <\/p>\n\n  <h2>Fruit 2.1, le m\u00eame code pour tous<\/h2>\n  <p>\n    Fruit est l'\u0153uvre de Fabien Letouzey. Sa version&nbsp;2.1, publi\u00e9e en 2005 sous licence libre,\n    a marqu\u00e9 l'histoire des \u00e9checs sur ordinateur : un programme gratuit, \u00e9crit par un seul homme,\n    qui tenait t\u00eate aux grands logiciels commerciaux, et dont le code a inspir\u00e9 une longue lign\u00e9e\n    de moteurs. Fruit a termin\u00e9 vice-champion du monde des programmes \u00e0 Reykjav\u00edk en 2005, en\n    tournant sur un seul processeur face \u00e0 des adversaires qui en utilisaient plusieurs.\n  <\/p>\n  <p>\n    Parce que ce code source est public, il peut \u00eatre recompil\u00e9 aujourd'hui pour n'importe quelle\n    plateforme. C'est ce qu'a fait Darius, auteur du site\n    <a href=\"https:\/\/www.chessengeria.eu\/post\/fruit-oldie-goldie\">chessengeria.eu<\/a>&nbsp;: il a\n    compil\u00e9 Fruit&nbsp;2.1 avec des outils actuels pour Windows, pour Mac &mdash; puces Apple et\n    Intel &mdash;, pour Linux et pour Android. Les versions utilis\u00e9es ici sont les siennes, pour\n    Windows et pour Mac.\n  <\/p>\n  <div class=\"box naum-note-box\">\n    <span class=\"box-titre\">Pourquoi c'est important<\/span>\n    Deux compilations du m\u00eame source, par la m\u00eame personne, avec la m\u00eame d\u00e9marche : ce qui reste\n    de diff\u00e9rence entre elles tient au processeur et au compilateur de chaque plateforme, pas \u00e0\n    une version ou \u00e0 un r\u00e9glage du moteur. C'est la condition pour que la comparaison ait un sens.\n  <\/div>\n\n  <h2>Les deux machines<\/h2>\n  <div class=\"tbl-wrap\">\n  <table>\n    <thead><tr><th><\/th><th>PC<\/th><th>Mac<\/th><\/tr><\/thead>\n    <tbody>\n      <tr><td><strong>Machine<\/strong><\/td><td>poste fixe<\/td><td>MacBook Pro<\/td><\/tr>\n      <tr><td><strong>Processeur<\/strong><\/td><td>AMD Ryzen 9 7950X3D<\/td><td>Apple M1 Max<\/td><\/tr>\n      <tr><td><strong>Architecture<\/strong><\/td><td>x86-64<\/td><td>ARM64 (Apple Silicon)<\/td><\/tr>\n      <tr><td><strong>Binaire<\/strong><\/td><td><code>Fruit 2.1.exe<\/code><\/td><td><code>Fruit-2.1_Mac_Apple_Silicon<\/code><\/td><\/tr>\n    <\/tbody>\n  <\/table>\n  <\/div>\n  <p>\n    Fruit&nbsp;2.1 ne sait utiliser qu'un seul processeur. La comparaison porte donc sur\n    <strong>un c\u0153ur contre un c\u0153ur<\/strong> &mdash; ce qui la rend d'autant plus nette : ni le\n    nombre de c\u0153urs ni l'efficacit\u00e9 d'un parall\u00e9lisme ne viennent s'y m\u00ealer.\n  <\/p>\n\n  <h2>Faire jouer un moteur Mac contre des moteurs PC<\/h2>\n  <p>\n    Il fallait r\u00e9soudre un probl\u00e8me pratique. Les adversaires tournent sur le PC, et une partie\n    d'entre eux ne peuvent tourner que l\u00e0. Le tournoi est donc organis\u00e9 sur le PC, par\n    <strong>cutechess-cli<\/strong>. Mais cutechess ne sait parler qu'\u00e0 des programmes install\u00e9s\n    sur la m\u00eame machine que lui.\n  <\/p>\n  <p>\n    La solution tient en deux petits programmes qui se parlent par le r\u00e9seau domestique. Sur le\n    Mac, un <strong>serveur<\/strong> attend les connexions, lance Fruit \u00e0 la demande et fait\n    circuler les messages. Sur le PC, un <strong>relais<\/strong> se fait passer pour le moteur\n    aupr\u00e8s de cutechess, et transmet tout au serveur. Pour cutechess, rien ne distingue Fruit du\n    Mac d'un moteur install\u00e9 localement.\n  <\/p>\n  <div class=\"box naum-coherence-box\">\n    <span class=\"box-titre\">Et le r\u00e9seau ne fausse-t-il pas le temps ?<\/span>\n    Un aller-retour sur un r\u00e9seau domestique prend de l'ordre d'une milliseconde. \u00c0 quinze\n    secondes par coup, c'est un dix-milli\u00e8me du temps de r\u00e9flexion. Cutechess mesure d'ailleurs\n    la pendule c\u00f4t\u00e9 PC, r\u00e9seau compris, et laisse quatre secondes de tol\u00e9rance avant de d\u00e9clarer\n    une perte au temps.\n  <\/div>\n\n  <h3>Les deux programmes<\/h3>\n  <p>\n    Ils sont \u00e9crits en Python et n'utilisent que la biblioth\u00e8que standard : rien \u00e0 installer\n    d'autre. Le serveur n'ex\u00e9cute que les moteurs inscrits dans sa propre table &mdash; aucune\n    commande re\u00e7ue du r\u00e9seau n'est lanc\u00e9e telle quelle.\n  <\/p>\n\n  <div class=\"dl-zone\">\n    <h3>uci_serveur.py &mdash; c\u00f4t\u00e9 Mac<\/h3>\n    <p>\u00c9coute sur le r\u00e9seau et lance le moteur \u00e0 chaque connexion. Affiche en direct, pour chaque\n       coup jou\u00e9, la profondeur atteinte, l'\u00e9valuation et la vitesse du moteur.<\/p>\n    <button id=\"dl-srv\" class=\"dl-button\">&#x2193;&nbsp;&nbsp;T\u00e9l\u00e9charger uci_serveur.py<\/button>\n    <div class=\"dl-sub\">script Python 3 &middot; \u00e0 placer sur la machine qui h\u00e9berge le moteur<\/div>\n  <\/div>\n\n  <div class=\"dl-zone\">\n    <h3>uci_relais.py &mdash; c\u00f4t\u00e9 PC<\/h3>\n    <p>Lanc\u00e9 par cutechess comme s'il \u00e9tait le moteur. Se connecte au serveur et fait passer le\n       dialogue dans les deux sens.<\/p>\n    <button id=\"dl-rel\" class=\"dl-button\">&#x2193;&nbsp;&nbsp;T\u00e9l\u00e9charger uci_relais.py<\/button>\n    <div class=\"dl-sub\">script Python 3 &middot; \u00e0 placer \u00e0 c\u00f4t\u00e9 du batch cutechess<\/div>\n  <\/div>\n\n  <h3>La mise en place<\/h3>\n  <ol class=\"etapes\">\n    <li>Sur le Mac, placer <code>uci_serveur.py<\/code> et renseigner, en t\u00eate du fichier, le nom\n      du binaire de Fruit et son dossier.<\/li>\n    <li>Rendre le binaire ex\u00e9cutable et lever la quarantaine que macOS pose sur les fichiers\n      t\u00e9l\u00e9charg\u00e9s :\n      <div class=\"champ\">chmod +x Fruit-2.1_Mac_Apple_Silicon<br>xattr -d com.apple.quarantine Fruit-2.1_Mac_Apple_Silicon<\/div><\/li>\n    <li>Lancer le serveur, et laisser la fen\u00eatre ouverte :\n      <div class=\"champ\">python3 uci_serveur.py<\/div><\/li>\n    <li>Noter l'adresse du Mac sur le r\u00e9seau :\n      <div class=\"champ\">ipconfig getifaddr en0<\/div><\/li>\n    <li>Sur le PC, d\u00e9clarer le moteur dans cutechess en appelant le relais, avec l'adresse du Mac :\n      <div class=\"champ\">-engine name=\"Fruit 2.1 Mac\" cmd=py arg=-3 arg=uci_relais.py <b>arg=192.168.x.x arg=5555 arg=fruit21<\/b> proto=uci<\/div><\/li>\n  <\/ol>\n  <div class=\"box naum-alert-box\">\n    <span class=\"box-titre\">Trois pi\u00e8ges rencontr\u00e9s en route<\/span>\n    Un moteur Unix re\u00e7oit mal ce que Windows lui envoie, et il a fallu les surmonter un par un.\n    Les fins de ligne d'abord : Windows ajoute un retour chariot que Fruit ne sait pas lire, si\n    bien qu'il ignorait la commande <code>uci<\/code>. Les espaces ensuite : l'invite de commandes\n    de Windows en glisse parfois en fin de ligne, que Fruit ne reconna\u00eet pas davantage. L'ordre\n    enfin : quand deux commandes arrivent ensemble, le relais doit attendre la r\u00e9ponse du Mac\n    avant de se fermer. Les versions propos\u00e9es ici corrigent les trois.\n  <\/div>\n\n  <hr>\n\n  <p class=\"eyebrow\">Deuxi\u00e8me partie &middot; la mesure<\/p>\n  <h2>Le protocole<\/h2>\n  <p>\n    Fruit&nbsp;2.1 a jou\u00e9 trois s\u00e9ries, toutes dans les m\u00eames conditions de jeu. Seul change\n    l'endroit o\u00f9 tourne Fruit, et le nombre de parties men\u00e9es en m\u00eame temps.\n  <\/p>\n  <ul>\n    <li><strong>Cadence<\/strong> : 60 coups en 15 minutes, reconduite \u00e0 chaque p\u00e9riode ;<\/li>\n    <li><strong>table de hachage<\/strong> de 512 Mo pour tous les moteurs ;<\/li>\n    <li><strong>livre d'ouvertures Perfect 2023<\/strong>, impos\u00e9 sur huit coups environ, livres\n      internes des moteurs d\u00e9sactiv\u00e9s ; chaque ouverture est jou\u00e9e dans les deux couleurs ;<\/li>\n    <li><strong>tournoi organis\u00e9 sur le PC<\/strong> par cutechess-cli ; Fruit du Mac y participe \u00e0\n      travers le relais r\u00e9seau.<\/li>\n  <\/ul>\n  <div class=\"tbl-wrap\">\n  <table>\n    <thead><tr><th>S\u00e9rie<\/th><th>Dates<\/th><th class=\"taille\">Parties<\/th><th class=\"taille\">Simultan\u00e9es<\/th><th class=\"taille\">Dur\u00e9e moy.<\/th><\/tr><\/thead>\n    <tbody>\n      <tr><td><strong>1. Gauntlets, une partie \u00e0 la fois<\/strong><\/td><td>21 &ndash; 24 septembre<\/td><td class=\"taille\">Mac 100 &middot; PC 100<\/td><td class=\"taille\">1 + 1<\/td><td class=\"taille\">42 &middot; 43 min<\/td><\/tr>\n      <tr><td><strong>2. Gauntlets en parall\u00e8le<\/strong><\/td><td>25 &ndash; 26 septembre<\/td><td class=\"taille\">Mac 177 &middot; PC 200<\/td><td class=\"taille\">4 &middot; 12<\/td><td class=\"taille\">42 &middot; 44 min<\/td><\/tr>\n      <tr><td><strong>3. Affrontement direct Mac &ndash; PC<\/strong><\/td><td>26 &ndash; 28 septembre<\/td><td class=\"taille\">419<\/td><td class=\"taille\">8<\/td><td class=\"taille\">38 min<\/td><\/tr>\n    <\/tbody>\n  <\/table>\n  <\/div>\n  <p>\n    Dans la premi\u00e8re s\u00e9rie, les deux gauntlets ont tourn\u00e9 en m\u00eame temps, une partie \u00e0 la fois\n    chacun. Dans la deuxi\u00e8me, le gauntlet du Mac a men\u00e9 quatre parties de front et celui du PC\n    douze, pour aller plus vite : le Ryzen a seize c\u0153urs, le M1 Max en a dix. L'affrontement direct\n    a tourn\u00e9 avec huit parties simultan\u00e9es : huit Fruit sur le Mac, huit sur le PC.\n  <\/p>\n\n  <h3>Les adversaires<\/h3>\n  <p>\n    Cinq moteurs d'un seul processeur, tous calibr\u00e9s dans le\n    <a href=\"https:\/\/www.chess.lumn.eu\/wordpress\/2026\/05\/13\/performance-elo\/#lumn-classement\">classement du laboratoire<\/a>,\n    et choisis pour encadrer la force attendue de Fruit&nbsp;2.1. Les cotes indiqu\u00e9es sont celles\n    du classement actuel, apr\u00e8s int\u00e9gration de toutes les parties ; moyenne du champ&nbsp;: 2783.\n  <\/p>\n  <div class=\"tbl-wrap\">\n  <table>\n    <thead><tr><th>Adversaire<\/th><th class=\"taille\">Cote<\/th><th>\u00c0 savoir<\/th><\/tr><\/thead>\n    <tbody>\n      <tr><td><strong>Shredder 10 UCI<\/strong><\/td><td class=\"taille\">2840<\/td><td>La r\u00e9f\u00e9rence la plus \u00e9prouv\u00e9e du classement.<\/td><\/tr>\n      <tr><td><strong>Fritz 9 UCI py<\/strong><\/td><td class=\"taille\">2820<\/td><td>Moteur ChessBase, jou\u00e9 \u00e0 travers le pont <code>eng2uci<\/code>.<\/td><\/tr>\n      <tr><td><strong>ProDeo 2.0<\/strong><\/td><td class=\"taille\">2787<\/td><td>Au niveau attendu de Fruit&nbsp;2.1.<\/td><\/tr>\n      <tr><td><strong>Chess Tiger 2007<\/strong><\/td><td class=\"taille\">2743<\/td><td><\/td><\/tr>\n      <tr><td><strong>The King 3.50<\/strong><\/td><td class=\"taille\">2726<\/td><td>Le moteur de Chessmaster.<\/td><\/tr>\n    <\/tbody>\n  <\/table>\n  <\/div>\n\n  <h3>O\u00f9 attend-on Fruit 2.1 ?<\/h3>\n  <p>\n    La liste CCRL place Fruit&nbsp;2.1 \u00e0 2695, soit 90 points sous Fruit&nbsp;2.3.1. Rapport\u00e9 \u00e0\n    l'\u00e9chelle du laboratoire, o\u00f9 Fruit&nbsp;2.3.1 est cot\u00e9 2880, cela situait Fruit&nbsp;2.1\n    <strong>vers 2790<\/strong> &mdash; au niveau de ProDeo, au centre du champ. La mesure l'a\n    plac\u00e9 nettement plus bas (voir les r\u00e9sultats).\n  <\/p>\n  <p>\n    Darius l'a lui-m\u00eame mesur\u00e9 sur un MacBook Pro M1, \u00e0 cadence tr\u00e8s rapide, et obtient 2723 dans\n    sa propre liste de moteurs pour Mac. Les deux \u00e9chelles ne sont pas directement comparables,\n    mais les deux mesures placent Fruit&nbsp;2.1 dans la m\u00eame r\u00e9gion.\n  <\/p>\n\n  <h2>Les r\u00e9sultats<\/h2>\n  <p>\n    En tout, <strong>996 parties<\/strong> : 277 pour Fruit du Mac contre les cinq adversaires, 300\n    pour Fruit du PC, et 419 de Fruit contre lui-m\u00eame. Trois mesures en sortent : la cote Ordo\n    globale, la performance contre les m\u00eames adversaires, et le score de l'affrontement direct.\n  <\/p>\n\n  <h3>Le classement du laboratoire<\/h3>\n  <p>\n    Toutes les parties sont int\u00e9gr\u00e9es au\n    <a href=\"https:\/\/www.chess.lumn.eu\/wordpress\/2026\/05\/13\/performance-elo\/#lumn-classement\">classement du laboratoire<\/a>,\n    calcul\u00e9 par Ordo :\n  <\/p>\n  <div class=\"tbl-wrap\">\n  <table>\n    <thead><tr><th>Moteur<\/th><th>Processeur<\/th><th class=\"taille\">Rang<\/th><th class=\"taille\">Cote<\/th><th class=\"taille\">&plusmn;<\/th><th class=\"taille\">Parties<\/th><\/tr><\/thead>\n    <tbody>\n      <tr><td><strong>Fruit 2.1 PC<\/strong><\/td><td>AMD Ryzen 9 7950X3D<\/td><td class=\"taille\">83<\/td><td class=\"taille\"><strong>2723<\/strong><\/td><td class=\"taille\">8<\/td><td class=\"taille\">710<\/td><\/tr>\n      <tr><td><strong>Fruit 2.1 Mac<\/strong><\/td><td>Apple M1 Max<\/td><td class=\"taille\">94<\/td><td class=\"taille\"><strong>2690<\/strong><\/td><td class=\"taille\">8<\/td><td class=\"taille\">686<\/td><\/tr>\n    <\/tbody>\n  <\/table>\n  <\/div>\n  <div class=\"box naum-alert-box\">\n    <span class=\"box-titre\">Huit d\u00e9faites qui n'en sont pas<\/span>\n    L'affrontement direct a \u00e9t\u00e9 arr\u00eat\u00e9 le 28 septembre \u00e0 6&nbsp;h&nbsp;58 alors que huit parties\n    \u00e9taient en cours. Cutechess les a enregistr\u00e9es comme des d\u00e9connexions de Fruit du Mac, donc\n    comme huit d\u00e9faites du Mac, toutes termin\u00e9es \u00e0 la m\u00eame seconde ; une neuvi\u00e8me partie est\n    rest\u00e9e sans r\u00e9sultat. Ces huit parties figurent dans le classement ci-dessus et y p\u00e9nalisent\n    le Mac. Elles sont \u00e9cart\u00e9es de toutes les mesures qui suivent.\n  <\/div>\n\n  <h3>Contre les m\u00eames adversaires<\/h3>\n  <p>\n    S\u00e9ries 1 et 2 r\u00e9unies. Performances calcul\u00e9es sur la cote actuelle de chaque adversaire, par la\n    formule perf = cote adverse + 400 &middot; log<sub>10<\/sub>(p \/ (1 &minus; p)).\n  <\/p>\n  <div class=\"tbl-wrap\">\n  <table>\n    <thead>\n      <tr><th rowspan=\"2\">Adversaire<\/th><th rowspan=\"2\" class=\"taille\">Cote<\/th><th colspan=\"3\" style=\"text-align:center\">Fruit 2.1 Mac<\/th><th colspan=\"3\" style=\"text-align:center\">Fruit 2.1 PC<\/th><\/tr>\n      <tr><th class=\"taille\">+ = &minus;<\/th><th class=\"taille\">Score<\/th><th class=\"taille\">Perf.<\/th><th class=\"taille\">+ = &minus;<\/th><th class=\"taille\">Score<\/th><th class=\"taille\">Perf.<\/th><\/tr>\n    <\/thead>\n    <tbody>\n      <tr><td>Shredder 10 UCI<\/td><td class=\"taille\">2840<\/td><td class=\"taille\">4 28 24<\/td><td class=\"taille\">18 \/ 56<\/td><td class=\"taille\">2710<\/td><td class=\"taille\">11 19 30<\/td><td class=\"taille\">20,5 \/ 60<\/td><td class=\"taille\">2726<\/td><\/tr>\n      <tr><td>Fritz 9 UCI py<\/td><td class=\"taille\">2820<\/td><td class=\"taille\">12 19 25<\/td><td class=\"taille\">21,5 \/ 56<\/td><td class=\"taille\">2738<\/td><td class=\"taille\">14 19 27<\/td><td class=\"taille\">23,5 \/ 60<\/td><td class=\"taille\">2744<\/td><\/tr>\n      <tr><td>ProDeo 2.0<\/td><td class=\"taille\">2787<\/td><td class=\"taille\">9 21 26<\/td><td class=\"taille\">19,5 \/ 56<\/td><td class=\"taille\">2678<\/td><td class=\"taille\">16 17 27<\/td><td class=\"taille\">24,5 \/ 60<\/td><td class=\"taille\">2723<\/td><\/tr>\n      <tr><td>Chess Tiger 2007<\/td><td class=\"taille\">2743<\/td><td class=\"taille\">10 23 22<\/td><td class=\"taille\">21,5 \/ 55<\/td><td class=\"taille\">2666<\/td><td class=\"taille\">16 23 21<\/td><td class=\"taille\">27,5 \/ 60<\/td><td class=\"taille\">2714<\/td><\/tr>\n      <tr><td>The King 3.50<\/td><td class=\"taille\">2726<\/td><td class=\"taille\">16 19 19<\/td><td class=\"taille\">25,5 \/ 54<\/td><td class=\"taille\">2707<\/td><td class=\"taille\">17 18 25<\/td><td class=\"taille\">26 \/ 60<\/td><td class=\"taille\">2679<\/td><\/tr>\n      <tr><td><strong>Total<\/strong><\/td><td class=\"taille\">2783<\/td><td class=\"taille\">51 110 116<\/td><td class=\"taille\"><strong>106 \/ 277<\/strong><\/td><td class=\"taille\"><strong>2701<\/strong><\/td><td class=\"taille\">74 96 130<\/td><td class=\"taille\"><strong>122 \/ 300<\/strong><\/td><td class=\"taille\"><strong>2718<\/strong><\/td><\/tr>\n    <\/tbody>\n  <\/table>\n  <\/div>\n  <p>\n    Sur l'ensemble, le PC fait 17 points de mieux, et devance le Mac contre quatre adversaires sur\n    cinq. Mais cet \u00e9cart global cache deux s\u00e9ries qui ne disent pas la m\u00eame chose :\n  <\/p>\n  <div class=\"tbl-wrap\">\n  <table>\n    <thead><tr><th>S\u00e9rie<\/th><th class=\"taille\">Parties simultan\u00e9es<\/th><th class=\"taille\">Perf. Mac<\/th><th class=\"taille\">Perf. PC<\/th><th class=\"taille\">\u00c9cart PC &minus; Mac<\/th><\/tr><\/thead>\n    <tbody>\n      <tr><td>1. Une partie \u00e0 la fois<\/td><td class=\"taille\">1 &middot; 1<\/td><td class=\"taille\">2720 <span style=\"color:var(--gris)\">(41 \/ 100)<\/span><\/td><td class=\"taille\">2709 <span style=\"color:var(--gris)\">(39,5 \/ 100)<\/span><\/td><td class=\"taille\">&minus;11<\/td><\/tr>\n      <tr><td>2. En parall\u00e8le<\/td><td class=\"taille\">4 &middot; 12<\/td><td class=\"taille\">2690 <span style=\"color:var(--gris)\">(65 \/ 177)<\/span><\/td><td class=\"taille\">2722 <span style=\"color:var(--gris)\">(82,5 \/ 200)<\/span><\/td><td class=\"taille\">+32<\/td><\/tr>\n    <\/tbody>\n  <\/table>\n  <\/div>\n  <p>\n    Sur cent \u00e0 deux cents parties, l'incertitude d'une performance est de &plusmn;30 \u00e0 &plusmn;40\n    points : aucune de ces deux s\u00e9ries ne suffit \u00e0 elle seule. C'est l'affrontement direct qui\n    tranche.\n  <\/p>\n\n  <h3>L'affrontement direct<\/h3>\n  <p>\n    Fruit du Mac contre Fruit du PC, sur 169 ouvertures du livre, toutes jou\u00e9es avec les deux\n    couleurs sauf une. Chaque partie compare les deux machines dans la m\u00eame position, contre le\n    m\u00eame adversaire : c'est la mesure la plus directe. 410 parties sont all\u00e9es \u00e0 leur terme.\n  <\/p>\n  <div class=\"tbl-wrap\">\n  <table>\n    <thead><tr><th><\/th><th class=\"taille\">Parties<\/th><th class=\"taille\">Fruit 2.1 PC (+ = &minus;)<\/th><th class=\"taille\">Score PC<\/th><th class=\"taille\">\u00c9cart Elo<\/th><th class=\"taille\">IC 95 %<\/th><\/tr><\/thead>\n    <tbody>\n      <tr><td><strong>Parties jou\u00e9es jusqu'au bout<\/strong><\/td><td class=\"taille\">410<\/td><td class=\"taille\">117 222 71<\/td><td class=\"taille\">55,6 %<\/td><td class=\"taille\"><strong>+39<\/strong><\/td><td class=\"taille\">+17 \u00e0 +62<\/td><\/tr>\n      <tr><td>Avec les 8 parties interrompues<\/td><td class=\"taille\">418<\/td><td class=\"taille\">125 222 71<\/td><td class=\"taille\">56,5 %<\/td><td class=\"taille\">+45<\/td><td class=\"taille\">+23 \u00e0 +68<\/td><\/tr>\n    <\/tbody>\n  <\/table>\n  <\/div>\n  <p>\n    Quarante-six parties gagn\u00e9es de plus que perdues : la probabilit\u00e9 que le PC soit r\u00e9ellement le\n    plus fort dans ces conditions d\u00e9passe 99,9&nbsp;%.\n  <\/p>\n\n  <div class=\"box naum-coherence-box\">\n    <span class=\"box-titre\">Le verdict<\/span>\n    <strong>Le PC est plus fort, de 30 \u00e0 40 points, quand les deux machines sont charg\u00e9es.<\/strong>\n    L'affrontement direct donne +39 (+17 \u00e0 +62), la deuxi\u00e8me s\u00e9rie +32 ; le classement Ordo, qui\n    compte encore les huit parties interrompues, +33. Dans la premi\u00e8re s\u00e9rie, une partie \u00e0 la fois,\n    les deux machines faisaient jeu \u00e9gal (le Mac devant de 11 points, dans la marge d'erreur).\n    Le premier bilan, qui concluait \u00e0 l'\u00e9galit\u00e9, n'\u00e9tait donc pas faux : il ne mesurait que la\n    situation d'une seule partie par machine.\n  <\/div>\n\n  <h3>Les couleurs<\/h3>\n  <div class=\"tbl-wrap\">\n  <table>\n    <thead><tr><th><\/th><th class=\"taille\">Avec les Blancs<\/th><th class=\"taille\">Avec les Noirs<\/th><\/tr><\/thead>\n    <tbody>\n      <tr><td><strong>Fruit 2.1 Mac<\/strong> (gauntlets)<\/td><td class=\"taille\">+24 =53 &minus;62 &middot; 50,5 \/ 139<\/td><td class=\"taille\">+27 =57 &minus;54 &middot; 55,5 \/ 138<\/td><\/tr>\n      <tr><td><strong>Fruit 2.1 PC<\/strong> (gauntlets)<\/td><td class=\"taille\">+40 =45 &minus;65 &middot; 62,5 \/ 150<\/td><td class=\"taille\">+34 =51 &minus;65 &middot; 59,5 \/ 150<\/td><\/tr>\n      <tr><td><strong>Fruit 2.1 PC contre le Mac<\/strong><\/td><td class=\"taille\">+69 =106 &minus;30 &middot; 122 \/ 205<\/td><td class=\"taille\">+48 =116 &minus;41 &middot; 106 \/ 205<\/td><\/tr>\n    <\/tbody>\n  <\/table>\n  <\/div>\n  <p>\n    Dans l'affrontement direct, le PC marque plus de la moiti\u00e9 des points avec les Blancs (59,5&nbsp;%)\n    comme avec les Noirs (51,7&nbsp;%) : son avantage ne tient pas \u00e0 la couleur.\n  <\/p>\n\n  <h3>La fiabilit\u00e9 de la cha\u00eene<\/h3>\n  <p>\n    Fruit du Mac a jou\u00e9 696 parties \u00e0 travers le r\u00e9seau. <strong>Une seule vraie d\u00e9connexion<\/strong>,\n    le 26 septembre dans le gauntlet, et les huit parties coup\u00e9es par l'arr\u00eat de l'affrontement\n    direct. Aucune perte au temps, aucun coup ill\u00e9gal. Les autres parties se sont termin\u00e9es selon les\n    r\u00e8gles ou par arbitrage :\n  <\/p>\n  <div class=\"tbl-wrap\">\n  <table>\n    <thead><tr><th>Fin de partie<\/th><th class=\"taille\">Mac (gauntlets)<\/th><th class=\"taille\">PC (gauntlets)<\/th><th class=\"taille\">Mac contre PC<\/th><\/tr><\/thead>\n    <tbody>\n      <tr><td>Abandon (3 coups \u00e0 plus de 10 pions)<\/td><td class=\"taille\">164<\/td><td class=\"taille\">202<\/td><td class=\"taille\">186<\/td><\/tr>\n      <tr><td>Mat<\/td><td class=\"taille\">2<\/td><td class=\"taille\">2<\/td><td class=\"taille\">2<\/td><\/tr>\n      <tr><td>Nulle par triple r\u00e9p\u00e9tition<\/td><td class=\"taille\">64<\/td><td class=\"taille\">43<\/td><td class=\"taille\">177<\/td><\/tr>\n      <tr><td>Nulle par la r\u00e8gle des cinquante coups<\/td><td class=\"taille\">26<\/td><td class=\"taille\">30<\/td><td class=\"taille\">16<\/td><\/tr>\n      <tr><td>Nulle par mat\u00e9riel insuffisant<\/td><td class=\"taille\">15<\/td><td class=\"taille\">16<\/td><td class=\"taille\">28<\/td><\/tr>\n      <tr><td>Pat<\/td><td class=\"taille\">5<\/td><td class=\"taille\">7<\/td><td class=\"taille\">1<\/td><\/tr>\n      <tr><td>D\u00e9connexion \/ arr\u00eat du tournoi<\/td><td class=\"taille\">1<\/td><td class=\"taille\">&ndash;<\/td><td class=\"taille\">8<\/td><\/tr>\n      <tr><td><strong>Parties d\u00e9cisives \/ nulles<\/strong><\/td><td class=\"taille\"><strong>167 \/ 110<\/strong><\/td><td class=\"taille\"><strong>204 \/ 96<\/strong><\/td><td class=\"taille\"><strong>196 \/ 222<\/strong><\/td><\/tr>\n    <\/tbody>\n  <\/table>\n  <\/div>\n  <p>\n    Le Mac fait plus de nulles que le PC contre les m\u00eames adversaires, dont 21 r\u00e9p\u00e9titions de plus.\n    Dans les deux gauntlets de la deuxi\u00e8me s\u00e9rie, aucune r\u00e9p\u00e9tition n'a eu lieu dans une position que\n    Fruit jugeait nettement gagnante ou perdante : sur ses cinq derni\u00e8res \u00e9valuations avant la nulle,\n    aucune ne d\u00e9passe &plusmn;0,66. Ce sont des nulles \u00e0 \u00e9galit\u00e9, pas des points brad\u00e9s.\n    L'affrontement direct, lui, fait plus de moiti\u00e9 de nulles, dont 177 r\u00e9p\u00e9titions : deux Fruit\n    identiques tombent souvent d'accord.\n  <\/p>\n\n  <h3>Profondeur et temps de r\u00e9flexion<\/h3>\n  <p>\n    Cutechess inscrit dans le PGN, pour chaque coup, la profondeur atteinte et le temps consomm\u00e9.\n    C'est la mesure la plus directe de la vitesse des deux machines : \u00e0 temps \u00e9gal, un c\u0153ur plus\n    rapide va plus profond. Dans l'affrontement direct, les deux Fruit jouent les m\u00eames parties :\n  <\/p>\n  <div class=\"tbl-wrap\">\n  <table>\n    <thead><tr><th>Coups de Fruit (affrontement direct)<\/th><th class=\"taille\">Prof. Mac<\/th><th class=\"taille\">Prof. PC<\/th><th class=\"taille\">Temps Mac<\/th><th class=\"taille\">Temps PC<\/th><\/tr><\/thead>\n    <tbody>\n      <tr><td>1 \u00e0 20 (hors livre)<\/td><td class=\"taille\">14,04<\/td><td class=\"taille\">14,35<\/td><td class=\"taille\">25,5 s<\/td><td class=\"taille\">25,4 s<\/td><\/tr>\n      <tr><td>21 \u00e0 40<\/td><td class=\"taille\">15,08<\/td><td class=\"taille\">15,44<\/td><td class=\"taille\">15,9 s<\/td><td class=\"taille\">15,9 s<\/td><\/tr>\n      <tr><td>41 \u00e0 60<\/td><td class=\"taille\">17,88<\/td><td class=\"taille\">18,14<\/td><td class=\"taille\">14,7 s<\/td><td class=\"taille\">14,5 s<\/td><\/tr>\n      <tr><td>61 et au-del\u00e0<\/td><td class=\"taille\">23,03<\/td><td class=\"taille\">23,45<\/td><td class=\"taille\">19,4 s<\/td><td class=\"taille\">19,1 s<\/td><\/tr>\n      <tr><td><strong>Ensemble<\/strong><\/td><td class=\"taille\">17,69<\/td><td class=\"taille\">18,03<\/td><td class=\"taille\">18,3 s<\/td><td class=\"taille\">18,2 s<\/td><\/tr>\n    <\/tbody>\n  <\/table>\n  <\/div>\n  <p>\n    <strong>M\u00eame temps de r\u00e9flexion, mais un tiers de demi-coup de plus pour le PC, \u00e0 toutes les\n    phases de la partie.<\/strong> Partie par partie, sur les quarante premiers coups, le PC va plus\n    profond dans 346 parties sur 417, de 0,34 demi-coup en moyenne (&plusmn;0,05). L'\u00e9cart est\n    faible mais parfaitement r\u00e9gulier. Compar\u00e9 d'une s\u00e9rie \u00e0 l'autre, il suit la charge des machines :\n  <\/p>\n  <div class=\"tbl-wrap\">\n  <table>\n    <thead><tr><th>\u00c9cart de profondeur PC &minus; Mac<\/th><th class=\"taille\">Coups 1 \u00e0 20<\/th><th class=\"taille\">21 \u00e0 40<\/th><th class=\"taille\">41 \u00e0 60<\/th><\/tr><\/thead>\n    <tbody>\n      <tr><td>1. Une partie \u00e0 la fois<\/td><td class=\"taille\">&minus;0,04<\/td><td class=\"taille\">+0,05<\/td><td class=\"taille\">+0,57<\/td><\/tr>\n      <tr><td>2. En parall\u00e8le (Mac 4, PC 12)<\/td><td class=\"taille\">+0,19<\/td><td class=\"taille\">+0,17<\/td><td class=\"taille\">+0,07<\/td><\/tr>\n      <tr><td>3. Affrontement direct (8 et 8)<\/td><td class=\"taille\">+0,31<\/td><td class=\"taille\">+0,36<\/td><td class=\"taille\">+0,26<\/td><\/tr>\n    <\/tbody>\n  <\/table>\n  <\/div>\n  <p>\n    Au-del\u00e0 du 40<sup>e<\/sup> coup, les gauntlets ne jouent pas les m\u00eames finales, et la profondeur\n    y d\u00e9pend surtout du mat\u00e9riel restant : seule la colonne de l'affrontement direct, o\u00f9 les\n    positions sont communes, est comparable \u00e0 ce stade. Le nombre de positions calcul\u00e9es par seconde\n    n'est pas enregistr\u00e9 dans le PGN ; si l'on admet pour Fruit un facteur de branchement effectif de\n    2 \u00e0 3, un tiers de demi-coup correspond \u00e0 25 \u00e0 45&nbsp;% de positions en plus pour le PC.\n  <\/p>\n\n  <h3>Pourquoi la charge compte<\/h3>\n  <p>\n    Un processeur ne tourne pas \u00e0 la m\u00eame fr\u00e9quence selon le nombre de c\u0153urs occup\u00e9s. Seul, un c\u0153ur\n    du M1 Max comme un c\u0153ur du Ryzen monte \u00e0 sa fr\u00e9quence maximale ; quand plusieurs parties tournent\n    ensemble, les deux ralentissent, et pas forc\u00e9ment dans la m\u00eame proportion. Nos mesures s'accordent\n    avec un Mac qui perd davantage que le PC sous charge : \u00e9galit\u00e9 \u00e0 une partie par machine, avantage\n    au PC \u00e0 quatre, huit ou douze parties. Nous n'avons pas mesur\u00e9 les fr\u00e9quences : c'est une\n    explication plausible, pas une constatation. Un affrontement direct jou\u00e9 une partie \u00e0 la fois\n    permettrait de la v\u00e9rifier.\n  <\/p>\n\n  <h3>Les ouvertures<\/h3>\n  <p>\n    Le livre Perfect&nbsp;2023 tire ses ouvertures au hasard. Dans les gauntlets, chaque ouverture a\n    \u00e9t\u00e9 jou\u00e9e dans les deux couleurs, mais les deux machines n'ont pas tir\u00e9 les m\u00eames : dans la\n    deuxi\u00e8me s\u00e9rie, 82 ouvertures c\u00f4t\u00e9 Mac, 90 c\u00f4t\u00e9 PC, 15 seulement en commun. Une partie des \u00e9carts\n    adversaire par adversaire tient donc aux ouvertures. L'affrontement direct n'a pas ce d\u00e9faut :\n    les deux Fruit jouent chaque ouverture, une fois de chaque c\u00f4t\u00e9.\n  <\/p>\n\n  <h3>Fruit 2.1 dans l'\u00e9chelle du laboratoire<\/h3>\n  <p>\n    Cot\u00e9 2723 sur le PC et 2690 sur le Mac, Fruit&nbsp;2.1 se place 70 \u00e0 100 points sous la projection\n    tir\u00e9e de la liste CCRL (vers 2790), et 157 \u00e0 190 points sous Fruit&nbsp;2.3.1 (2880), l\u00e0 o\u00f9 la\n    CCRL met 90 points entre les deux versions. Fruit du PC se range juste sous The King&nbsp;3.50\n    (2726), le plus faible des cinq adversaires : le champ choisi pour encadrer Fruit&nbsp;2.1 s'est\n    trouv\u00e9 presque enti\u00e8rement au-dessus de lui, pour une moyenne de 2783. La mesure de Darius, 2723\n    dans sa liste de moteurs pour Mac, est num\u00e9riquement proche, mais les deux \u00e9chelles n'ont pas la\n    m\u00eame origine.\n  <\/p>\n\n  <div class=\"box naum-coherence-box\">\n    <span class=\"box-titre\">Ce que l'on a appris<\/span>\n    Un m\u00eame Fruit&nbsp;2.1 ne joue pas tout \u00e0 fait \u00e0 la m\u00eame force sur un c\u0153ur d'Apple M1 Max et sur\n    un c\u0153ur de Ryzen 9 7950X3D. Une partie \u00e0 la fois, l'\u00e9cart est indiscernable. Avec plusieurs\n    parties simultan\u00e9es, le PC va plus profond d'un tiers de demi-coup \u00e0 temps \u00e9gal et gagne 30 \u00e0 40\n    points : +39 en affrontement direct sur 410 parties. Pour comparer des machines, il faut donc\n    pr\u00e9ciser la charge sous laquelle on les compare. Et un moteur install\u00e9 sur un Mac peut \u00eatre\n    calibr\u00e9 dans un tournoi organis\u00e9 sur un PC, \u00e0 travers le r\u00e9seau, sur des centaines de parties,\n    avec une seule vraie d\u00e9connexion.\n  <\/div>\n\n  <p class=\"sig\">chess.lumn.eu &middot; laboratoire de calibration &middot; mise \u00e0 jour du 28 septembre 2026<\/p>\n\n<\/article>\n\n\n<script>\n(function(){\n  \/\/ Scripts embarques en base64 : la page se suffit a elle-meme.\n  var FICHIERS = {\n    \"dl-srv\": [\"uci_serveur.py\", \"IyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIiIiCnVjaV9zZXJ2ZXVyLnB5ICAtLSAgYSBsYW5jZXIgc3VyIGxhIG1hY2hpbmUgcXVpIEhFQkVSR0UgbGUgbW90ZXVyIChpY2kgbGUgTWFjKS4KCkVjb3V0ZSBzdXIgbGUgcmVzZWF1IGxvY2FsLiBBIGNoYXF1ZSBjb25uZXhpb24sIGxpdCBzdXIgbGEgcHJlbWllcmUgbGlnbmUgbGUKTk9NIGR1IG1vdGV1ciBkZW1hbmRlLCBsYW5jZSBjZSBtb3RldXIsIHB1aXMgcmVsYWllIGxlcyBsaWduZXMgVUNJIGRhbnMgbGVzIGRldXgKc2VucyBqdXNxdSdhIGxhIGZpbiBkZSBsYSBwYXJ0aWUuIFBsdXNpZXVycyBwYXJ0aWVzIHNpbXVsdGFuZWVzIHNvbnQgcG9zc2libGVzIDoKY2hhcXVlIGNvbm5leGlvbiBhIHNvbiBwcm9wcmUgcHJvY2Vzc3VzIG1vdGV1ci4KClNFQ1VSSVRFIDogbGUgc2VydmV1ciBuJ2V4ZWN1dGUgUVVFIGxlcyBtb3RldXJzIGRlIGxhIHRhYmxlIE1PVEVVUlMgY2ktZGVzc291cy4KQXVjdW5lIGNvbW1hbmRlIHJlY3VlIGR1IHJlc2VhdSBuJ2VzdCBleGVjdXRlZSB0ZWxsZSBxdWVsbGUuCgpMYW5jZW1lbnQgOiAgIHB5dGhvbjMgdWNpX3NlcnZldXIucHkgICAgICAgICAgICAocG9ydCA1NTU1IHBhciBkZWZhdXQpCiAgICAgICAgICAgICAgcHl0aG9uMyB1Y2lfc2VydmV1ci5weSAtLXBvcnQgNjAwMApBcnJldCAgICAgOiAgIEN0cmwrQwoiIiIKaW1wb3J0IHNvY2tldCwgc3VicHJvY2VzcywgdGhyZWFkaW5nLCBhcmdwYXJzZSwgc3lzLCBvcywgdGltZQoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQSBBREFQVEVSCiMgbm9tIGFubm9uY2UgcGFyIGxlIHJlbGFpcyAgLT4gIChjb21tYW5kZSwgZG9zc2llciBkZSB0cmF2YWlsKQpNT1RFVVJTID0gewogICAgIyBFWEVNUExFIC0tIHJlbXBsYWNleiBwYXIgbGUgbm9tIGRlIHZvdHJlIGJpbmFpcmUgZXQgc29uIGRvc3NpZXIKICAgICJmcnVpdDIxIjogKFsiLi9GcnVpdC0yLjFfTWFjX0FwcGxlX1NpbGljb24iXSwKICAgICAgICAgICAgICAgIG9zLnBhdGguZXhwYW5kdXNlcigifi9DaGVzcy9GcnVpdCIpKSwKICAgICMgInN0b2NrZmlzaCI6IChbIi9vcHQvaG9tZWJyZXcvYmluL3N0b2NrZmlzaCJdLCBvcy5wYXRoLmV4cGFuZHVzZXIoIn4iKSksCn0KIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCmRlZiBqb3VybmFsKCphKToKICAgIHByaW50KHRpbWUuc3RyZnRpbWUoIiVIOiVNOiVTIiksICphLCBmbHVzaD1UcnVlKQoKREVCVUcgPSBGYWxzZQpTVUlWSV9BQ1RJRiA9IFRydWUKCmRlZiBwb21wZShzcmNfbGlyZSwgZHN0X2VjcmlyZSwgZmluLCBzZW5zPSIiKToKICAgICIiIlJlY29waWUgZGVzIG9jdGV0cyBkZSBzcmMgdmVycyBkc3QganVzcXUnYSBlcHVpc2VtZW50IG91IGZpbi4iIiIKICAgIHRyeToKICAgICAgICB3aGlsZSBub3QgZmluLmlzX3NldCgpOgogICAgICAgICAgICBkYXRhID0gc3JjX2xpcmUoNDA5NikKICAgICAgICAgICAgaWYgREVCVUc6IGpvdXJuYWwoZiIgIHtzZW5zfSA6IHtkYXRhIXJ9Ils6MTYwXSkKICAgICAgICAgICAgaWYgbm90IGRhdGE6CiAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICBkc3RfZWNyaXJlKGRhdGEpCiAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CiAgICAgICAgaWYgREVCVUc6IGpvdXJuYWwoZiIgIHtzZW5zfSA6IEVYQ0VQVElPTiB7ZSFyfSIpCiAgICBmaW5hbGx5OgogICAgICAgIGZpbi5zZXQoKQoKCmNsYXNzIFN1aXZpOgogICAgIiIiTGl0IGF1IHBhc3NhZ2UgbGUgZGlhbG9ndWUgVUNJIGV0IGFmZmljaGUgdW5lIGxpZ25lIHBhciBjb3VwIGpvdWUuCiAgICBOJ2FsdGVyZSBSSUVOIGRlIGNlIHF1aSB0cmFuc2l0ZSA6IGlsIG9ic2VydmUgc2V1bGVtZW50LiIiIgogICAgZGVmIF9faW5pdF9fKHNlbGYsIG5vbSk6CiAgICAgICAgc2VsZi5ub20gPSBub20KICAgICAgICBzZWxmLnBhcnRpZSA9IDAKICAgICAgICBzZWxmLmNvdXAgPSAwCiAgICAgICAgc2VsZi50X2dvID0gTm9uZQogICAgICAgIHNlbGYudGFtcG9uX2luID0gYiIiCiAgICAgICAgc2VsZi50YW1wb25fb3V0ID0gYiIiCiAgICAgICAgc2VsZi5yZXNldF9yZWNoZXJjaGUoKQogICAgZGVmIHJlc2V0X3JlY2hlcmNoZShzZWxmKToKICAgICAgICBzZWxmLnByb2YgPSBOb25lOyBzZWxmLnNjb3JlID0gTm9uZTsgc2VsZi5ucHMgPSBOb25lCiAgICAgICAgc2VsZi5ub2V1ZHMgPSBOb25lOyBzZWxmLnRtcyA9IE5vbmUKICAgIGRlZiBfbGlnbmVzKHNlbGYsIGF0dHIsIGRhdGEpOgogICAgICAgIGJ1ZiA9IGdldGF0dHIoc2VsZiwgYXR0cikgKyBkYXRhCiAgICAgICAgKmNvbXBsZXRlcywgcmVzdGUgPSBidWYuc3BsaXQoYiJcbiIpCiAgICAgICAgc2V0YXR0cihzZWxmLCBhdHRyLCByZXN0ZSkKICAgICAgICByZXR1cm4gW2wuZGVjb2RlKCJ1dGYtOCIsICJyZXBsYWNlIikuc3RyaXAoKSBmb3IgbCBpbiBjb21wbGV0ZXNdCiAgICBkZWYgdmVyc19tb3RldXIoc2VsZiwgZGF0YSk6CiAgICAgICAgZm9yIGwgaW4gc2VsZi5fbGlnbmVzKCJ0YW1wb25faW4iLCBkYXRhKToKICAgICAgICAgICAgaWYgbCA9PSAidWNpbmV3Z2FtZSI6CiAgICAgICAgICAgICAgICBzZWxmLnBhcnRpZSArPSAxOyBzZWxmLmNvdXAgPSAwCiAgICAgICAgICAgICAgICBqb3VybmFsKCItIiAqIDcyKQogICAgICAgICAgICAgICAgam91cm5hbChmIntzZWxmLm5vbX0gLS0gcGFydGllIHtzZWxmLnBhcnRpZX0iKQogICAgICAgICAgICBlbGlmIGwuc3RhcnRzd2l0aCgicG9zaXRpb24iKToKICAgICAgICAgICAgICAgICMgbnVtZXJvIFJFRUwgZHUgY291cCA6IGQnYXByZXMgbGEgbGlzdGUgZGVzIGNvdXBzIGRlamEgam91ZXMKICAgICAgICAgICAgICAgICMgKGxpdnJlIGNvbXByaXMpLCBldCBsZSB0cmFpdCBzaSBsYSBwb3NpdGlvbiBwYXJ0IGQndW4gRkVOCiAgICAgICAgICAgICAgICB0ID0gbC5zcGxpdCgpCiAgICAgICAgICAgICAgICBuID0gbGVuKHQpIC0gdC5pbmRleCgibW92ZXMiKSAtIDEgaWYgIm1vdmVzIiBpbiB0IGVsc2UgMAogICAgICAgICAgICAgICAgYmFzZSwgdHJhaXRfbm9pciA9IDEsIEZhbHNlCiAgICAgICAgICAgICAgICBpZiAiZmVuIiBpbiB0OgogICAgICAgICAgICAgICAgICAgIGkgPSB0LmluZGV4KCJmZW4iKQogICAgICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgICAgdHJhaXRfbm9pciA9IHRbaSArIDJdID09ICJiIjsgYmFzZSA9IGludCh0W2kgKyA2XSkKICAgICAgICAgICAgICAgICAgICBleGNlcHQgKEluZGV4RXJyb3IsIFZhbHVlRXJyb3IpOgogICAgICAgICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICAgICBkZW1pID0gbiArICgxIGlmIHRyYWl0X25vaXIgZWxzZSAwKQogICAgICAgICAgICAgICAgc2VsZi5jb3VwID0gYmFzZSArIGRlbWkgLy8gMgogICAgICAgICAgICBlbGlmIGwuc3RhcnRzd2l0aCgiZ28iKToKICAgICAgICAgICAgICAgIHNlbGYudF9nbyA9IHRpbWUudGltZSgpOyBzZWxmLnJlc2V0X3JlY2hlcmNoZSgpCiAgICBkZWYgZGVwdWlzX21vdGV1cihzZWxmLCBkYXRhKToKICAgICAgICBmb3IgbCBpbiBzZWxmLl9saWduZXMoInRhbXBvbl9vdXQiLCBkYXRhKToKICAgICAgICAgICAgdCA9IGwuc3BsaXQoKQogICAgICAgICAgICBpZiBub3QgdDogY29udGludWUKICAgICAgICAgICAgaWYgdFswXSA9PSAiaW5mbyI6CiAgICAgICAgICAgICAgICBmb3IgaSwgbW90IGluIGVudW1lcmF0ZSh0WzotMV0pOgogICAgICAgICAgICAgICAgICAgIHYgPSB0W2kgKyAxXQogICAgICAgICAgICAgICAgICAgIGlmIG1vdCA9PSAiZGVwdGgiIGFuZCB2LmlzZGlnaXQoKTogc2VsZi5wcm9mID0gaW50KHYpCiAgICAgICAgICAgICAgICAgICAgZWxpZiBtb3QgPT0gIm5wcyIgYW5kIHYuaXNkaWdpdCgpOiBzZWxmLm5wcyA9IGludCh2KQogICAgICAgICAgICAgICAgICAgIGVsaWYgbW90ID09ICJub2RlcyIgYW5kIHYuaXNkaWdpdCgpOiBzZWxmLm5vZXVkcyA9IGludCh2KQogICAgICAgICAgICAgICAgICAgIGVsaWYgbW90ID09ICJ0aW1lIiBhbmQgdi5pc2RpZ2l0KCk6IHNlbGYudG1zID0gaW50KHYpCiAgICAgICAgICAgICAgICAgICAgZWxpZiBtb3QgPT0gInNjb3JlIiBhbmQgaSArIDIgPCBsZW4odCk6CiAgICAgICAgICAgICAgICAgICAgICAgIHR5cCwgdmFsID0gdFtpICsgMV0sIHRbaSArIDJdCiAgICAgICAgICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBpbnQodmFsKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zY29yZSA9IChmIntuLzEwMDorLjJmfSIucmVwbGFjZSgiLiIsICIsIikgaWYgdHlwID09ICJjcCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSAoZiJtYXQgZW4ge259IiBpZiBuID4gMCBlbHNlIGYibWF0IGNvbnRyZSBlbiB7LW59IikpCiAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICBlbGlmIHRbMF0gPT0gImJlc3Rtb3ZlIiBhbmQgbGVuKHQpID4gMToKICAgICAgICAgICAgICAgIGR1cmVlID0gKHRpbWUudGltZSgpIC0gc2VsZi50X2dvKSBpZiBzZWxmLnRfZ28gZWxzZSBOb25lCiAgICAgICAgICAgICAgICBucHMgPSBzZWxmLm5wcwogICAgICAgICAgICAgICAgaWYgbnBzIGlzIE5vbmUgYW5kIHNlbGYubm9ldWRzIGFuZCBzZWxmLnRtczoKICAgICAgICAgICAgICAgICAgICBucHMgPSBzZWxmLm5vZXVkcyAqIDEwMDAgLy8gbWF4KHNlbGYudG1zLCAxKQogICAgICAgICAgICAgICAgY2hhbXBzID0gW2YicGFydGllIHtzZWxmLnBhcnRpZX0iIGlmIHNlbGYucGFydGllIGVsc2UgIiIsIGYiY291cCB7c2VsZi5jb3VwOj4zfSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgZiJGcnVpdCBqb3VlIHt0WzFdOjw2fSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgZiJwcm9mIHtzZWxmLnByb2Y6PjJ9IiBpZiBzZWxmLnByb2YgaXMgbm90IE5vbmUgZWxzZSAicHJvZiAgPyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgZiJ7c2VsZi5zY29yZTo+N30iIGlmIHNlbGYuc2NvcmUgZWxzZSAiICAgICAgPyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgZiJ7bnBzLzFlNjo1LjJmfSBNIG4vcyIucmVwbGFjZSgiLiIsICIsIikgaWYgbnBzIGVsc2UgIiAgICA\/IG4vcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgZiJ7ZHVyZWU6NS4xZn0gcyIucmVwbGFjZSgiLiIsICIsIikgaWYgZHVyZWUgaXMgbm90IE5vbmUgZWxzZSAiIl0KICAgICAgICAgICAgICAgIGpvdXJuYWwoIiAgIi5qb2luKGMgZm9yIGMgaW4gY2hhbXBzIGlmIGMpKQoKZGVmIHNlcnZpcihjb25uLCBhZHIpOgogICAgZmluID0gdGhyZWFkaW5nLkV2ZW50KCkKICAgIHByb2MgPSBOb25lCiAgICB0cnk6CiAgICAgICAgY29ubi5zZXRzb2Nrb3B0KHNvY2tldC5JUFBST1RPX1RDUCwgc29ja2V0LlRDUF9OT0RFTEFZLCAxKQogICAgICAgICMgcHJlbWllcmUgbGlnbmUgPSBub20gZHUgbW90ZXVyCiAgICAgICAgdGFtcG9uID0gYiIiCiAgICAgICAgd2hpbGUgYiJcbiIgbm90IGluIHRhbXBvbjoKICAgICAgICAgICAgbW9yY2VhdSA9IGNvbm4ucmVjdigyNTYpCiAgICAgICAgICAgIGlmIG5vdCBtb3JjZWF1OgogICAgICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgICAgIHRhbXBvbiArPSBtb3JjZWF1CiAgICAgICAgICAgIGlmIGxlbih0YW1wb24pID4gMjU2OgogICAgICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgbGlnbmUsIHJlc3RlID0gdGFtcG9uLnNwbGl0KGIiXG4iLCAxKQogICAgICAgIG5vbSA9IGxpZ25lLmRlY29kZSgidXRmLTgiLCAicmVwbGFjZSIpLnN0cmlwKCkKICAgICAgICBpZiBub20gbm90IGluIE1PVEVVUlM6CiAgICAgICAgICAgIGpvdXJuYWwoZiJ7YWRyWzBdfSBkZW1hbmRlIHVuIG1vdGV1ciBpbmNvbm51IDoge25vbSFyfSAtLSByZWZ1c2UiKQogICAgICAgICAgICBjb25uLnNlbmRhbGwoZiJpbmZvIHN0cmluZyBtb3RldXIgaW5jb25udSBzdXIgbGUgc2VydmV1ciA6IHtub219XG4iLmVuY29kZSgpKQogICAgICAgICAgICByZXR1cm4KICAgICAgICBjbWQsIGRvc3NpZXIgPSBNT1RFVVJTW25vbV0KICAgICAgICBqb3VybmFsKGYie2FkclswXX0gLT4gbGFuY2VtZW50IGRlIHtub219IikKICAgICAgICBwcm9jID0gc3VicHJvY2Vzcy5Qb3BlbihjbWQsIGN3ZD1kb3NzaWVyLCBzdGRpbj1zdWJwcm9jZXNzLlBJUEUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuREVWTlVMTCwgYnVmc2l6ZT0wKQogICAgICAgIGlmIERFQlVHOiBqb3VybmFsKGYiICBwb2lnbmVlIGRlIG1haW4gOiBub209e25vbSFyfSwgcmVzdGU9e3Jlc3RlIXJ9IikKICAgICAgICBpZiByZXN0ZToKICAgICAgICAgICAgcHJvYy5zdGRpbi53cml0ZShyZXN0ZSk7IHByb2Muc3RkaW4uZmx1c2goKQoKICAgICAgICBzdWl2aSA9IFN1aXZpKG5vbSkgaWYgU1VJVklfQUNUSUYgZWxzZSBOb25lCiAgICAgICAgaWYgc3VpdmkgYW5kIHJlc3RlOiBzdWl2aS52ZXJzX21vdGV1cihyZXN0ZSkKICAgICAgICBkZWYgdmVyc19tb3RldXIobik6CiAgICAgICAgICAgIHJldHVybiBjb25uLnJlY3YobikKICAgICAgICBkZWYgZWNyaXJlX21vdGV1cihkKToKICAgICAgICAgICAgaWYgc3Vpdmk6CiAgICAgICAgICAgICAgICB0cnk6IHN1aXZpLnZlcnNfbW90ZXVyKGQpCiAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOiBwYXNzCiAgICAgICAgICAgIHByb2Muc3RkaW4ud3JpdGUoZCk7IHByb2Muc3RkaW4uZmx1c2goKQogICAgICAgIGRlZiBlbnZveWVyX3Jlc2VhdShkKToKICAgICAgICAgICAgaWYgc3Vpdmk6CiAgICAgICAgICAgICAgICB0cnk6IHN1aXZpLmRlcHVpc19tb3RldXIoZCkKICAgICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246IHBhc3MKICAgICAgICAgICAgY29ubi5zZW5kYWxsKGQpCiAgICAgICAgZGVmIGRlcHVpc19tb3RldXIobik6CiAgICAgICAgICAgIHJldHVybiBwcm9jLnN0ZG91dC5yZWFkMShuKSBpZiBoYXNhdHRyKHByb2Muc3Rkb3V0LCAicmVhZDEiKSBlbHNlIG9zLnJlYWQocHJvYy5zdGRvdXQuZmlsZW5vKCksIG4pCgogICAgICAgIHQxID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9cG9tcGUsIGFyZ3M9KHZlcnNfbW90ZXVyLCBlY3JpcmVfbW90ZXVyLCBmaW4sICJyZXNlYXUgLT4gbW90ZXVyIiksIGRhZW1vbj1UcnVlKQogICAgICAgIHQyID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9cG9tcGUsIGFyZ3M9KGRlcHVpc19tb3RldXIsIGVudm95ZXJfcmVzZWF1LCBmaW4sICJtb3RldXIgLT4gcmVzZWF1IiksIGRhZW1vbj1UcnVlKQogICAgICAgIHQxLnN0YXJ0KCk7IHQyLnN0YXJ0KCkKICAgICAgICBmaW4ud2FpdCgpCiAgICBmaW5hbGx5OgogICAgICAgIGlmIHByb2MgYW5kIHByb2MucG9sbCgpIGlzIE5vbmU6CiAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgIHByb2Muc3RkaW4ud3JpdGUoYiJxdWl0XG4iKTsgcHJvYy5zdGRpbi5mbHVzaCgpCiAgICAgICAgICAgICAgICBwcm9jLndhaXQodGltZW91dD0zKQogICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgICAgICAgICAgcHJvYy5raWxsKCkKICAgICAgICB0cnk6IGNvbm4uY2xvc2UoKQogICAgICAgIGV4Y2VwdCBFeGNlcHRpb246IHBhc3MKICAgICAgICBqb3VybmFsKGYie2FkclswXX0gLT4gY29ubmV4aW9uIGZlcm1lZSIpCgpkZWYgbWFpbigpOgogICAgYXAgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCiAgICBhcC5hZGRfYXJndW1lbnQoIi0tcG9ydCIsIHR5cGU9aW50LCBkZWZhdWx0PTU1NTUpCiAgICBhcC5hZGRfYXJndW1lbnQoIi0taG90ZSIsIGRlZmF1bHQ9IjAuMC4wLjAiKQogICAgYXAuYWRkX2FyZ3VtZW50KCItLWRlYnVnIiwgYWN0aW9uPSJzdG9yZV90cnVlIikKICAgIGFwLmFkZF9hcmd1bWVudCgiLS1tdWV0IiwgYWN0aW9uPSJzdG9yZV90cnVlIiwgaGVscD0ibidhZmZpY2hlIHBhcyBsZSBzdWl2aSBjb3VwIHBhciBjb3VwIikKICAgIGEgPSBhcC5wYXJzZV9hcmdzKCkKICAgIGdsb2JhbCBERUJVRywgU1VJVklfQUNUSUYKICAgIERFQlVHID0gYS5kZWJ1ZwogICAgU1VJVklfQUNUSUYgPSBub3QgYS5tdWV0CiAgICBmb3Igbm9tLCAoY21kLCBkb3NzaWVyKSBpbiBNT1RFVVJTLml0ZW1zKCk6CiAgICAgICAgb2sgPSBvcy5wYXRoLmlzZGlyKGRvc3NpZXIpCiAgICAgICAgam91cm5hbChmIm1vdGV1ciAne25vbX0nIDogeycgJy5qb2luKGNtZCl9ICBkYW5zIHtkb3NzaWVyfSAgeydPSycgaWYgb2sgZWxzZSAnKioqIERPU1NJRVIgSU5UUk9VVkFCTEUgKioqJ30iKQogICAgcyA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkKICAgIHMuc2V0c29ja29wdChzb2NrZXQuU09MX1NPQ0tFVCwgc29ja2V0LlNPX1JFVVNFQUREUiwgMSkKICAgIHMuYmluZCgoYS5ob3RlLCBhLnBvcnQpKTsgcy5saXN0ZW4oMTYpCiAgICBqb3VybmFsKGYic2VydmV1ciBVQ0kgZW4gZWNvdXRlIHN1ciBsZSBwb3J0IHthLnBvcnR9IC0tIEN0cmwrQyBwb3VyIGFycmV0ZXIiKQogICAgdHJ5OgogICAgICAgIHdoaWxlIFRydWU6CiAgICAgICAgICAgIGNvbm4sIGFkciA9IHMuYWNjZXB0KCkKICAgICAgICAgICAgdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9c2VydmlyLCBhcmdzPShjb25uLCBhZHIpLCBkYWVtb249VHJ1ZSkuc3RhcnQoKQogICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgogICAgICAgIGpvdXJuYWwoImFycmV0IikKCmlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICBtYWluKCkK\"],\n    \"dl-rel\": [\"uci_relais.py\",  \"IyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KIiIiCnVjaV9yZWxhaXMucHkgIC0tICBhIGxhbmNlciBzdXIgbGEgbWFjaGluZSBxdWkgZmFpdCB0b3VybmVyIENVVEVDSEVTUyAoaWNpIGxlIFBDKS4KCkN1dGVjaGVzcyBsZSBsYW5jZSBjb21tZSBzJ2lsIGV0YWl0IGxlIG1vdGV1ci4gSWwgc2UgY29ubmVjdGUgYXUgc2VydmV1ciBkaXN0YW50LAphbm5vbmNlIGxlIG5vbSBkdSBtb3RldXIgdm91bHUsIHB1aXMgZmFpdCBwYXNzZXIgbGVzIGxpZ25lcyBVQ0kgZGFucyBsZXMgZGV1eCBzZW5zLgpQb3VyIGN1dGVjaGVzcywgYydlc3QgdW4gbW90ZXVyIFVDSSBsb2NhbCBjb21tZSB1biBhdXRyZS4KClVzYWdlIDogICBweSAtMyB1Y2lfcmVsYWlzLnB5IDxhZHJlc3NlLWR1LXNlcnZldXI+IDxwb3J0PiA8bm9tLWR1LW1vdGV1cj4KRXhlbXBsZSA6IHB5IC0zIHVjaV9yZWxhaXMucHkgMTkyLjE2OC4xLjIwIDU1NTUgZnJ1aXQyMQoiIiIKaW1wb3J0IHNvY2tldCwgc3lzLCB0aHJlYWRpbmcsIG9zLCB0aW1lCkRFQlVHID0gb3MuZW52aXJvbi5nZXQoIlVDSV9ERUJVRyIsICIwIikgPT0gIjEiCmRlZiB0cmFjZSgqYSk6CiAgICBpZiBERUJVRzoKICAgICAgICBzeXMuc3RkZXJyLndyaXRlKHRpbWUuc3RyZnRpbWUoIiVIOiVNOiVTIikgKyAiIFtyZWxhaXNdICIgKyAiICIuam9pbihzdHIoeCkgZm9yIHggaW4gYSkgKyAiXG4iKQogICAgICAgIHN5cy5zdGRlcnIuZmx1c2goKQoKZGVmIG1haW4oKToKICAgIGlmIGxlbihzeXMuYXJndikgIT0gNDoKICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJ1c2FnZSA6IHVjaV9yZWxhaXMucHkgPGhvdGU+IDxwb3J0PiA8bW90ZXVyPlxuIik7IHN5cy5leGl0KDIpCiAgICBob3RlLCBwb3J0LCBub20gPSBzeXMuYXJndlsxXSwgaW50KHN5cy5hcmd2WzJdKSwgc3lzLmFyZ3ZbM10KICAgIHRyeToKICAgICAgICBzID0gc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uKChob3RlLCBwb3J0KSwgdGltZW91dD0xMCkKICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKICAgICAgICAjIG9uIHJlcG9uZCBxdWFuZCBtZW1lIGVuIFVDSSwgcG91ciBxdWUgY3V0ZWNoZXNzIGFmZmljaGUgbGEgcmFpc29uCiAgICAgICAgc3lzLnN0ZG91dC53cml0ZShmImluZm8gc3RyaW5nIHJlbGFpcyA6IGNvbm5leGlvbiBpbXBvc3NpYmxlIGEge2hvdGV9Ontwb3J0fSAoe2V9KVxuIikKICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCk7IHN5cy5leGl0KDEpCiAgICBzLnNldHRpbWVvdXQoTm9uZSkKICAgIHMuc2V0c29ja29wdChzb2NrZXQuSVBQUk9UT19UQ1AsIHNvY2tldC5UQ1BfTk9ERUxBWSwgMSkKICAgIHMuc2VuZGFsbCgobm9tICsgIlxuIikuZW5jb2RlKCJ1dGYtOCIpKQogICAgdHJhY2UoZiJjb25uZWN0ZSBhIHtob3RlfTp7cG9ydH0sIG1vdGV1ciBkZW1hbmRlIDoge25vbX0iKQoKICAgIGVudHJlZSA9IHN5cy5zdGRpbi5idWZmZXIKICAgIHNvcnRpZSA9IHN5cy5zdGRvdXQuYnVmZmVyCiAgICBmaW4gPSB0aHJlYWRpbmcuRXZlbnQoKSAgICAgICAgICAjIGxlIHNlcnZldXIgYSBmZXJtZSA6IHBsdXMgcmllbiBhIHJlY2V2b2lyCiAgICBmaW5fZW50cmVlID0gdGhyZWFkaW5nLkV2ZW50KCkgICAjIGN1dGVjaGVzcyBhIGVudm95ZSBxdWl0IG91IGZlcm1lIGwnZW50cmVlCgogICAgZGVmIHZlcnNfc2VydmV1cigpOgogICAgICAgIHRyeToKICAgICAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgICAgIGxpZ25lID0gZW50cmVlLnJlYWRsaW5lKCkKICAgICAgICAgICAgICAgIHRyYWNlKGYibHUgc3VyIGwnZW50cmVlIDoge2xpZ25lIXJ9IikKICAgICAgICAgICAgICAgIGlmIG5vdCBsaWduZToKICAgICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgICAgIyBGaW4gZGUgbGlnbmUgbm9ybWFsaXNlZSBlbiBMRiBzZXVsLiBTb3VzIFdpbmRvd3MsIGxlcyBsaWduZXMKICAgICAgICAgICAgICAgICMgcGV1dmVudCBhcnJpdmVyIGVuIENSK0xGIDsgdW4gbW90ZXVyIFVuaXggcmVjZXZyYWl0IGFsb3JzCiAgICAgICAgICAgICAgICAjICJ1Y2lcciIgZXQgbmUgcmVjb25uYWl0cmFpdCBwYXMgbGEgY29tbWFuZGUgKEZydWl0IG5lIHJldGlyZQogICAgICAgICAgICAgICAgIyBxdWUgbGUgTEYpLiBDb25zdGF0ZSBsZSAyMS8wOSA6IGJhbm5pZXJlIHJlY3VlLCBhdWN1biB1Y2lvay4KICAgICAgICAgICAgICAgICMgKyBibGFuY3MgZGUgZmluIHJldGlyZXMgOiB1biBibG9jIGNtZCBlbnZveWUgZGFucyB1biB0dXlhdQogICAgICAgICAgICAgICAgIyBlc3QgcmVlY3JpdCBhdmVjIGRlcyBlc3BhY2VzIGF1dG91ciBkZXMgIiYiLCBkJ291ICJ1Y2kgIiBxdWUKICAgICAgICAgICAgICAgICMgRnJ1aXQgbmUgcmVjb25uYWl0IHBhcy4gQXVjdW5lIGNvbW1hbmRlIFVDSSBuZSBkZXBlbmQgZCd1bgogICAgICAgICAgICAgICAgIyBibGFuYyBmaW5hbC4KICAgICAgICAgICAgICAgIGxpZ25lID0gbGlnbmUucnN0cmlwKCkgKyBiIlxuIgogICAgICAgICAgICAgICAgcy5zZW5kYWxsKGxpZ25lKQogICAgICAgICAgICAgICAgdHJhY2UoZiJlbnZveWUgYXUgc2VydmV1ciA6IHtsaWduZSFyfSIpCiAgICAgICAgICAgICAgICBpZiBsaWduZS5zdHJpcCgpID09IGIicXVpdCI6CiAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgICAgICBwYXNzCiAgICAgICAgZmluYWxseToKICAgICAgICAgICAgZmluX2VudHJlZS5zZXQoKQoKICAgIGRlZiBkZXB1aXNfc2VydmV1cigpOgogICAgICAgIHRyeToKICAgICAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgICAgIGRhdGEgPSBzLnJlY3YoNDA5NikKICAgICAgICAgICAgICAgIHRyYWNlKGYicmVjdSBkdSBzZXJ2ZXVyIDoge2xlbihkYXRhKX0gb2N0ZXRzIikKICAgICAgICAgICAgICAgIGlmIG5vdCBkYXRhOgogICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICAgICBzb3J0aWUud3JpdGUoZGF0YSk7IHNvcnRpZS5mbHVzaCgpCiAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKICAgICAgICAgICAgcGFzcwogICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgIGZpbi5zZXQoKQoKICAgIHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PXZlcnNfc2VydmV1ciwgZGFlbW9uPVRydWUpLnN0YXJ0KCkKICAgIHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PWRlcHVpc19zZXJ2ZXVyLCBkYWVtb249VHJ1ZSkuc3RhcnQoKQogICAgIyBBcHJlcyAicXVpdCIsIG5lIFBBUyBmZXJtZXIgdG91dCBkZSBzdWl0ZSA6IGxlcyBkZXJuaWVyZXMgcmVwb25zZXMgZHUKICAgICMgbW90ZXVyIHNvbnQgcGV1dC1ldHJlIGVuY29yZSBlbiByb3V0ZSBzdXIgbGUgcmVzZWF1LiBPbiBhdHRlbmQgcXVlIGxlCiAgICAjIHNlcnZldXIgZmVybWUgbGEgY29ubmV4aW9uIChsZSBtb3RldXIgZXN0IHNvcnRpKSwgMyBzIGF1IHBsdXMuCiAgICAjIENvbnN0YXRlIGxlIDIxLzA5IDogInVjaSIgZXQgInF1aXQiIGxpdnJlcyBlbnNlbWJsZSBwYXIgdW4gdHV5YXUgY21kLAogICAgIyBsZSByZWxhaXMgc29ydGFpdCBhdmFudCBtZW1lIGwnYXJyaXZlZSBkZSBsYSBiYW5uaWVyZS4KICAgIHdoaWxlIG5vdCBmaW4uaXNfc2V0KCk6CiAgICAgICAgaWYgZmluX2VudHJlZS5pc19zZXQoKToKICAgICAgICAgICAgdHJhY2UoImVudHJlZSB0ZXJtaW5lZSwgdmlkYWdlIGR1IHJlc2VhdSAoMyBzIG1heCkiKQogICAgICAgICAgICBmaW4ud2FpdCh0aW1lb3V0PTMuMCkKICAgICAgICAgICAgYnJlYWsKICAgICAgICBmaW4ud2FpdCh0aW1lb3V0PTAuMSkKICAgIHRyeTogcy5jbG9zZSgpCiAgICBleGNlcHQgRXhjZXB0aW9uOiBwYXNzCiAgICAjIFNvcnRpZSBJTU1FRElBVEUgOiB1biB0aHJlYWQgcGV1dCBlbmNvcmUgZXRyZSBibG9xdWUgc3VyIGxhIGxlY3R1cmUgZGUKICAgICMgbCdlbnRyZWUgc3RhbmRhcmQuIFVuZSBmaW4gbm9ybWFsZSBkZSBsJ2ludGVycHJldGV1ciB0ZW50ZXJhaXQgYWxvcnMgZGUKICAgICMgZmVybWVyIGNlIGZsdXggdmVycm91aWxsZSBldCBhdm9ydGVyYWl0ICgiY291bGQgbm90IGFjcXVpcmUgbG9jayIpIC0tCiAgICAjIGN1dGVjaGVzcyB2ZXJyYWl0IHVuIHBsYW50YWdlIGF1IGxpZXUgZCd1bmUgZmluIHByb3ByZS4KICAgIHRyeTogc29ydGllLmZsdXNoKCkKICAgIGV4Y2VwdCBFeGNlcHRpb246IHBhc3MKICAgIG9zLl9leGl0KDApCgppZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgbWFpbigpCg==\"]\n  };\n  function telecharger(nom, b64) {\n    var bin = atob(b64), n = bin.length, u8 = new Uint8Array(n);\n    for (var i = 0; i < n; i++) u8[i] = bin.charCodeAt(i);\n    var blob = new Blob([u8], {type: \"text\/x-python\"});\n    var a = document.createElement(\"a\");\n    a.href = URL.createObjectURL(blob); a.download = nom;\n    document.body.appendChild(a); a.click(); document.body.removeChild(a);\n    setTimeout(function(){ URL.revokeObjectURL(a.href); }, 1000);\n  }\n  Object.keys(FICHIERS).forEach(function(id){\n    var b = document.getElementById(id);\n    if (b) b.addEventListener(\"click\", function(){ telecharger(FICHIERS[id][0], FICHIERS[id][1]); });\n  });\n})();\n<\/script>\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Laboratoire &middot; exp\u00e9rience Un m\u00eame Fruit, deux machines Fruit&nbsp;2.1, compil\u00e9 \u00e0 partir du m\u00eame code source pour Windows et pour Mac, affronte les m\u00eames adversaires dans les m\u00eames conditions &mdash; une fois sur un PC, une fois sur un Mac \u00e0 puce Apple &mdash;, puis se mesure \u00e0 lui-m\u00eame, Mac contre PC. Ce que la&hellip;&nbsp;<a href=\"https:\/\/www.chess.lumn.eu\/wordpress\/2026\/09\/21\/fruit-sur-mac-versus-fruit-sur-pc\/\" class=\"\" rel=\"bookmark\">Read More &raquo;<span class=\"screen-reader-text\">Fruit sur MAC versus Fruit sur PC!<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":4144,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"neve_meta_sidebar":"","neve_meta_container":"","neve_meta_enable_content_width":"","neve_meta_content_width":0,"neve_meta_title_alignment":"","neve_meta_author_avatar":"","neve_post_elements_order":"","neve_meta_disable_header":"","neve_meta_disable_footer":"","neve_meta_disable_title":""},"categories":[70,34],"tags":[],"rttpg_featured_image_url":{"full":["https:\/\/www.chess.lumn.eu\/wordpress\/wp-content\/uploads\/2026\/09\/fruit-mac-contre-pc.jpg",1200,1000,false],"landscape":["https:\/\/www.chess.lumn.eu\/wordpress\/wp-content\/uploads\/2026\/09\/fruit-mac-contre-pc.jpg",1200,1000,false],"portraits":["https:\/\/www.chess.lumn.eu\/wordpress\/wp-content\/uploads\/2026\/09\/fruit-mac-contre-pc.jpg",1200,1000,false],"thumbnail":["https:\/\/www.chess.lumn.eu\/wordpress\/wp-content\/uploads\/2026\/09\/fruit-mac-contre-pc-150x150.jpg",150,150,true],"medium":["https:\/\/www.chess.lumn.eu\/wordpress\/wp-content\/uploads\/2026\/09\/fruit-mac-contre-pc-300x250.jpg",300,250,true],"large":["https:\/\/www.chess.lumn.eu\/wordpress\/wp-content\/uploads\/2026\/09\/fruit-mac-contre-pc-1024x853.jpg",1024,853,true],"1536x1536":["https:\/\/www.chess.lumn.eu\/wordpress\/wp-content\/uploads\/2026\/09\/fruit-mac-contre-pc.jpg",1200,1000,false],"2048x2048":["https:\/\/www.chess.lumn.eu\/wordpress\/wp-content\/uploads\/2026\/09\/fruit-mac-contre-pc.jpg",1200,1000,false],"neve-blog":["https:\/\/www.chess.lumn.eu\/wordpress\/wp-content\/uploads\/2026\/09\/fruit-mac-contre-pc-930x620.jpg",930,620,true]},"rttpg_author":{"display_name":"valterd","author_link":"https:\/\/www.chess.lumn.eu\/wordpress\/author\/valterd\/"},"rttpg_comment":0,"rttpg_category":"<a href=\"https:\/\/www.chess.lumn.eu\/wordpress\/category\/chess-engines\/\" rel=\"category tag\">Chess Engines<\/a> <a href=\"https:\/\/www.chess.lumn.eu\/wordpress\/category\/test\/\" rel=\"category tag\">Test<\/a>","rttpg_excerpt":"Laboratoire &middot; exp\u00e9rience Un m\u00eame Fruit, deux machines Fruit&nbsp;2.1, compil\u00e9 \u00e0 partir du m\u00eame code source pour Windows et pour Mac, affronte les m\u00eames adversaires dans les m\u00eames conditions &mdash; une fois sur un PC, une fois sur un Mac \u00e0 puce Apple &mdash;, puis se mesure \u00e0 lui-m\u00eame, Mac contre PC. Ce que la&hellip;&nbsp;Read&hellip;","_links":{"self":[{"href":"https:\/\/www.chess.lumn.eu\/wordpress\/wp-json\/wp\/v2\/posts\/4073"}],"collection":[{"href":"https:\/\/www.chess.lumn.eu\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.chess.lumn.eu\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.chess.lumn.eu\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.chess.lumn.eu\/wordpress\/wp-json\/wp\/v2\/comments?post=4073"}],"version-history":[{"count":14,"href":"https:\/\/www.chess.lumn.eu\/wordpress\/wp-json\/wp\/v2\/posts\/4073\/revisions"}],"predecessor-version":[{"id":4134,"href":"https:\/\/www.chess.lumn.eu\/wordpress\/wp-json\/wp\/v2\/posts\/4073\/revisions\/4134"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.chess.lumn.eu\/wordpress\/wp-json\/wp\/v2\/media\/4144"}],"wp:attachment":[{"href":"https:\/\/www.chess.lumn.eu\/wordpress\/wp-json\/wp\/v2\/media?parent=4073"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.chess.lumn.eu\/wordpress\/wp-json\/wp\/v2\/categories?post=4073"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.chess.lumn.eu\/wordpress\/wp-json\/wp\/v2\/tags?post=4073"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}