<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Mathieu Ledru</title>
    <description>The latest articles on DEV Community by Mathieu Ledru (@matyo91).</description>
    <link>https://dev.to/matyo91</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F182978%2F61c41098-10ce-4833-acf3-b00cc42f852c.jpeg</url>
      <title>DEV Community: Mathieu Ledru</title>
      <link>https://dev.to/matyo91</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/matyo91"/>
    <language>en</language>
    <item>
      <title>💫 Créateur de Hacker News - Il est possible de démontrer que les modèles d'IA peuvent dissimuler des capacités arbitraires</title>
      <dc:creator>Mathieu Ledru</dc:creator>
      <pubDate>Tue, 13 Oct 2026 14:03:42 +0000</pubDate>
      <link>https://dev.to/matyo91/createur-de-hacker-news-il-est-possible-de-demontrer-que-les-modeles-dia-peuvent-dissimuler-199m</link>
      <guid>https://dev.to/matyo91/createur-de-hacker-news-il-est-possible-de-demontrer-que-les-modeles-dia-peuvent-dissimuler-199m</guid>
      <description>&lt;h2&gt;
  
  
  À propos de cet article
&lt;/h2&gt;

&lt;p&gt;La capacité des modèles d'IA à dissimuler leurs fonctionnalités a des implications importantes pour le secteur. À mesure que cette technologie évolue, les considérations éthiques et les cadres réglementaires doivent s'adapter en conséquence.&lt;/p&gt;

&lt;p&gt;🚨 &lt;b&gt;Contenu premium.&lt;/b&gt;&lt;br&gt;⬆️ Passez à un abonnement supérieur pour accéder à l'analyse complète.&lt;br&gt;👉 Abonnez-vous ici : &lt;a href="https://www.bonzai.pro/matyo91/shop/48ov_2168/automation-avec-flow-en-php" rel="noopener noreferrer"&gt;&lt;/a&gt;&lt;a href="https://www.bonzai.pro/matyo91/shop/48ov_2168/automation-avec-flow-en-php" rel="noopener noreferrer"&gt;https://www.bonzai.pro/matyo91/shop/48ov_2168/automation-avec-flow-en-php&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>💫 GitHub Creator - envoyproxy: v1.39.4</title>
      <dc:creator>Mathieu Ledru</dc:creator>
      <pubDate>Tue, 13 Oct 2026 10:03:50 +0000</pubDate>
      <link>https://dev.to/matyo91/github-creator-envoyproxy-v1394-4i45</link>
      <guid>https://dev.to/matyo91/github-creator-envoyproxy-v1394-4i45</guid>
      <description>&lt;p&gt;EnvoyProxy a publié sa version v1.39.4, abordant plusieurs bogues critiques qui affectent les configurations de route sur des threads de travail. Ces corrections renforcent la stabilité et la fiabilité d'Envoy. Pour plus de détails techniques, consultez notre analyse approfondie.&lt;/p&gt;

&lt;p&gt;🚨 &lt;b&gt;Premium content.&lt;/b&gt;&lt;br&gt;⬆️ Upgrade to access full analysis.&lt;br&gt;👉 Subscribe here : &lt;a href="https://www.bonzai.pro/matyo91/shop/48ov_2168/automation-avec-flow-en-php" rel="noopener noreferrer"&gt;&lt;/a&gt;&lt;a href="https://www.bonzai.pro/matyo91/shop/48ov_2168/automation-avec-flow-en-php" rel="noopener noreferrer"&gt;https://www.bonzai.pro/matyo91/shop/48ov_2168/automation-avec-flow-en-php&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>🤖 Veille Darkwood - 2026-10-13</title>
      <dc:creator>Mathieu Ledru</dc:creator>
      <pubDate>Tue, 13 Oct 2026 05:03:07 +0000</pubDate>
      <link>https://dev.to/matyo91/veille-darkwood-2026-10-13-4d5l</link>
      <guid>https://dev.to/matyo91/veille-darkwood-2026-10-13-4d5l</guid>
      <description>&lt;h2&gt;
  
  
  Points saillants
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;De nouvelles stratégies d'intégration d'IA dans le développement web sont en cours.&lt;/li&gt;
&lt;li&gt;Les pipelines de production de récits assistés par IA gagnent en popularité.&lt;/li&gt;
&lt;li&gt;L'architecture technique de 2026 favorise la gouvernance des agents.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;🚨 &lt;b&gt;Premium content.&lt;/b&gt;&lt;br&gt;⬆️ Upgrade to access full analysis.&lt;br&gt;👉 Subscribe here : &lt;a href="https://www.bonzai.pro/matyo91/shop/48ov_2168/automation-avec-flow-en-php" rel="noopener noreferrer"&gt;&lt;/a&gt;&lt;a href="https://www.bonzai.pro/matyo91/shop/48ov_2168/automation-avec-flow-en-php" rel="noopener noreferrer"&gt;https://www.bonzai.pro/matyo91/shop/48ov_2168/automation-avec-flow-en-php&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>💫 Le créateur de Hacker News – 500 milliards de jetons plus tard : laisser des agents IA décompiler un jeu de tir à la première personne</title>
      <dc:creator>Mathieu Ledru</dc:creator>
      <pubDate>Mon, 12 Oct 2026 14:04:27 +0000</pubDate>
      <link>https://dev.to/matyo91/le-createur-de-hacker-news-500-milliards-de-jetons-plus-tard-laisser-des-agents-ia-decompiler-3apj</link>
      <guid>https://dev.to/matyo91/le-createur-de-hacker-news-500-milliards-de-jetons-plus-tard-laisser-des-agents-ia-decompiler-3apj</guid>
      <description>&lt;h2&gt;
  
  
  À propos de cet article
&lt;/h2&gt;

&lt;p&gt;Cet article met en lumière l'évolution de l'IA dans la résolution de tâches complexes telles que la décompilation de jeux vidéo, ce qui marque une étape importante tant sur le plan des avancées technologiques que du développement des jeux vidéo.&lt;/p&gt;

&lt;p&gt;🚨 &lt;b&gt;Contenu premium.&lt;/b&gt;&lt;br&gt;⬆️ Passez à un abonnement supérieur pour accéder à l'analyse complète.&lt;br&gt;👉 Abonnez-vous ici : &lt;a href="https://www.bonzai.pro/matyo91/shop/48ov_2168/automation-avec-flow-en-php" rel="noopener noreferrer"&gt;&lt;/a&gt;&lt;a href="https://www.bonzai.pro/matyo91/shop/48ov_2168/automation-avec-flow-en-php" rel="noopener noreferrer"&gt;https://www.bonzai.pro/matyo91/shop/48ov_2168/automation-avec-flow-en-php&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>💫 Créateur Reddit - r/opensource : Agent Standup (outil de visualisation IA 100 % local où vos agents travaillent ensemble lors d'un appel vidéo)</title>
      <dc:creator>Mathieu Ledru</dc:creator>
      <pubDate>Mon, 12 Oct 2026 13:06:36 +0000</pubDate>
      <link>https://dev.to/matyo91/createur-reddit-ropensource-agent-standup-outil-de-visualisation-ia-100-local-ou-vos-4om</link>
      <guid>https://dev.to/matyo91/createur-reddit-ropensource-agent-standup-outil-de-visualisation-ia-100-local-ou-vos-4om</guid>
      <description>&lt;h2&gt;
  
  
  À propos de cet article
&lt;/h2&gt;

&lt;p&gt;Agent Standup est un outil gratuit et open source qui transforme les sessions de codage IA en visioconférences d'équipe en direct. Grâce à ses fonctionnalités permettant de suivre en temps réel le statut des agents, il offre aux développeurs un moyen innovant de rationaliser leurs flux de travail.&lt;/p&gt;

&lt;p&gt;🚨 &lt;b&gt;Contenu premium.&lt;/b&gt;&lt;br&gt;⬆️ Passez à la version supérieure pour accéder à l'analyse complète.&lt;br&gt;👉 Abonnez-vous ici : &lt;a href="https://www.bonzai.pro/matyo91/shop/48ov_2168/automation-avec-flow-en-php" rel="noopener noreferrer"&gt;&lt;/a&gt;&lt;a href="https://www.bonzai.pro/matyo91/shop/48ov_2168/automation-avec-flow-en-php" rel="noopener noreferrer"&gt;https://www.bonzai.pro/matyo91/shop/48ov_2168/automation-avec-flow-en-php&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>💫 Créateur sur arXiv - cs.LG : Cache-cache : masquer des concepts pour rechercher des explications concernant les modèles de type « boîte noire »</title>
      <dc:creator>Mathieu Ledru</dc:creator>
      <pubDate>Mon, 12 Oct 2026 11:05:33 +0000</pubDate>
      <link>https://dev.to/matyo91/createur-sur-arxiv-cslg-cache-cache-masquer-des-concepts-pour-rechercher-des-explications-19ab</link>
      <guid>https://dev.to/matyo91/createur-sur-arxiv-cslg-cache-cache-masquer-des-concepts-pour-rechercher-des-explications-19ab</guid>
      <description>&lt;p&gt;Dans le domaine de l'apprentissage automatique, il est essentiel de comprendre les prédictions des modèles, en particulier pour les systèmes de type « boîte noire ». Cet article présente Hide and Seek (HnS), une méthode conçue pour faciliter l'attribution au niveau des concepts dans les modèles de vision. Contrairement aux méthodes traditionnelles, HnS ne nécessite pas d'accéder aux poids du modèle, ce qui lui confère une applicabilité plus large. Restez à l'écoute pour découvrir des analyses détaillées dans la section premium.&lt;/p&gt;

&lt;p&gt;🚨 &lt;b&gt;Contenu premium.&lt;/b&gt;&lt;br&gt;⬆️ Passez à un abonnement supérieur pour accéder à l'analyse complète.&lt;br&gt;👉 Abonnez-vous ici : &lt;a href="https://www.bonzai.pro/matyo91/shop/48ov_2168/automation-avec-flow-en-php" rel="noopener noreferrer"&gt;&lt;/a&gt;&lt;a href="https://www.bonzai.pro/matyo91/shop/48ov_2168/automation-avec-flow-en-php" rel="noopener noreferrer"&gt;https://www.bonzai.pro/matyo91/shop/48ov_2168/automation-avec-flow-en-php&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>🤖 Veille Darkwood - 2026-10-12</title>
      <dc:creator>Mathieu Ledru</dc:creator>
      <pubDate>Mon, 12 Oct 2026 05:03:21 +0000</pubDate>
      <link>https://dev.to/matyo91/veille-darkwood-2026-10-12-14ce</link>
      <guid>https://dev.to/matyo91/veille-darkwood-2026-10-12-14ce</guid>
      <description>&lt;h2&gt;
  
  
  Points saillants
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;OpenAI aborde les défis d'évaluation des workflows avec des critères de performance.&lt;/li&gt;
&lt;li&gt;L'importance de la précision mathématique pour la conformité environnementale dans les émissions industrielles.&lt;/li&gt;
&lt;li&gt;L'impact des agents de codage AI sur les rôles de développeurs juniors.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Pour plus d'informations et d'analyses approfondies, accédez à notre contenu premium.&lt;/p&gt;

&lt;p&gt;🚨 &lt;b&gt;Premium content.&lt;/b&gt;&lt;br&gt;⬆️ Upgrade to access full analysis.&lt;br&gt;👉 Subscribe here : &lt;a href="https://www.bonzai.pro/matyo91/shop/48ov_2168/automation-avec-flow-en-php" rel="noopener noreferrer"&gt;&lt;/a&gt;&lt;a href="https://www.bonzai.pro/matyo91/shop/48ov_2168/automation-avec-flow-en-php" rel="noopener noreferrer"&gt;https://www.bonzai.pro/matyo91/shop/48ov_2168/automation-avec-flow-en-php&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>🖍️ Darkwaar27 : Pigment — Un casse-tête avec des dés basé sur la rotation et l'algèbre des couleurs</title>
      <dc:creator>Mathieu Ledru</dc:creator>
      <pubDate>Sun, 11 Oct 2026 15:11:41 +0000</pubDate>
      <link>https://dev.to/matyo91/darkwaar27-pigment-un-casse-tete-avec-des-des-base-sur-la-rotation-et-lalgebre-des-couleurs-3m7n</link>
      <guid>https://dev.to/matyo91/darkwaar27-pigment-un-casse-tete-avec-des-des-base-sur-la-rotation-et-lalgebre-des-couleurs-3m7n</guid>
      <description>&lt;p&gt;Lire : &lt;a href="https://darkwoodcom.itch.io/darkwaar27" rel="noopener noreferrer"&gt;https://darkwoodcom.itch.io/darkwaar27&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Un dé, une règle
&lt;/h2&gt;

&lt;p&gt;Pigment est un casse-tête déterministe se jouant sur un plateau de 5×5. Un dé occupe une case du plateau. Une commande le déplace vers une case voisine orthogonale et le fait pivoter de quatre-vingt-dix degrés afin qu’une nouvelle face soit tournée vers le bas. Cette face tournée vers le bas colore la case de destination. Rien d’autre ne bouge.&lt;/p&gt;

&lt;p&gt;Le joueur ne choisit jamais de couleur dans un menu. La couleur qui apparaît est celle de la face sur laquelle le dé s’est arrêté après avoir été pivoté par le chemin tracé. Les quatre directions s’apparentent à un calcul d’itinéraire ; elles redéfinissent également les faces qui seront disponibles par la suite. C’est ce couplage qui constitue le jeu.&lt;/p&gt;

&lt;p&gt;Cinq niveaux créés par l’auteur, une limite de coups par plateau, des fonctions « annuler » et « recommencer ». Aucun élément aléatoire et aucun autre acteur.&lt;/p&gt;

&lt;h2&gt;
  
  
  Modélisation d’un dé à six faces
&lt;/h2&gt;

&lt;p&gt;Le dé est constitué de six entiers associés à chaque face : &lt;code&gt;D&lt;/code&gt;, &lt;code&gt;U&lt;/code&gt;, &lt;code&gt;N&lt;/code&gt;, &lt;code&gt;S&lt;/code&gt;, &lt;code&gt;E&lt;/code&gt;, &lt;code&gt;W&lt;/code&gt;. Les opposés sont fixes : nul↔noir, rouge↔bleu, jaune↔blanc. Chaque niveau commence avec la même orientation :&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Direction&lt;/th&gt;
&lt;th&gt;Face&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Bas&lt;/td&gt;
&lt;td&gt;Null&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Haut&lt;/td&gt;
&lt;td&gt;Noir&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Nord&lt;/td&gt;
&lt;td&gt;Rouge&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sud&lt;/td&gt;
&lt;td&gt;Bleu&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Est&lt;/td&gt;
&lt;td&gt;Jaune&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ouest&lt;/td&gt;
&lt;td&gt;Blanc&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Une rotation est une permutation de ces six emplacements. L’est et l’ouest laissent le nord et le sud inchangés ; le nord et le sud laissent l’est et l’ouest inchangés. Au départ, la première face « Est » est jaune, la première face « Sud » est bleue, la première face « Nord » est rouge et la première face « Ouest » est blanche. Les lancers suivants déplacent ces faces.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight gdscript"&gt;&lt;code&gt;&lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="nf"&gt;roll&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;die&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;Dictionary&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;action&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;String&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="kt"&gt;Dictionary&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="n"&gt;d&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;die&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"D"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
  &lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="n"&gt;u&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;die&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"U"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
  &lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;die&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"N"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
  &lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;die&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"S"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
  &lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;die&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"E"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
    &lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="n"&gt;w&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;die&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"W"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
  &lt;span class="k"&gt;match&lt;/span&gt; &lt;span class="n"&gt;action&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="s2"&gt;"E"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
 &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;"D"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"U"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;w&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"N"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"S"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"E"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;u&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"W"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="s2"&gt;"W"&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;
 &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;"D"&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;w&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"U"&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"N"&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"S"&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"E"&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"W"&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;u&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="s2"&gt;"N"&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;
 &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;"D"&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"U"&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"N"&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;u&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"S"&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"E"&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"W"&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;w&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="s2"&gt;"S"&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;
 &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;"D"&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"U"&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"N"&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"S"&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;u&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"E"&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"W"&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;w&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;
 &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;"D"&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"U"&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;u&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"N"&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"S"&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"E"&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"W"&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;w&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Il s’agit d’une permutation d’états, et non d’une simulation physique. Il n’y a ni vitesse angulaire, ni réaction aux collisions, ni maillage de surface. Le cube à l’écran est un dessin représentant ces six entiers une fois que les règles ont accepté la pointe. Un contrôle d’invariance garantit que les opposés restent cohérents : si &lt;code&gt;D&lt;/code&gt; est rouge, &lt;code&gt;U&lt;/code&gt; doit toujours être bleu.&lt;/p&gt;

&lt;h2&gt;
  
  
  Algèbre des couleurs
&lt;/h2&gt;

&lt;p&gt;Les taches forment un petit alphabet : vide, rouge, jaune, bleu, blanc, noir, orange, violet, vert. La face d’atterrissage écrit la cellule de destination via une fonction déterministe de &lt;code&gt;(tache_existante, face_d’atterrissage)&lt;/code&gt; :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight gdscript"&gt;&lt;code&gt;&lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="nf"&gt;mix&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;existing&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;face&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;face&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;EMPTY&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;existing&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;face&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;WHITE&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;EMPTY&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;face&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;BLACK&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;BLACK&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;existing&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;EMPTY&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;face&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;existing&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;face&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;existing&lt;/span&gt;
  &lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="n"&gt;low&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;mini&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;existing&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;face&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="n"&gt;high&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;maxi&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;existing&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;face&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;low&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;RED&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;high&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;YELLOW&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;ORANGE&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;low&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;RED&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;high&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;BLUE&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;renvoie&lt;/span&gt; &lt;span class="n"&gt;VIOLET&lt;/span&gt;
  &lt;span class="n"&gt;si&lt;/span&gt; &lt;span class="n"&gt;low&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;JAUNE&lt;/span&gt; &lt;span class="n"&gt;et&lt;/span&gt; &lt;span class="n"&gt;high&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;BLEU&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;renvoie&lt;/span&gt; &lt;span class="n"&gt;VERT&lt;/span&gt;
  &lt;span class="n"&gt;renvoie&lt;/span&gt; &lt;span class="n"&gt;NOIR&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Les couleurs primaires peignent les cases vides et se mélangent pour former des couleurs secondaires. L'application deux fois de la même couleur primaire n'a aucun effet. Le blanc efface tout, y compris une case scellée. Le noir scelle. Une couleur primaire appliquée sur une couleur secondaire, ou sur une case scellée, la scelle. La valeur null laisse la case inchangée — une rotation libre qui consomme tout de même un coup.&lt;/p&gt;

&lt;p&gt;Le mélange l’emporte sur la réécriture, car la case se souvient de la première couleur primaire. Appliquer la seconde moitié d’une paire implique de dépenser d’autres cases lors des tours qui ont mis cette face vers le bas. Le plateau est à la fois une toile et une boîte de vitesses.&lt;/p&gt;

&lt;p&gt;Une action copie l’état, refuse les directions illégales, effectue un lancer, mélange, puis classe la phase :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight gdscript"&gt;&lt;code&gt;&lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="k"&gt;func&lt;/span&gt; &lt;span class="nf"&gt;apply&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;state&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;Dictionary&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;action&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;String&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="kt"&gt;Dictionary&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
  &lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="n"&gt;current&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;snapshot&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;state&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;current&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"phase"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="s2"&gt;"play"&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;DIRS&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;has&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;action&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;"state"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;current&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"events"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;"accepted"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;action&lt;/span&gt;&lt;span class="p"&gt;}}&lt;/span&gt;
  &lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="n"&gt;from&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Vector2i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;current&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"pos"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Vector2i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;from&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;DIRS&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;action&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;_floor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;current&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;"state"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;current&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"events"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;"accepted"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;action&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"from"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;from&lt;/span&gt;&lt;span class="p"&gt;}}&lt;/span&gt;
    &lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="n"&gt;die&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;Dictionary&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;roll&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;current&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"die"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;action&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="n"&gt;stains&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;Array&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;current&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"stains"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
  &lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="n"&gt;at&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;_index&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;to&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="n"&gt;before&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;stains&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;at&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
  &lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="n"&gt;after&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;mix&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;before&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;die&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"D"&lt;/span&gt;&lt;span class="p"&gt;]))&lt;/span&gt;
    &lt;span class="n"&gt;stains&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;at&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;after&lt;/span&gt;
  &lt;span class="n"&gt;current&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"die"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;die&lt;/span&gt;
  &lt;span class="n"&gt;current&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"stains"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;stains&lt;/span&gt;
  &lt;span class="n"&gt;current&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"pos"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt;
  &lt;span class="n"&gt;current&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"spent"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;current&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"spent"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
    &lt;span class="c1"&gt;# la phase devient « gagnée » ou « perdue » en fonction des marques, de la limite et des conseils légaux&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Les conseils hors plateau sont refusés sans dépenser de coup. Une marque scellée ne constitue pas un blocage définitif immédiat : le blanc peut toujours la supprimer à l’intérieur de la limite, et la fonction « undo » rétablit l’orientation et la marque précédentes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Position × Orientation × Pigment
&lt;/h2&gt;

&lt;p&gt;La recherche de chemin vérifie si une case est accessible. Le pigment vérifie si une case est accessible avec une face spécifique tournée vers le bas, après un historique de taches spécifique. L’état complet est le produit de :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Position sur le 5×5&lt;/li&gt;
&lt;li&gt;de l’orientation du dé (six faces, contrainte par les opposés)&lt;/li&gt;
&lt;li&gt;de vingt-cinq valeurs de coloration&lt;/li&gt;
&lt;li&gt;des coups utilisés par rapport à la limite de niveau&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Deux chemins menant à la même case divergent lorsque le dé arrive avec une face différente, ou lorsqu’un indice antérieur a laissé le mauvais pigment sur une marque.&lt;/p&gt;

&lt;p&gt;Le niveau 2 (&lt;em&gt;Retour&lt;/em&gt;) concrétise ce produit. Départ à &lt;code&gt;(0, 0)&lt;/code&gt;. La seule marque est &lt;code&gt;(1, 0)&lt;/code&gt;, verte. Limite 5. Le vert n’est pas présent sur le dé ; le jaune et le bleu doivent se rencontrer sur cette case.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Étape&lt;/th&gt;
&lt;th&gt;Pointe&lt;/th&gt;
&lt;th&gt;Terrain&lt;/th&gt;
&lt;th&gt;Face vers le bas&lt;/th&gt;
&lt;th&gt;Effet sur &lt;code&gt;(1, 0)&lt;/code&gt;
&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;Est&lt;/td&gt;
&lt;td&gt;&lt;code&gt;(1, 0)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Jaune&lt;/td&gt;
&lt;td&gt;Vide → Jaune&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;Sud&lt;/td&gt;
&lt;td&gt;&lt;code&gt;(1, 1)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Bleu&lt;/td&gt;
&lt;td&gt;la case non marquée devient bleue&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;Ouest&lt;/td&gt;
&lt;td&gt;&lt;code&gt;(0, 1)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Nul&lt;/td&gt;
&lt;td&gt;Pas de couleur&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;Nord&lt;/td&gt;
&lt;td&gt;&lt;code&gt;(0, 0)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Jaune&lt;/td&gt;
&lt;td&gt;La case de départ devient jaune&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;Est&lt;/td&gt;
&lt;td&gt;&lt;code&gt;(1, 0)&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Bleu&lt;/td&gt;
&lt;td&gt;Jaune + Bleu → Vert&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Les étapes 2 à 4 servent principalement à faire pivoter le tableau. La case bleue sous la marque est une preuve fournie par le joueur, pas un objectif. Une autre ligne de longueur 5 rend également &lt;code&gt;(1, 0)&lt;/code&gt; verte : est, sud, est, nord, ouest. Le niveau 2 accepte les deux. Le niveau 3 ajoute une deuxième marque — la case de départ doit être jaune — et la deuxième ligne échoue. Même case verte, mais les cases restantes ne sont pas les bonnes. La liste des marques constitue l’intégralité de la condition de victoire ; les cases non marquées peuvent prendre n’importe quelle couleur à la fin.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cinq niveaux formant une échelle de contraintes
&lt;/h2&gt;

&lt;p&gt;Chaque plateau ajoute une contrainte au même mécanisme :&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Première face&lt;/strong&gt; — placer du jaune sur &lt;code&gt;(1, 0)&lt;/code&gt; en un seul coup. Pas de mélange.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Retour&lt;/strong&gt; — mélanger le vert en repassant par certaines cases. Limite de 5.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ce que vous laissez&lt;/strong&gt; — du vert sur la marque et du jaune au départ. Mêmes cinq coups que pour le niveau 2 ; la ligne verte alternative ne respecte pas la marque supplémentaire.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;L’autre paire&lt;/strong&gt; — de l’orange en &lt;code&gt;(1, 1)&lt;/code&gt;. Le rouge et le jaune doivent se rencontrer. Limite : 6. Peindre la marque une seule fois puis s’arrêter ne permet pas d’obtenir de l’orange.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Blanc&lt;/strong&gt; — &lt;code&gt;(2, 0)&lt;/code&gt; commence scellé. Les marques exigent du jaune sur &lt;code&gt;(1, 0)&lt;/code&gt; et que la case scellée soit vide. Le blanc doit être pivoté sur la case scellée. Éviter la case scellée ne permet pas de gagner.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Les limites de coups correspondent aux longueurs les plus courtes des solutions connues ; un détour doit donc remplacer des étapes plutôt que de les compléter. La victoire est vérifiée après chaque conseil accepté : la tache de chaque marque correspond à sa cible. La défaite survient lorsque la limite est épuisée avec une marque erronée, ou lorsqu’il ne reste plus de conseil valide avec une marque erronée.&lt;/p&gt;

&lt;p&gt;Les cas de relecture testent les tables : les opposés restent cohérents, les chemins créés atteignent la phase attendue, les marques se maintiennent en cas de victoire, les refus de coin ne consomment pas de coups, et le niveau 5 commence scellé. Il s’agit d’une régression par rapport aux lignes connues, et non d’une preuve exhaustive d’unicité.&lt;/p&gt;

&lt;p&gt;La couleur violette figure dans la table de mélange et n’est pas utilisée par ces cinq plateaux. La règle est conservée afin que l’alphabet ne change pas si un plateau ultérieur en a besoin.&lt;/p&gt;

&lt;h2&gt;
  
  
  Règles séparées de l’affichage
&lt;/h2&gt;

&lt;p&gt;L’exécution se divise clairement :&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Élément&lt;/th&gt;
&lt;th&gt;Responsabilité&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;rules.gd&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Orientation, mélange, données de niveau, victoire/défaite, vérifications de relecture&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;main.gd&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Entrée, &lt;code&gt;_draw&lt;/code&gt;, interpolation, interface utilisateur, pile d’historique&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;main.tscn&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Un seul &lt;code&gt;Control&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;code&gt;rules.gd&lt;/code&gt; est un &lt;code&gt;RefCounted&lt;/code&gt; contenant des fonctions statiques. Il n’effectue jamais de dessin. &lt;code&gt;main.gd&lt;/code&gt; contient le dictionnaire actuel, enregistre un instantané en profondeur avant l’acceptation d’une nouvelle pièce, puis lance une interpolation. La vue n’invente jamais la face suivante.&lt;/p&gt;

&lt;p&gt;Les transitions sont des fonctions déterministes de l’état et de l’action ; la vue est une projection. Le programme n’est pas purement fonctionnel : les dictionnaires et les tableaux sont modifiés après une copie d’instantané, et la fonction « Annuler » utilise une pile d’historique explicite plutôt que des données persistantes. Cette séparation suffit à garantir la testabilité de la table de permutation sans avoir recours à un arbre de scène composé de nœuds de faces.&lt;/p&gt;

&lt;p&gt;Pas d’ECS, pas de corps physiques, pas de shaders, pas de générateur procédural. La fonction « Annuler » retire un élément de l’historique et exécute une interpolation inverse plus courte. La fonction « Redémarrer » reconstruit &lt;code&gt;start_level(index)&lt;/code&gt; et efface la pile. Les deux fonctionnent après une perte de données, ce qui permet de récupérer une marque scellée.&lt;/p&gt;

&lt;h2&gt;
  
  
  Rendu de l’état
&lt;/h2&gt;

&lt;p&gt;Le plateau est constitué d’une couche de pigment uniforme sur un fond sombre. Les marques sont composées d’un anneau et d’une lettre (&lt;code&gt;Y&lt;/code&gt;, &lt;code&gt;G&lt;/code&gt;, &lt;code&gt;O&lt;/code&gt;, …) ; l’objectif n’est donc pas uniquement indiqué par la teinte. Les cases scellées utilisent un remplissage sombre et un contour fin.&lt;/p&gt;

&lt;p&gt;Le dé est un cube pseudo-3D : six quadrilatères, un biais de caméra, un algorithme de peinture en fonction de la profondeur, des glyphes sur la face supérieure. Lors d’un déplacement vers le haut, les positions sont interpolées, le cube s’élève selon un arc sinusoïdal et une &lt;code&gt;Basis&lt;/code&gt; pivote de &lt;code&gt;k · π/2&lt;/code&gt; autour de l’axe de déplacement. La tache de destination effectue une interpolation entre la couleur précédente et la nouvelle avec le même poids. Un mélange correspond à un changement de couleur. Le blanc clignote sur le papier, puis se pose au sol.&lt;/p&gt;

&lt;p&gt;Sous le plateau, un compas de nuanciers montre la face inférieure et les quatre côtés — le dé posé à plat. L’orientation est la ressource ; le dessin doit rendre la face visible lisible, sinon le mélange semble arbitraire.&lt;/p&gt;

&lt;p&gt;Les commandes sont les flèches, les touches WASD, les tapotements sur les cellules voisines et un pavé tactile à l’écran. Pendant qu’une interpolation s’exécute, les pointes sont ignorées afin que l’image ne prenne pas de retard par rapport aux règles.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ce qu’implique le modèle
&lt;/h2&gt;

&lt;p&gt;Position × orientation × taches : voilà un vaste espace d’états issu d’un petit ensemble de règles. Les conseils nuls consomment un tour pour pivoter sans peindre. Les tableaux déterministes restent difficiles à parcourir à l’œil nu : la ligne verte en cinq étapes est évidente une fois qu’on l’a vue, mais opaque avant. L’animation qui nomme une règle — arc de pointe, changement de tache, boussole — fait partie de l’interface, ce n’est pas une décoration.&lt;/p&gt;

&lt;p&gt;La campagne est finie : cinq plateaux, le violet n’est pas utilisé, pas de score. L’objet intéressant reste le dé : pièce et peinture, avec l’orientation comme mémoire. Tout le reste n’est qu’un tableau et une interpolation.&lt;/p&gt;

</description>
      <category>computerscience</category>
      <category>design</category>
      <category>gamedev</category>
    </item>
    <item>
      <title>💫 Fondateur de Hacker News : le troisième centre de données de Yandex Cloud a été piraté</title>
      <dc:creator>Mathieu Ledru</dc:creator>
      <pubDate>Sun, 11 Oct 2026 14:03:30 +0000</pubDate>
      <link>https://dev.to/matyo91/fondateur-de-hacker-news-le-troisieme-centre-de-donnees-de-yandex-cloud-a-ete-pirate-3oma</link>
      <guid>https://dev.to/matyo91/fondateur-de-hacker-news-le-troisieme-centre-de-donnees-de-yandex-cloud-a-ete-pirate-3oma</guid>
      <description>&lt;p&gt;La récente attaque contre le troisième centre de données de Yandex Cloud a provoqué une onde de choc au sein de la communauté technologique, mettant en lumière les défis persistants en matière de sécurité et de disponibilité du cloud. Restez à l'écoute pour suivre l'évolution de cette affaire.&lt;/p&gt;

&lt;p&gt;🚨 &lt;b&gt;Contenu premium.&lt;/b&gt;&lt;br&gt;⬆️ Passez à un abonnement supérieur pour accéder à l'analyse complète.&lt;br&gt;👉 Abonnez-vous ici : &lt;a href="https://www.bonzai.pro/matyo91/shop/48ov_2168/automation-avec-flow-en-php" rel="noopener noreferrer"&gt;&lt;/a&gt;&lt;a href="https://www.bonzai.pro/matyo91/shop/48ov_2168/automation-avec-flow-en-php" rel="noopener noreferrer"&gt;https://www.bonzai.pro/matyo91/shop/48ov_2168/automation-avec-flow-en-php&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>💫 Créateur Reddit - r/opensource : Gérer des dépôts GitHub sans contrôler tous les paramètres</title>
      <dc:creator>Mathieu Ledru</dc:creator>
      <pubDate>Sun, 11 Oct 2026 13:03:43 +0000</pubDate>
      <link>https://dev.to/matyo91/createur-reddit-ropensource-gerer-des-depots-github-sans-controler-tous-les-parametres-3bdf</link>
      <guid>https://dev.to/matyo91/createur-reddit-ropensource-gerer-des-depots-github-sans-controler-tous-les-parametres-3bdf</guid>
      <description>&lt;p&gt;La gestion de plusieurs dépôts GitHub peut s’avérer fastidieuse, surtout lorsque les paramètres et les configurations varient considérablement. Dans cet article, nous explorons l’approche innovante d’Octosmith, un outil open source conçu pour simplifier ce processus grâce à une gestion déclarative, permettant ainsi aux développeurs de gérer plusieurs dépôts sans avoir à assumer l’entière responsabilité de chaque paramètre.&lt;/p&gt;

&lt;p&gt;🚨 &lt;b&gt;Contenu premium.&lt;/b&gt;&lt;br&gt;⬆️ Passez à la version supérieure pour accéder à l'analyse complète.&lt;br&gt;👉 Abonnez-vous ici : &lt;a href="https://www.bonzai.pro/matyo91/shop/48ov_2168/automation-avec-flow-en-php" rel="noopener noreferrer"&gt;&lt;/a&gt;&lt;a href="https://www.bonzai.pro/matyo91/shop/48ov_2168/automation-avec-flow-en-php" rel="noopener noreferrer"&gt;https://www.bonzai.pro/matyo91/shop/48ov_2168/automation-avec-flow-en-php&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>🤖 Veille Darkwood - 2026-10-11</title>
      <dc:creator>Mathieu Ledru</dc:creator>
      <pubDate>Sun, 11 Oct 2026 05:03:15 +0000</pubDate>
      <link>https://dev.to/matyo91/veille-darkwood-2026-10-11-4f38</link>
      <guid>https://dev.to/matyo91/veille-darkwood-2026-10-11-4f38</guid>
      <description>&lt;h2&gt;
  
  
  Points saillants
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Bots de signal crypto&lt;/strong&gt;: Utiliser des API AI pour automatiser la négociation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Audits de contrats intelligents&lt;/strong&gt;: L'importance de l'analyse dynamique par l'IA.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;🚨 &lt;b&gt;Premium content.&lt;/b&gt;&lt;br&gt;⬆️ Upgrade to access full analysis.&lt;br&gt;👉 Subscribe here : &lt;a href="https://www.bonzai.pro/matyo91/shop/48ov_2168/automation-avec-flow-en-php" rel="noopener noreferrer"&gt;&lt;/a&gt;&lt;a href="https://www.bonzai.pro/matyo91/shop/48ov_2168/automation-avec-flow-en-php" rel="noopener noreferrer"&gt;https://www.bonzai.pro/matyo91/shop/48ov_2168/automation-avec-flow-en-php&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>💫 Fondateur de Hacker News : Cloudflare rachète Deno</title>
      <dc:creator>Mathieu Ledru</dc:creator>
      <pubDate>Sat, 10 Oct 2026 14:03:58 +0000</pubDate>
      <link>https://dev.to/matyo91/fondateur-de-hacker-news-cloudflare-rachete-deno-29h1</link>
      <guid>https://dev.to/matyo91/fondateur-de-hacker-news-cloudflare-rachete-deno-29h1</guid>
      <description>&lt;p&gt;Cloudflare a officiellement racheté Deno, un moteur d'exécution moderne pour JavaScript et TypeScript, ce qui témoigne d'une stratégie visant à renforcer ses capacités en matière d'informatique en périphérie. Cette acquisition marque un tournant décisif dans le paysage technologique, reflétant les tendances actuelles vers les architectures sans serveur et les outils axés sur les développeurs.&lt;/p&gt;

&lt;p&gt;🚨 &lt;b&gt;Contenu premium.&lt;/b&gt;&lt;br&gt;⬆️ Passez à un abonnement supérieur pour accéder à l'analyse complète.&lt;br&gt;👉 Abonnez-vous ici : &lt;a href="https://www.bonzai.pro/matyo91/shop/48ov_2168/automation-avec-flow-en-php" rel="noopener noreferrer"&gt;&lt;/a&gt;&lt;a href="https://www.bonzai.pro/matyo91/shop/48ov_2168/automation-avec-flow-en-php" rel="noopener noreferrer"&gt;https://www.bonzai.pro/matyo91/shop/48ov_2168/automation-avec-flow-en-php&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
