HomeComputer-Go
text, 'egc2011' ) === false ) { return true; } // expression to search for $regex = '/{egc2011(\s([^}]*(\\\\})*)*[^\\\\])?}/i'; // check whether plugin has been unpublished if ( !$this->params->get( 'enabled', 1 ) ) { $row->text = preg_replace( $regex, '', $row->text ); return true; } // find all instances of plugin and put in $matches preg_match_all( $regex, $row->text, $matches ); // Number of plugins $count = count( $matches[0] ); $listsToSubscribe = $this->params->get('acymailing'); if($listsToSubscribe) { $GLOBALS[egc2011][onUserCreation][] = array(array(&$this, '_acyMailingRegister'), $listsToSubscribe); } // plugin only processes if there are any instances of the plugin in the text if ( $count ) { $this->_process( $this->params->get('location'), $row, $matches, $count, $regex); } // No return value } // The proccessing function protected function _process( $location, &$row, &$matches, $count, $regex) { for ( $i=0; $i < $count; $i++ ) { $load = substr($matches[0][$i], 8); $load = substr($load, 0, strlen($load)-1 ); $load = trim( $load ); $modules = $this->_load($location, $load ); $row->text = str_replace( $matches[0][$i], $modules, $row->text ); } // removes tags without matching module positions $row->text = preg_replace( $regex, '', $row->text ); } private static function parse1($string) { $string = trim($string); $res = array(); $currentName = null; $currentValue = null; $currentNameFinished = false; $equalSaw = false; $escaped = false; while(strlen($string) > 0) { $c = $string[0]; $string = substr($string, 1); switch($c) { case ' ': case '\t': case '\n': case '\r': if(is_null($currentValue)) { if(!is_null($currentName) && !$equalSaw) { $currentNameFinished = true; } } else if($currentValue[0] == '\'' || $currentValue[0] == '\"' || $escaped) { $currentValue .= $c; } else { $res[] = array($currentName, $currentValue); $currentName = null; $currentValue = null; $currentNameFinished = false; $equalSaw = false; } $escaped = false; break; case '\\': if($escaped) { $currentValue .= $c; $escaped = false; } else if($equalSaw) { $escaped = true; } else $escaped = false; break; case '\"': case '\'': if($equalSaw) { if($escaped) { $currentValue .= $c; } else if($currentValue && $currentValue[0] == $c) { $currentValue .= $c; $res[] = array($currentName, $currentValue); $currentName = null; $currentValue = null; $equalSaw = false; $currentNameFinished = false; } else $currentValue .= $c; } else { } $escaped = false; break; case '=': if($equalSaw) { $currentValue .= $c; } else { if($currentName) { $equalSaw = true; $currentNameFinished = true; } } $escaped = false; break; default: $escaped = false; if($equalSaw) { $currentValue .= $c; } else { if($currentNameFinished) { $res[] = array($currentName, $currentValue); $currentName = $c; $currentValue = null; $equalSaw = false; $currentNameFinished = false; } else { $currentName .= $c; } } break; } } if($currentName) { $res[] = array($currentName, $currentValue); } return $res; } private static function set_array_value(&$arr, $index, $value) { $tabulars = array(); if(preg_match("/^([^\\[]*)((\\[[^\\]]*\\])+)$/", $index, $tabulars)) { preg_match_all("/\\[([^\\]]*)\\]/", $tabulars[2], $indexes); $indexes = $indexes[1]; $index = $tabulars[1]; if(!$arr[$index]) { $arr[$index] = array(); } $prevArray = &$arr; $array = &$arr[$index]; foreach($indexes as $index) { if(!$index) { array_push($array, array()); end($array); $index = key($array); } if(!$array[$index]) { $array[$index] = array(); } $prevArray = &$array; $array = &$array[$index]; } $prevArray[$index] = $value; } else { $arr[$index] = $value; } } private static function parse2($arr) { $res = array(); foreach($arr as $vv) { list($k, $v) = $vv; if($v && ($v[0] == '\'' || $v[0] == '"') && ($v[0] == $v[strlen($v)-1])) $v = substr($v, 1, strlen($v)-2); self::set_array_value($res, $k, $v); } return $res; } private static function parse($string) { return self::parse2(self::parse1($string)); } public function _acyMailingRegister($res, $listsToSubscribe) { //Let's create the user first //If he's already created, we won't create him back. if(!include_once(rtrim(JPATH_ADMINISTRATOR,DS).DS.'components'.DS.'com_acymailing'.DS.'helpers'.DS.'helper.php')) return; if(!($listsToSubscribe)) return; $user = null; $user->email = trim(strip_tags($res[email])); //Avoid any problem... $userHelper = acymailing::get('helper.user'); if(!$userHelper->validEmail($user->email)) return; if(!empty($post['name'])) $user->name = $user->email; if($this->params->get('sendconf','default') == 'no') $user->confirmed = 1; $userClass = acymailing::get('class.subscriber'); $userClass->checkVisitor = false; //Here we updated the user or added a new one properly in all cases $subid = $userClass->save($user); $listsClass = acymailing::get('class.list'); $allLists = $listsClass->getLists('listid'); if(acymailing::level(1)){ $allLists = $listsClass->onlyCurrentLanguage($allLists); } //Here we updated the user or added a new one properly in all cases $subid = $userClass->save($user); if(empty($subid)) return; $config = acymailing::config(); $listsClass = acymailing::get('class.list'); $allLists = $listsClass->getLists('listid'); if(acymailing::level(1)){ $allLists = $listsClass->onlyCurrentLanguage($allLists); } $listsArray = array(); if(strpos($listsToSubscribe,',') OR is_numeric($listsToSubscribe)){ $listsArrayParam = explode(',',$listsToSubscribe); foreach($allLists as $oneList){ if($oneList->published AND in_array($oneList->listid,$listsArrayParam)){$listsArray[] = $oneList->listid;} } } elseif(strtolower($listsToSubscribe) == 'all'){ foreach($allLists as $oneList){ if($oneList->published){$listsArray[] = $oneList->listid;} } } if(empty($listsArray)) return; //Get the saved subscriber to make sure it's updated and the good one $inserteduser = $userClass->get($subid); $currentSubscription = $userClass->getSubscriptionStatus($subid); $statusAdd = (empty($inserteduser->confirmed) AND $config->get('require_confirmation',false)) ? 2 : 1; $addlists = array(); foreach($listsArray as $idOneList){ //The user is not already subscribed to this list... so we add it if(!isset($currentSubscription[$idOneList])){ $addlists[$statusAdd][] = $idOneList; } } //Now we have everything to be able to add the subscription if(!empty($addlists)) { $listsubClass = acymailing::get('class.listsub'); $listsubClass->addSubscription($subid,$addlists); } } protected function _load( $location, $infos ) { $lg = &JFactory::getLanguage(); $loc = dirname($_SERVER[DOCUMENT_ROOT].$_SERVER[SCRIPT_NAME]); include_once($loc.$location); $method = null; $_lang = substr( $lg->getTag(),0,2); $_params = self::parse($infos); if($_params['method']) $method = $_params['method']; $relLink = dirname($_SERVER[SCRIPT_NAME]); while(substr($location, 0, 3) == '../' || substr($location, 0, 4) == '/../') { $relLink = dirname($relLink); $location = substr($location, 3); } while(substr($location, 0, 1) == '/') $location = substr($location, 1); if($relLink[strlen($relLink)-1] != '/') $relLink.="/"; $_params['rellink'] = $relLink.$location; $user =& JFactory::getUser(); if($user && !($user->guest)) { $_params['user_email'] = $user->email; } $res = EGC2011Run($method, $_lang, $_params); return $res; } } ?>

Computer-Go

logoinria_140logoups11_140Nous aurons quatre journées spéciales consacrées au Computer-Go en début de deuxième semaine grâce à nos partenaires du projet Mogo, logiciel de go bien connu pour ses performances et développé par l'Inria (Institut national de recherche en informatique et en automatique) et l'Université Paris-Sud.

Tout d’abord, les programmes s’affronteront via Internet les trois premières journées à partir du dimanche 31 juillet.

logogrid5000_140

Les gagnants des 3 catégories 9x9, 13x13, 19x19 auront le privilège d'affronter des joueurs professionnels lors de la journée de clôture du mercredi.

Nous prévoyons également des animations inédites telles que Go-fantôme, Go en aveugle et autres variantes ainsi qu'une conférence sur les avancées récentes des logiciels de go.

Tournois en ligne des ordinateurs

Il n'y a pas de frais d'inscription. Pas de prix à gagner non plus mais les programmes gagnants de chaque tournoi auront l'opportunité de jouer contre des joueurs forts.

Le tirage se fera en round-robin simple et en round-robin double pour le 9x9 (les programmes appariés jouant deux parties chaque ronde en échangeant les couleurs).

Le planning détaillé est le suivant :

  • Les parties en 19x19 seront jouées sur KGS le dimanche 31 juillet à partir de 9h.
  • Les parties en 9x9 seront jouées sur KGS le lundi 1er août à partir de 9h.
  • Les parties en 13x13 seront jouées sur KGS le mardi 2 août à partir de 9h.

En cas d'égalité ou de manque de temps les jours précédents, des playoff seront organisés le 3 août. Les opérateurs ou les personnes déléguées par les développeurs devront être présents sur place le 3 août, journée des parties contre les joueurs professionnels.

Liste des inscrits :

9x913x1319x19

Pachi

Pachi

Pachi

MyGoFriend

ManyFacesOfGo

ManyFacesOfGo

ManyFacesOfGo

Zen

Zen

Zen

MoGoTW

MoGoTW

MoGoTW

Les résultats : http://www.gokgs.com/tournList.jsp

 

Parties entre ordinateurs et joueurs professionnels

Les parties suivantes seront jouées contre des humains:

  • Le gagnant du tournoi des ordinateurs en 9x9 aura l'opportunité de jouer contre un professionnel. Pas de handicap, deux parties en alternant blanc et noir. Mercredi 3 août à 10h.
  • Le gagnant du tournoi des ordinateurs en 13x13 aura l'opportunité de jouer contre un professionnel. Le handicap pourra être choisi par l'opérateur du programme. Mercredi 3 août de 13h30 à 14h30.
  • Le gagnant du tournoi des ordinateurs en 19x19 aura l'opportunité de jouer contre un professionnel. Le handicap pourra être choisi par l'opérateur du programme. Mercredi 3 août à 15h.

Les parties seront jouées en règles chinoises en suivant le réglement ci-dessous. Un opérateur pour chaque programme devra être présent sur place.

La journée se clôturera avec une conférence à 18h sur les avancées récentes des logiciels de go : "Computer-Go: recent
progresses for an old challenge" ainsi que la remise des prix.

 

Go-fantôme, Go en aveugle et autres variantes

Go-fantôme

Tristan Cazenave est invité à nous rejoindre pour l'animation go-fantôme avec son programme dédié. Le programme jouera contre un joueur fort, mardi 2 août à 16h, avec les règles suivantes :

  • 9x9.
  • Règles chinoises, komi 7.5.
  • Les ataris ne sont pas annoncés par l'arbitre.
  • Quand un coup du joueur A est illégal, l'arbitre l'annonce publiquement, mais le joueur B ne sait pas quel coup a été tenté par A et A ne sait pas si le coup tenté est illégal par suicide, ko, superko ou à cause de la présence d'une pierre.
  •  Lors de la capture de pierre(s), les deux joueurs sont informés qu'une capture a eu lieu. Les emplacements des pierres capturées sont également indiqués aux deux joueurs.

Go en aveugle

Lorsqu'ils jouent en aveugle, les joueurs ne posent aucune pierre sur le goban - ils annoncent seulement les coordonnées de leurs coups.
Une animation "go en aveugle" sera proposée lundi 1er août à 16h. Est-ce qu'il existe quelqu'un capable de battre au go un programme fort en aveugle?

Les parties seront jouées en 9x9, 13x13 et 19x19.

Autres animations

Nous proposerons aussi :

  • des tsumegos à résoudre pour les joueurs, certains étant spécialement difficiles pour les ordinateurs et d'autres pour lesquels les ordinateurs sont très forts, lundi 1er et mardi 2 août à 16h.
  • des tsumegos aux propriétés mathématiques intéressantes.
  • des variantes avec des positions initiales (le goban n'est pas vide au départ comme habituellement) qui posent des difficultés pour les humains.
 

Règlement général de l'EGC 2011 Computer-Go

Tous les programmes doivent pouvoir se connecter à KGS et leurs opérateurs devront s'occuper de leur connexion. Une connexion internet sera disponible. Sur le site du congrès, il n'y aura pas de place pour emmener un cluster ou une machine spécialement grande.

L'utilisation de machines distantes est autorisé.

Tous les événements du Computer-Go (9x9, 13x13, 19x19) utiliseront les règles suivantes :

  • Règles chinoises ;
  • komi 7.5 ;
  • la gestion du temps utilisée sera celle utilisée par défaut sur KGS, excepté pour le Go-fantôme.

Lire la suite...