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 1234567891011121314151617181920@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 1234567891011121314[ { "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.
@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
[ { "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" } ]
Voici une nouvelle version du script, à partir des judicieuses observations de kolodz. Code lua : Sélectionner tout - Visualiser dans une fenêtre à part 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 -- 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.
-- 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. ]] )
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.
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 1234567891011var 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 12345678910( 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.
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+"'),"); }
( 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***