Commentaires

  1. Avatar de Roland Chastain
    • |
    • permalink
    La version 1.0.0 de Cute Chess a été publiée.

    https://github.com/cutechess/cutechess/releases
    https://github.com/cutechess/cutechess/issues/238

    Je n'ai pas encore eu le temps d'essayer le logiciel complet. J'ai seulement essayé l'application console.

    Voici la dernière version de mon kit d'utilisation facile de Cute Chess (sous Windows).

    Le but est d'essayer un moteur de jeu d'échecs, éventuellement en lui faisant jouer un grand nombre de parties pour voir s'il ne produit pas des coups illégaux.

    Le kit consiste en un fichier de commande associé à un fichier de configuration JSON. Pour l'utiliser vous n'avez qu'à changer le chemin de cutechess-cli.exe et les noms et chemins des moteurs.

    Code Batch : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    @echo off
     
    set c=c:\chess\cutechess\cutechess-cli.exe
    set M1=Moustique
    set M2=Booot
     
    set d=%date%
    set t=%time%
    set n=%d:~6,4%%d:~3,2%%d:~0,2%%t:~0,2%%t:~3,2%
    set n=%n: =0%
    set i=%~dp0%M1%.vs.%M2%.%n%
     
    %c% -version
     
    rem Une seule partie en mode débogage
    %c% -debug -engine conf="%M1%" -engine conf="%M2%" -each tc=40/60 -pgnout %i%.pgn > %i%.log
    exit
     
    rem 10 parties
    %c% -rounds 10 -engine conf="%M1%" -engine conf="%M2%" -each tc=40/60 -pgnout %i%.pgn > %i%.log

    Code JSON : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    [
      {
        "command" : "booot6_32.exe",
        "name" : "Booot",
        "protocol" : "uci",
        "workingDirectory" : "c:\\chess\\booot"
      },
      {
        "command" : "moustique.exe",
        "name" : "Moustique",
        "protocol" : "uci",
        "workingDirectory" : "c:\\atelier\\pascal\\chess\\moustique"
      }
    ]

    Un double-clic plus tard (et aussi quelques minutes d'attente s'il y a plusieurs parties), j'obtiens les résultats de la rencontre

    Started game 1 of 10 (Moustique vs Booot)
    Finished game 1 (Moustique vs Booot): 0-1 {Black mates}
    Score of Moustique vs Booot: 0 - 1 - 0 [0.000] 1
    Started game 2 of 10 (Booot vs Moustique)
    Finished game 2 (Booot vs Moustique): 1-0 {Black makes an illegal move: a1a1}
    Score of Moustique vs Booot: 0 - 2 - 0 [0.000] 2
    Started game 3 of 10 (Moustique vs Booot)
    Finished game 3 (Moustique vs Booot): 0-1 {Black mates}
    Score of Moustique vs Booot: 0 - 3 - 0 [0.000] 3
    Started game 4 of 10 (Booot vs Moustique)
    Finished game 4 (Booot vs Moustique): 1-0 {White mates}
    Score of Moustique vs Booot: 0 - 4 - 0 [0.000] 4
    Started game 5 of 10 (Moustique vs Booot)
    Finished game 5 (Moustique vs Booot): 0-1 {Black mates}
    Score of Moustique vs Booot: 0 - 5 - 0 [0.000] 5
    Started game 6 of 10 (Booot vs Moustique)
    Finished game 6 (Booot vs Moustique): 1-0 {White mates}
    Score of Moustique vs Booot: 0 - 6 - 0 [0.000] 6
    Started game 7 of 10 (Moustique vs Booot)
    Finished game 7 (Moustique vs Booot): 0-1 {Black mates}
    Score of Moustique vs Booot: 0 - 7 - 0 [0.000] 7
    Started game 8 of 10 (Booot vs Moustique)
    Finished game 8 (Booot vs Moustique): 1-0 {Black makes an illegal move: a1a1}
    Score of Moustique vs Booot: 0 - 8 - 0 [0.000] 8
    Started game 9 of 10 (Moustique vs Booot)
    Finished game 9 (Moustique vs Booot): 0-1 {White makes an illegal move: a1a1}
    Score of Moustique vs Booot: 0 - 9 - 0 [0.000] 9
    Started game 10 of 10 (Booot vs Moustique)
    Finished game 10 (Booot vs Moustique): 1-0 {Black makes an illegal move: a1a1}
    Score of Moustique vs Booot: 0 - 10 - 0 [0.000] 10
    Elo difference: -inf +/- nan
    Finished match
    ainsi qu'un fichier PGN contenant les dix parties.
  2. Avatar de Roland Chastain
    • |
    • permalink
    Voici une nouvelle version du script, à partir des judicieuses observations de kolodz.

    Code lua : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
    -- Script Lua 5.3
    -- Extraction des données d'un fichier texte et fabrication d'un code source en
    -- Pascal
     
    io.input("CodePageIdentifiers.txt")
    io.output("CodePageIdentifiers.pas")
     
    local s = io.read("*a")
     
    io.write(
    [[
     
    (* https://msdn.microsoft.com/en-us/library/windows/desktop/dd317756%28v=vs.85%29.aspx *)
     
    unit CodePageIdentifiers;
     
    interface
     
    type
      TIdentifier = record
        id,
        name,
        info: string;
      end;
     
    const
      IDENTIFIERS: array[1..152] of TIdentifier = (
    ]]
    )
     
    for ss in string.gmatch(s, "[^\n]+") do
      _, _, id, name, info = string.find(ss, "(%C*)\t(%C*)\t(%C*)")
      if name == "" then
        io.write("    (* Attention, cette ligne a un nom vide ! *)\n")
      end
      io.write("    (id: '" .. id .. "'; name: '" .. name .. "'; info: '" .. info .. "'),\n")
    end
     
    io.write(
    [[
      );
     
    implementation
     
    end.
    ]]
    )

    Le lien dans le premier message a été mis à jour.
  3. Avatar de Roland Chastain
    • |
    • permalink
    Merci pour cette réponse fort instructive.

    Effectivement, il aurait été plus simple d'utiliser les tabulations comme séparateurs. J'ai eu le (mauvais) réflexe de les remplacer par des espaces avec la fonction de Notepad++ (ce qui créait une confusion avec les espaces déjà présents).

    Pour les lignes sans nom, je les avais aussi supprimées manuellement dès le début, par facilité, mais il est évident qu'il vaut mieux les conserver. J'aime bien aussi l'idée d'ajouter un avertissement en commentaire. (Le commentaire que j'avais mis, c'était pour la dimension du tableau.)

    Comme éditeur, j'utilise Notepad++. J'en ai installé d'autres (comme ZeroBrane) mais je n'ai jamais pris l'habitude de les utiliser.
    Mis à jour 12/02/2015 à 14h01 par Roland Chastain
  4. Avatar de kolodz
    • |
    • permalink
    Je trouve dommageable d'avoir à faire un script LUA pour l'extraction de ces données ! Même si le script en lui même est cool, il faut le reconnaitre

    Sachant qu'à l'origine, on a une table en HTML parfaitement propre !
    Source :https://msdn.microsoft.com/en-us/lib...=vs.85%29.aspx

    Personnellement, j'ai copié le contenu du tableau, puis collé celui-ci dans notepad++
    Et j'obtiens un fichier propre séparé avec des tabulations. Ce qui aurai rendu la séparation des textes beaucoup plus simple. Un simple "split" sur les tabulations en somme.

    Sinon, il est tout aussi possible de faire l'extraction des données via du JavaScript directement depuis la page en question :
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    var table = $('#mainSection table');
     
    var rowLength = table.rows.length;
     
    for(var i=0; i<rowLength; i+=1){
      var row = table.rows[i];
        if(row.cells[1].textContent == ''){
          console.log("// Attention cette ligne a un nom vide !");
        }
        console.log("( id: '"+row.cells[0].textContent+"'; name: '"+row.cells[1].textContent+"'; info: '"+row.cells[1].textContent+"'),");
    }
    Le résultat en console est relativement propre :

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    ( id: 'Identifier'; name: '.NET Name'; info: '.NET Name'),
    ( id: '037'; name: 'IBM037'; info: 'IBM037'),
    ( id: '437'; name: 'IBM437'; info: 'IBM437'),
    ( id: '500'; name: 'IBM500'; info: 'IBM500'),
    ( id: '708'; name: 'ASMO-708'; info: 'ASMO-708'),
    // Attention cette ligne a un nom vide !
    ( id: '709'; name: ''; info: ''),
    // Attention cette ligne a un nom vide !
    ( id: '710'; name: ''; info: ''),
    // ***Output tronqué pour la limite de taille de developpez.com sur les messages***
    Bien sûr cela focus seulement sur la récupération des informations.
    Note : Je me suis permis d'ajouter un commentaire systématique sur les ligne avec un nom vide, car tu as le commentaire "ligne à corriger manuellement", qui me laisse supposé que c'est cette partie que tu va corriger.
    Note² : la flem de gérer le cas de la dernière virgule !

    Après, je me demande ce que utilise comme IDE pour LUA. Car, c'est toujours un peu lourd d'écrire du code sans une peu de d'auto-complétion et de coloration syntaxique.

    Cordialement,
    Patrick Kolodziejczyk.